Moje WiFi ESP8266 - výměna SDK firmware

Pokud zakoupíme nějaký modul ESPxxxx (například ESP8266 12E) v určitou dobu je jasné, že firmware obvodu bude z té doby (také například 2 roky starý). Firmware v obvodu ESP zajišťuje správnou obsluhu Wi-Fi připojení a také například ovládání pomocí AT příkazů. Protože stávající originální firmware v zakoupeném obvodu může obsahovat chyby, je vhodné aktualizovat vždy na poslední dostupný firmware (zlepší se například stabilita obvodu, nebo oprava chyb a tím spolehlivost)...

1) stažení aktuální verze SDK firmware pro obvod ESPxxxx

Ze stránek: http://bbs.espressif.com/viewtopic.php?f=46&t=850 stáhneme poslední verzi SDK. V době psaní tohoto článku byla verze: Latest Version: 2.1.0 Release date: May 05, 2017

Nebo přímo z Githubu: https://github.com/espressif/ESP8266_NONOS_SDK

Nebo v příloze pod článkem na mém webu (verze 2.1.0)

Soubor rozbalíme pokud je to nutné a uvidíme tuto strukturu:

1

2) stažení programu pro vložení SDK do ESP obvodu

Ze stránek: http://bbs.espressif.com/viewtopic.php?f=5&t=433#p1658 stáhneme poslední verzi programu "Flash Download Tool". V době psaní tohoto článku byla verze: UPDATE on 2016.11.14

Nebo v příloze pod článkem na mém webu (verze 3.4.4)

Soubor rozbalíme pokud je to nutné a uvidíme tuto strukturu:

2

3) propojení ESP s PC - komunikace Rx/Tx

Propojíme z ESP piny Rx, Tx do USB převodníku Tx a Rx. Napájení pro ESP použijeme externí 3,3V (ne USB 5V a stabilizátor). Připojíme pár nezbytných rezistorů (pokud je již v našem zařízení nemáme).

espminimal

Používám například tento Arduino USB převodník: https://www.gme.cz/arduino-usb-serial-light-adapter

prevodnik

Z převodníku "leze" 5V logika a ESP8266 má 3,3V logiku. Správně bychom měli signál Tx z USB převodíku zmenšit (například přes dělič 20K a 10K) na 3,3V - přizpůsobit pro Rx ESP obvodu. Tímto způsobem (bez děliče) jsem "nakrmil" spoustu ESP a ani jeden neodešel (na webu jsem se dočetl, že je dost tolerantní - například zde: http://hackaday.com/2016/07/28/ask-hackaday-is-the-esp8266-5v-tolerant/). Nicméně připojení a použití je na vaše riziko poškození :-) ale za tu cenu ESP to neřeším (a jak říkám zatím nic neodešlo :-D).

4) nastavení programu FlashDownloadTool a identifikace verze SDK

Spustíme program "ESPFlashDownloadTool.exe" testováno ve Windows 10 Pro - 64bit 16.5.2017 (verze 1703) a v pořádku běží.

Otevře se nám černé okno s výpisem co se právě děje a následně toto okno

0program

Zvolíme tlačítko ESP8266 DownloadTool... po chvilce se spustí toto okno

program

  • Začínáme tím, že vypneme čtyři "zatrhávátka" u cesty se soubory, nebo je ještě nemáme vyplněné (pokud toto děláme prvně).
  • Před připojením napájení 3.3V do ESP obvodu držíme stisknuté tlačítko (pokud ho máme, jinak propojíme vodičem pin GPIO0 označovaný také jako FLASH). Připojíme napájení ESP (tlačítko stále držíme stisknuté) LED dioda na desce s ESP krátce blikne (pokud ji máme na desce osazenou od výrobce - na deskách ESP8266 12EF je LED již osazená).
  • Nastavíme COM port (v mém případě COM8) stále držíme tlačítko.
  • Nastavíme přenosovou rychlost BAUD (v mém případě 115200 - je lepší začít od nejmenší rychlosti) stále držíme tlačítko.
  • klikneme v programu na tlačítko "START". Pokud máme vše správně propojené začne LED rychle blikat a v okně programu se vypíše status "Download".
  • Tlačítko při nahrávání můžeme pustit...
  • Následně se z výpisu dozvíme MAC adresu pro AP a pro STA u našeho ESP, ale co je důležitější v okně "DETECTED INFO" se vypíší podstatné informace ohledně paměti FLASH (v mém případě jsem zjistil QUAD 32Mbit)

Nyní ...vlezeme... do složky jako na obrázku a například v poznámkovém bloku, nebo PS padu otevřeme soubor "README.md"

3

Z výpisu zjistíme, jaké soubory použijeme pro nahrávání do ESP obvodu (s porovnáním k výpisu flash paměti viz "DETECTED INFO")

1program

