arduino basics

44
LTKA Labs Arduino Basics Eueung Mulyana http://eueung.github.io/ET3010/arduino ET-3010 | Attribution-ShareAlike CC BY-SA 1 / 44

Upload: eueung-mulyana

Post on 14-Jan-2017

398 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Arduino basics

LTKA Labs

Arduino BasicsEueung Mulyana

http://eueung.github.io/ET3010/arduinoET-3010 | Attribution-ShareAlike CC BY-SA

1 / 44

Page 2: Arduino basics

Outline

Short Intro

Quick Start

Networking

MQTT

2 / 44

Page 3: Arduino basics

Short Intro

3 / 44

Page 4: Arduino basics

ArduinoAn open-source hardware and software platform for building

electronics projects.

Arduino is an open-source electronics platform based oneasy-to-use hardware and software. It's intended foranyone making interactive projects.

Arduino senses the environment by receiving inputs frommany sensors, and affects its surroundings by controllinglights, motors, and other actuators.

You can tell your Arduino what to do by writing code inthe Arduino programming language and using theArduino development environment.

Several Arduino-Board variants exist e.g.: UNO, NANO,MEGA, DUE, YUN, etc.

4 / 44

Page 5: Arduino basics

 

5 / 44

Page 6: Arduino basics

 

6 / 44

Page 7: Arduino basics

7 / 44

Page 8: Arduino basics

Quick Start

8 / 44

Page 9: Arduino basics

9 / 44

This ChecklistPlease:

UNO BoardCompatible +Acessories

Components +Wires

ARDUINO IDE

Page 10: Arduino basics

10 / 44

Page 11: Arduino basics

 

11 / 44

Page 12: Arduino basics

 

Tools - Config12 / 44

Page 13: Arduino basics

 

Sketch Upload13 / 44

Page 14: Arduino basics

14 / 44

Page 15: Arduino basics

15 / 44

Page 16: Arduino basics

Project #1 

13 12 11 10

9 8 7 6 5 4 3 2

L

5V A0

ANALOG IN

AREF

1

GND

TXRX

RESET

3V3

A1

A2

A3

A4

A5

VIN

GND

GND

DIGITAL (PWM= )

Arduino TM

IOREF

ICSP

ICSP2

ON

POWER

01TX

0

RX0RESET

11

55

1010

1515

2020

2525

3030

A A

B B

C C

D D

E E

F F

G G

H H

I I

J J

Fritzing Breadboard

16 / 44

Page 17: Arduino basics

Project #1 

D0/RX

D1/TXD

2

D3 PW

MD4

D5 PW

M

D6 PW

MD7

D8

D9 PW

M

D10 PW

M/SS

D11 PW

M/M

OSI

D12/M

ISO

D13/SCK

RESET

RESET2

AREF

ioref

A0

A1

A2

A3

A4/SD

A

A5/SCL

N/C

GND

3V3

5V

VIN

ArduinoUno

(Rev3)

21

211

2

12

13

2

Part1

LED1

Red (633nm)

R1100Ω

R210kΩ

S1R310kΩ

Fritzing Schematic

17 / 44

Page 18: Arduino basics

Project #1 Sketchint inPin = 2; int outPin = 3; int potPin = A0;

int state = LOW; int reading; int previous = LOW;

long time = 0; long debounce = 1000;

int potVal = 0; int prevPotVal = 0;

void setup() { Serial.begin(9600); delay(500);

pinMode(inPin, INPUT); pinMode(outPin, OUTPUT); Serial.println("Program started ...");}

void loop() { reading = digitalRead(inPin);

if (reading && (millis() - time > debounce)) { if (previous == LOW) { Serial.println("[PHYSICAL] LED turned on"); state = HIGH; } else { Serial.println("[PHYSICAL] LED turned off"); state = LOW; }

time = millis(); digitalWrite(outPin, state); previous = state; prevPotVal = potVal - 10; } potVal = analogRead(potPin); if((state == HIGH) && (abs(potVal-prevPotVal)>4)){ analogWrite(outPin, potVal/4); Serial.print("[PHYSICAL] LED intensity "); Serial.println(potVal/4); prevPotVal = potVal; }}

