Вы находитесь на странице: 1из 31
ESP8266+Arduino Tom Tobback www.cassiopeia.hk 2015 standard Arduino workshop 2014-2015

ESP8266+Arduino

Tom Tobback www.cassiopeia.hk

2015

standard Arduino workshop 2014-2015
standard Arduino workshop 2014-2015
Materials
Materials
Materials ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

Arduino and wifi

Official Arduino wifi shield EUR 69 + VAT

Arduino and wifi Official Arduino wifi shield EUR 69 + VAT Sparkfun CC3000 shield USD 40

Sparkfun CC3000 shield USD 40

Adafruit CC3000 module USD 35

ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 wifi module

ESP8266 wifi module small powerfull cheap => IoT ESP8266+Arduino workshop 2015

small

powerfull

cheap

=> IoT

ESP8266 wifi module small powerfull cheap => IoT ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

Today’s setup

Today’s setup ESP8266+Arduino workshop 2015
Today’s setup ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266 wifi module don’t need microcontroller 2 GPIO pins available on ESP-01
ESP8266 wifi module
don’t need
microcontroller
2 GPIO pins available
on ESP-01
wifi module don’t need microcontroller 2 GPIO pins available on ESP-01 more on ESP-12 ESP8266+Arduino workshop

more on

ESP-12

wifi module don’t need microcontroller 2 GPIO pins available on ESP-01 more on ESP-12 ESP8266+Arduino workshop
wifi module don’t need microcontroller 2 GPIO pins available on ESP-01 more on ESP-12 ESP8266+Arduino workshop
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 wifi module

direct programming over USB/UART without using Arduino board as micro-controller

1. esptool.py

2. NodeMCU - Lua

3. Arduino IDE!

https://github.com/esp8266/Arduino

1. esptool.py 2. NodeMCU - Lua 3. Arduino IDE! https://github.com/esp8266/Arduino ESP8266+Arduino workshop 2015
1. esptool.py 2. NodeMCU - Lua 3. Arduino IDE! https://github.com/esp8266/Arduino ESP8266+Arduino workshop 2015

ESP8266+Arduino workshop 2015

1. esptool.py 2. NodeMCU - Lua 3. Arduino IDE! https://github.com/esp8266/Arduino ESP8266+Arduino workshop 2015

Today’s setup

Today’s setup ESP8266+Arduino workshop 2015
Today’s setup ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

Downloads

click on ESP8266 event

● DHT library zipped

● zip file with:

esp8266-thingspeak-dht11-test

esp8266-thingspeak-dht11-v3

esp8266-dht11-webserver

WiFiWebServer-dht11-led

esp8266-thingspeak-dht11-v3 esp8266-dht11-webserver WiFiWebServer-dht11-led ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 pinout

Vcc = 3V3 GND UTXD = serial TX URXD = serial RX RST = reset
Vcc = 3V3
GND
UTXD = serial TX
URXD = serial RX
RST = reset
CH_PD = pull up 4.6kOhm
GPIO0 = input/output
GPIO2 = input/output
serial RX RST = reset CH_PD = pull up 4.6kOhm GPIO0 = input/output GPIO2 = input/output
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 test

Communicate with ESP8266 using Serial converter on our Arduino board

● Vcc = 3V3

● GND

● URXD = serial RX = pin0

● UTXD = serial TX = pin1

note: pins seem 5V tolerant

● URXD = serial RX = pin0 ● UTXD = serial TX = pin1 note: pins
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 test

Communicate with ESP8266 using Serial converter on our Arduino board (RX, TX)

Upload any sketch not using Serial e.g. blink Connect ESP module Open IDE Serial Monitor Baud rate = 9600 Setting = “Both NL & CR”

Connect ESP module Open IDE Serial Monitor Baud rate = 9600 Setting = “Both NL &
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 test

AT commands of standard firmware

AT+RST

AT+GMR

AT+CWMODE=3

 

AT+CWLAP

 

AT+CWJAP=”ssid”,”password”

AT+CIOBAUD?

 

AT+CIOBAUD=9600

 

https://nurdspace.nl/ESP8266

reset

reset check firmware version
check firmware version

check firmware version

set mode to AP+STA

list wifi networks

 

connect to your wifi

 

check baud rate

 