V mém případě jsem použil soubory jako na obrázku v červeném oválu. Zároveň se zde dozvíme rozsah pro nastavené prostoru ve flash paměti (například boot_v1.2+.bin má adresu 0x00000).

  • Začínáme tím, že zapneme čtyři "zatrhávátka" u cesty se soubory a nastavíme cesty k souborům.
  • Před připojením napájení 3.3V do ESP obvodu držíme stisknuté tlačítko (pokud ho máme, jinak propojíme vodičem pin GPIO0 označovaný také jako FLASH). Připojíme napájení ESP (tlačítko stále držíme stisknuté) LED dioda na desce s ESP krátce blikne (pokud ji máme na desce osazenou od výrobce - na deskách ESP8266 12EF je LED již osazená).
  • Nastavíme COM port (pokud je to nutné) stále držíme tlačítko.
  • Nastavíme přenosovou rychlost BAUD (pokud je to nutné) stále držíme tlačítko.
  • klikneme v programu na tlačítko "START". Pokud máme vše správně propojené začne LED rychle blikat.
  • Tlačítko při nahrávání můžeme pustit...

Pokud neproběhne nahrávání v pořádku hledáme chybu ve výpisu v černém okně:

  • Chyba rychlosti portu, špatné číslo portu, nebo se snažíme nahrát špatné soubory

 

5) testování ESP pomocí AT příkazů

Spustíme naše Arduino (nebo například terminál Putty) a otevřeme okno sériového monitoru. Nastavíme port převodníku (COMxx) a rychlost na 115200 Baud a zapneme ESP. Pokud odešleme do ESP například příkaz AT+GMR dostaneme odpověď o verzi firmware.

Seznam dostupných příkazů (čerpáno zde).

Commands

Description

Type

Set/Execute

Inquiry

test

Parameters and Examples

AT

general test

basic

-

-

-

-

AT+RST

restart the module

basic

-

-

-

-

AT+GMR

check firmware version

basic

-

-

-

-

AT+CWMODE

wifi mode

wifi

AT+CWMODE=<mode>

AT+CWMODE?

AT+CWMODE=?

1= Sta, 2= AP, 3=both, Sta is the default mode of router, AP is a normal mode for devices

AT+CWJAP

join the AP

wifi

AT+ CWJAP =<ssid>,< pwd >

AT+ CWJAP?

-

ssid = ssid, pwd = wifi password

AT+CWLAP

list the AP

wifi

AT+CWLAP

     

AT+CWQAP

quit the AP

wifi

AT+CWQAP

-

AT+CWQAP=?

 

AT+ CWSAP

set the parameters of AP

wifi

AT+ CWSAP= <ssid>,<pwd>,<chl>, <ecn>

AT+ CWSAP?

 

ssid, pwd, chl = channel, ecn = encryption; eg. Connect to your router: AT+CWJAP="www.electrodragon.com","helloworld"; and check if connected: AT+CWJAP?

AT+CWLIF

check join devices' IP

wifi

AT+CWLIF

-

-

 

AT+ CIPSTATUS

get the connection status

TCP/IP

AT+ CIPSTATUS

   

<id>,<type>,<addr>,<port>,<tetype>= client or server mode

AT+CIPSTART

set up TCP or UDP connection

TCP/IP

1)single connection (+CIPMUX=0) AT+CIPSTART= <type>,<addr>,<port>; 2) multiple connection (+CIPMUX=1) AT+CIPSTART= <id><type>,<addr>, <port>

-

AT+CIPSTART=?

id = 0-4, type = TCP/UDP, addr = IP address, port= port; eg. Connect to another TCP server, set multiple connection first: AT+CIPMUX=1; connect: AT+CIPSTART=4,"TCP","X1.X2.X3.X4",9999

AT+CIPMODE

set data transmission mode

TCP/IP

AT+CIPMODE=<mode>

AT+CIPSEND?

 

0 not data mode, 1 data mode; return "Link is builded"

AT+CIPSEND

send data

TCP/IP

1)single connection(+CIPMUX=0) AT+CIPSEND=<length>; 2) multiple connection (+CIPMUX=1) AT+CIPSEND= <id>,<length>

 

AT+CIPSEND=?

eg. send data: AT+CIPSEND=4,15 and then enter the data.

AT+CIPCLOSE

close TCP or UDP connection

TCP/IP

AT+CIPCLOSE=<id> or AT+CIPCLOSE

 

AT+CIPCLOSE=?

 

AT+CIFSR

Get IP address

TCP/IP

AT+CIFSR

 

AT+ CIFSR=?

 

AT+ CIPMUX

set mutiple connection

TCP/IP

AT+ CIPMUX=<mode>

AT+ CIPMUX?

 

0 for single connection 1 for multiple connection

AT+ CIPSERVER

set as server

TCP/IP

AT+ CIPSERVER= <mode>[,<port> ]

   

mode 0 to close server mode, mode 1 to open; port = port; eg. turn on as a TCP server: AT+CIPSERVER=1,8888, check the self server IP address: AT+CIFSR=?

AT+ CIPSTO

Set the server timeout

AT+CIPSTO=<time>

AT+CIPSTO?

 

<time>0~28800 in second

 

+IPD

received data

       

For Single Connection mode(CIPMUX=0): + IPD, <len>:
For Multi Connection mode(CIPMUX=1): + IPD, <id>, <len>: <data>

Další výbornou dokumentaci k ESP obvodům nalezneme zde: http://espressif.com/en/support/download/documents?keys=&field_type_tid%5B%5D=14