18 / 44

Page 19: Arduino basics

19 / 44

Page 20: Arduino basics

 

Serial Monitor20 / 44

Page 21: Arduino basics

Networking

21 / 44

Page 22: Arduino basics

UNO + Ethernet Shield 

13 12 11 10

9 8 7 6 5 4 3 2

L

5V A0

ANALOG IN

ARE

F

1

GND

TXRX

RESET

3V3

A1

A2

A3

A4

A5

VIN

GND

GND

DIGITAL (PWM= )

Arduino TM

IOREF

ICSP

ICSP2

ON

POWER

01TX

0

RX0RESET

13 12 11 ETH 9 8 7 6 5

SDCS

3 2 01TX RXARE

F

GND

5V A0

ANALOG IN

TX

RX

RESET

3V3

A1

A2

A3

A4

A5

VIN

GND

GND

DIGITAL (PWM SPI )

SCL SDA

<

IOREF

ICSP

CS

< <

22 / 44

Page 23: Arduino basics

23 / 44

Page 24: Arduino basics

Example #1 Web Server#include <SPI.h>#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};IPAddress ip(192, 168, 0, 177);

EthernetServer server(80);

void setup() { Serial.begin(9600); while (!Serial) {}

Ethernet.begin(mac, ip); server.begin(); Serial.print("Server is at "); Serial.println(Ethernet.localIP());}