set new baud rate

 
connect to your wifi   check baud rate   set new baud rate   ESP8266+Arduino workshop
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 and software serial

Arduino board has 1 hardware Serial on pin0 and pin1 but this is also used for uploading and for Serial Monitor Some earlier modules had baud rate 115200 and their firmware did not allow to change it. would only work with hardware Serial, so Serial Monitor over software Serial + USB converter

ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
would only work with hardware Serial, so Serial Monitor over software Serial + USB converter ESP8266+Arduino
would only work with hardware Serial, so Serial Monitor over software Serial + USB converter ESP8266+Arduino

ESP8266 and software serial

Better solution:

use updated firmware to allow 9600 baud then can use software Serial for ESP8266 and hardware Serial for uploading/monitor as always

new modules come set with default 9600 baud no update of firmware necessary

software serial on e.g. pin10 and pin11 standard Arduino library

of firmware necessary software serial on e.g. pin10 and pin11 standard Arduino library ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 setup

ESP8266 can act as:

WEB SERVER serve web pages over existing wifi network

ACCESS POINT create its own wifi network + web server

WEB CLIENT communicate with web servers (e.g. thingspeak.com) over existing wifi network

WEB CLIENT communicate with web servers (e.g. thingspeak.com) over existing wifi network ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 web server

AT+RST

AT+CWMODE=1

AT+CWLAP AT+CWJAP=”ssid”,”pwd” AT+CIFSR

AT+CIPMUX=1

AT+CIPSERVER=1,80

reset configure as node list access points connect to your wifi show ip address allow multiple connects start server on port 80

go to browser and type IP address check reply in serial monitor

start server on port 80 go to browser and type IP address check reply in serial
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 web server

go to browser and type IP address check reply in serial monitor

+IPD, 0 [means connection id = 0]

AT+CIPSEND=0,12

hello world [enter]

AT+CIPCLOSE=0

see browser

connection id = 0] AT+CIPSEND=0,12 hello world [enter] AT+CIPCLOSE=0 see browser ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 access point

AT+RST

AT+CWMODE=2

AT+CWSAP?

AT+CWSAP=”ssid”,”pwd”,1,3

reset configure as access point get your AP details

define your wifi AP change to unique ssid

connect to the AP with your phone

AT+CIFSR

AT+CIPMUX=1

AT+CIPSERVER=1,80

go to browser and type IP address check reply in serial monitor

show ip address allow multiple connects start server on port 80

reply in serial monitor show ip address allow multiple connects start server on port 80 ESP8266+Arduino
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 web client

AT+RST

AT+CWMODE=1

AT+CWJAP=”ssid”,”pwd”

AT+CIPSTART=”TCP”,”184.106.153.149”,80

reset configure as node connect to your wifi

connect to TCP socket

AT+CIPSEND= 4 wait for “>” GET [enter] check reply

wifi connect to TCP socket AT+CIPSEND= 4 wait for “>” GET [enter] check reply ESP8266+Arduino workshop
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 web client

ARDUINO SKETCH send commands over software serial

espSerial.println("AT+RST");

construct String to send commands

AT+CIPSTART=”TCP”,”184.106.153.149”,80

String cmd; cmd = "AT+CIPSTART=\"TCP\",\""; cmd += THINGSPEAK_IP; cmd += "\",80"; espSerial.println(cmd);

cmd += THINGSPEAK_IP; cmd += "\",80"; espSerial.println(cmd); ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 web client

ARDUINO SKETCH

construct HTTP request to be sent String cmd; cmd = "GET /update?key=xxxxxxxxxxxxxxxxxx&field1="; cmd += temp; cmd += "\r\n"; send the length of the command espSerial.print("AT+CIPSEND="); espSerial.println(cmd.length());

wait for “>” with espSerial.find(">") espSerial.println(cmd); decode the reply with espSerial.find("SEND OK")

espSerial.println(cmd); decode the reply with espSerial.find("SEND OK") ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

thingspeak.com

thingspeak.com create an account on thingspeak.com create a channel make public enter description field 1: temperature

create an account on thingspeak.com create a channel make public enter description field 1: temperature field 2: humidity save get API Write Key

test in browser http://api.thingspeak.com/update?

key=APIKEY&field1=23.66

Write Key test in browser http://api.thingspeak.com/update? key=APIKEY&field1=23.66 ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

DHT11 setup

