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:
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:
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).
Používám například tento Arduino USB převodník: https://www.gme.cz/arduino-usb-serial-light-adapter
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
Zvolíme tlačítko ESP8266 DownloadTool... po chvilce se spustí toto okno
- 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"
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")
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>: |
Další výbornou dokumentaci k ESP obvodům nalezneme zde: http://espressif.com/en/support/download/documents?keys=&field_type_tid%5B%5D=14