void loop() { // ...}

EthernetClient client = server.available(); if (client) { Serial.println("new client"); boolean currentLineIsBlank = true;

while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); if (c == '\n' && currentLineIsBlank) { client.println("HTTP/1.1 200 OK"); client.println( client.println("Refresh: 5"); client.println();

client.println("<!DOCTYPE HTML>"); client.println( for (int analogChannel = 0; analogChannel < 6; analogChannel++) { int sensorReading = analogRead(analogChannel); client.print("analog input "); client.print(analogChannel); client.print( client.println("<br />"); } client.println("</html>"); break; } if (c == '\n') { currentLineIsBlank = true; } else if (c != '\r') { currentLineIsBlank = false; } } } // while

delay(1); client.stop(); Serial.println("client disconnected"); }

24 / 44

Page 25: Arduino basics

25 / 44

Page 26: Arduino basics

Test$> ping 192.168.0.177

Pinging 192.168.0.177 with 32 bytes of data:Reply from 192.168.0.177: bytes=32 time=2ms TTL=128Reply from 192.168.0.177: bytes=32 time=3ms TTL=128Reply from 192.168.0.177: bytes=32 time=2ms TTL=128Reply from 192.168.0.177: bytes=32 time=2ms TTL=128

Ping statistics for 192.168.0.177: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate round trip times in milli-seconds: Minimum = 2ms, Maximum = 3ms, Average = 2ms

Server is at 192.168.0.177new clientGET / HTTP/1.1Host: 192.168.0.177Connection: keep-aliveCache-Control: max-age=0Accept: text/html,application/xhtml+xml,application/xml;q=0.9Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/Referer: http://192.168.0.177/Accept-Encoding: gzip, deflate, sdchAccept-Language: en-US,en;q=0.8

client disconnectednew clientGET /favicon.ico HTTP/1.1Host: 192.168.0.177Connection: keep-aliveUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/Accept: */*Referer: http://192.168.0.177/Accept-Encoding: gzip, deflate, sdchAccept-Language: en-US,en;q=0.8

client disconnected

26 / 44

Page 27: Arduino basics

 

Browser

27 / 44

Page 28: Arduino basics

 

Serial Monitor28 / 44

Page 29: Arduino basics

Example #2 Web ClientSingle Request

#include <SPI.h>#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};IPAddress ip(192, 168, 0, 177);char server[] = "www.google.com";

EthernetClient client;

void loop() { if (client.available()) { char c = client.read(); Serial.print(c); }

if (!client.connected()) { Serial.println(); Serial.println("disconnecting."); client.stop();

while (true); }}

void setup() { Serial.begin(9600); while (!Serial) { }

if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP" Ethernet.begin(mac, ip); } delay(1000); Serial.println("connecting...");

if (client.connect(server, 80)) { Serial.println("connected");

client.println("GET /search?q=arduino HTTP/1.1"); client.println("Host: www.google.com"); client.println("Connection: close"); client.println(); } else { Serial.println("connection failed"); }}

29 / 44

Page 30: Arduino basics

Example #3 Web ClientRepeated Requests

#include <SPI.h>#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};IPAddress ip(192, 168, 0, 177);char server[] = "www.arduino.cc";

EthernetClient client;

unsigned long lastConnectionTime = 0; const unsigned long postingInterval = 10L * 1000L;

void setup() { Serial.begin(9600); while (!Serial) {}

delay(1000); Ethernet.begin(mac, ip);

Serial.print("My IP address: "); Serial.println(Ethernet.localIP());}

void loop() { if (client.available()) { char c = client.read(); Serial.write(c); }

if (millis() - lastConnectionTime > postingInterval) { httpRequest(); }}

void httpRequest() { client.stop();

if (client.connect(server, 80)) { Serial.println("connecting...");

client.println("GET /latest.txt HTTP/1.1"); client.println("Host: www.arduino.cc"); client.println("User-Agent: arduino-ethernet"); client.println("Connection: close"); client.println();

lastConnectionTime = millis(); } else { Serial.println("connection failed"); }}

30 / 44

Page 31: Arduino basics

MQTT

31 / 44

Page 32: Arduino basics

IoT ProtocolsThe IoT needs standard protocols. Two of the most promisingfor small devices are MQTT and CoAP.

MQTT gives flexibility in communication patterns and acts purelyas a pipe for binary data.

CoAP is designed for interoperability with the web.

Both MQTT & CoAP:

Are open standardsAre better suited to constrained environments than HTTPProvide mechanisms for asynchronous communicationRun on IPHave a range of implementations

See: MQTT and CoAP, IoT Protocols

32 / 44

Page 33: Arduino basics

ArchitectureCoAP packets are much smaller than HTTP TCP flows. Bitfieldsand mappings from strings to integers are used extensively tosave space. Packets are simple to generate and can be parsed inplace without consuming extra RAM in constrained devices.

CoAP runs over UDP, not TCP. Clients and servers communicatethrough connectionless datagrams. Retries and reordering areimplemented in the application stack. Removing the need forTCP may allow full IP networking in small microcontrollers. CoAPallows UDP broadcast and multicast to be used for addressing.

CoAP follows a client/server model. Clients make requests toservers, servers send back responses. Clients may GET, PUT,POST and DELETE resources.

CoAP is designed to interoperate with HTTP and the RESTful webat large through simple proxies.

Because CoAP is datagram based, it may be used on top of SMSand other packet based communications protocols.

CoAPCoAP is the Constrained Application Protocol from the CoRE(Constrained Resource Environments) IETF group.

ArchitectureLike HTTP, CoAP is a document transfer protocol. Unlike HTTP,CoAP is designed for the needs of constrained devices.

33 / 44

Page 34: Arduino basics

MQTTMQTT is a publish/subscribe messaging protocol designed forlightweight M2M communications. It was originally developedby IBM and is now an open standard. It was designed in 1999for use on satellites and as such is very light-weight with lowbandwidth requirements making it ideal for M2M or IoTapplications.

ArchitectureMQTT has a client/server model, where every sensor is a clientand connects to a server, known as a broker, over TCP.

MQTT is message oriented. Every message is a discrete chunk ofdata, opaque to the broker.

Every message is published to an address, known as a topic.Clients may subscribe to multiple topics. Every client subscribedto a topic receives every message published to the topic.

34 / 44

Page 35: Arduino basics

MQTTFor example, imagine a simplenetwork with three clients and acentral broker.

All three clients open TCPconnections with the broker. ClientsB and C subscribe to the topictemperature .

At a later time, Client A publishes avalue of 22.5 for topic temperature .The broker forwards the message toall subscribed clients.

The publisher subscriber modelallows MQTT clients tocommunicate one-to-one, one-to-many and many-to-one.

35 / 44

Page 36: Arduino basics

MQTT - Publish / Subscribe

The publish / subscribe (often called pub-sub) pattern lies at the heart of MQTT. It's basedaround a message broker, with other nodes arranged around the broker in a star topology.This is a very different model to the standard client/server approach, and at first it mightseem a little strange, but the decoupling it provides is a huge advantage in many situations.

Clients can publish or subscribe toparticular topics which aresomewhat like message subjects.They are used by the broker todecide who will receive a message.

Topics in MQTT have a particularsyntax. They are arranged in ahierarchy using the slash character(/) as a separator, much like thepath in a URL. So a temperaturesensor in your kitchen mightpublish to a topic likesensors/temperature/home/kitchen.

See: Zoetrope

36 / 44

Page 37: Arduino basics

That's all for now.. 

Enough talkingLet's get our hands dirty!!

37 / 44

Page 38: Arduino basics

Project #2 

13 12 11 10

9 8 7 6 5 4 3 2

L

5V A0

ANALOG IN

AREF

1

GND

TXRX

RESET

3V3

A1

A2

A3

A4

A5

VIN

GND

GND

DIGITAL (PWM= )

Arduino TM

IOREF

ICSP

ICSP2

ON

POWER

01TX

0

RX0RESET

11

55

1010

1515

2020

2525

3030

A A

B B

C C

D D

E E

F F

G G

H H

I I

J J

13 12 11 ETH 9 8 7 6 5

SDCS

3 2 01TX RXAR

EF GND

5V A0

ANALOG IN

TX

RX

RESET

3V3

A1

A2

A3

A4

A5

VIN

GND

GND

DIGITAL (PWM SPI )

SCL SDA

<

IOREF

ICSP

CS

< <

Previous Circuit + Ethernet Shield38 / 44

Page 39: Arduino basics

39 / 44

Additional SWChecklist:

mosquitto messagebroker

MQTTLens ChromeExt./App

pubsubclient lib@knolleary

Page 40: Arduino basics

ARE

FGND

RESE

T3V

3L

TXRX

USB

EXT

PWR

SEL

PWR

ICSP

TX RX

31

21

11

01

9 8DIGITAL

7 6 5 4 3 2 1 0

1

5V GndPOWER

www.adruino.cc

ANALOG INVin 0 1 2 3 4 5

ADRUINO

Arduino - Sensor NodePublish data to the topic sensors/led/status every 2 seconds.

These values are the actual device state with considering localinput to the sensors (potentio and push button)

The data consist of a status (either "ON" or "OFF") and of anintensity (any integer ranging 0 - 254) in the following JSONformat:

{ "data": { "status": "ON", "intensity": 200 }}

40 / 44

Page 41: Arduino basics

MQTTLens - Client NodeSubscribe to the topic sensors/led/status.

41 / 44

Page 42: Arduino basics

Refs

42 / 44

Page 43: Arduino basics

Refs1. Arduino - Official Site | Tutorials2. Guide - Getting Started | Windows3. Tutorials - WebClient | WebClientRepeating | EthernetBegin4. Playground - WebClient POST5. MQTT and CoAP, IoT Protocols6. A Brief, but Practical Introduction to the MQTT Protocol and its Application to

IoT | Zoetrope7. Earthshine Design, Arduino Starter Kit Manual: A Complete Beginners Guide to

the Arduino

43 / 44

Page 44: Arduino basics

ENDEueung Mulyana

http://eueung.github.io/ET3010/arduinoET-3010 | Attribution-ShareAlike CC BY-SA

44 / 44