CONNECTIONS:

● 5V

● GND

● SIGNAL with pull-up resistor

ARDUINO LIBRARY

https://github.com/adafruit/DHT-sensor-library

ARDUINO SKETCH #include <DHT.h> DHT dht(3, DHT11); pinMode(3, INPUT);

dht.begin(); float h = dht.readHumidity(); float t = dht.readTemperature();

// DHT11

dht.begin(); float h = dht.readHumidity(); float t = dht.readTemperature(); // DHT11 ESP8266+Arduino workshop 2015
dht.begin(); float h = dht.readHumidity(); float t = dht.readTemperature(); // DHT11 ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266-thingspeak-dht11-test sketch

22.00degC 59.00%

ó#âáT%ÐÇCÁaæ l!ÈÅèchKäFgÚ¡P¥øäæ |cø [Vendor:www.ai-thinker.com Version:0.9.2.4] ready

AT+CWMODE=1

no change AT+CWJAP="tobback","xxxx" OK

AT+CIPMUX=0

OK

AT+CIPSTART="TCP","184.106.153.149",80

OK [or Error] Linked

AT+CIPSEND=60

> GET /update?key=RD9SEODFNKIBZ11M&field1=22.00&field2=59.00

wrong syntax ERROR SEND OK

+IPD,4:2107

OK

reset ESP8266

wrong syntax ERROR SEND OK +IPD,4:2107 OK reset ESP8266 ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266-thingspeak-dht11-v3 sketch

check espSerial feedback to know if commands are working send status over Serial for debugging

DHT11 sensor sending data to THINGSPEAK.COM by ESP8266 sample interval (s): 5

22.00degC

57.00% reset ESP8266

module

ready

connected

to wifi

>send

thingspeak.com OK

receive OK!

 

22.00degC

59.00% reset ESP8266

module

ready

cannot

connect to wifi

cannot connect to wifi

connected to wifi

22.00degC

connected to wifi

>send

thingspeak.com OK

58.00% reset ESP8266

>send

module

thingspeak.com OK

receive OK!

ready

cannot

receive OK!

connect to wifi

>send module thingspeak.com OK receive OK! ready cannot receive OK! connect to wifi ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266-twitter-dht11-v3 sketch

twitter via thingspeak.com: tweet from your Arduino

sketch twitter via thingspeak.com: tweet from your Arduino in Thingspeak: add app ThingTweet link to twitter

in Thingspeak:

add app ThingTweet link to twitter account

in sketch:

“GET

/apps/thingtweet/1/statuses/update/api_key=KEY&status=”;

account in sketch: “GET /apps/thingtweet/1/statuses/update/api_key=KEY&status=”; ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 with Arduino IDE

Customised IDE using esptool to upload/flash Arduino-style sketches https://github.com/esp8266/Arduino Needs Serial-USB converter (UART)

ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 with Arduino IDE

Hardware connections:

pull GPIO0 to GND (programming mode) connect URXD to TX connect URXD to RX power off/on

in IDE:

set Tools / Programmer / esptool set Tools / Board / generic ESP8266 set Tools / Port / xxx/usb0

upload BLINK with pin = 0 = GPIO0 release GPIO0 from GND connect GPIO0 to LED

/ xxx/usb0 upload BLINK with pin = 0 = GPIO0 release GPIO0 from GND connect GPIO0
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015

ESP8266 with Arduino IDE

use high level libraries:

#include <ESP8266WiFi.h>

WiFiServer server(80); WiFi.begin(ssid, password); WiFiClient client = server.available();

String req = client.readStringUntil('\r');

client.print(s);

= server.available(); String req = client.readStringUntil('\r'); client.print(s); ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
ESP8266+Arduino workshop 2015
Thank you www.cassiopeia.hk Happy tinkering! standard Arduino workshop 2014-2015

Thank you

Thank you www.cassiopeia.hk
Thank you www.cassiopeia.hk
Thank you www.cassiopeia.hk
Thank you www.cassiopeia.hk
Thank you www.cassiopeia.hk
Thank you www.cassiopeia.hk
Thank you www.cassiopeia.hk

Happy tinkering!

Thank you www.cassiopeia.hk Happy tinkering! standard Arduino workshop 2014-2015
standard Arduino workshop 2014-2015
standard Arduino workshop 2014-2015