WiFi ESP32 začínáme snadno a rychle (aplikace s AT příkazy)

Před časem jsem si ze stránek Aliexpress objednal modul ESP-WROOM32 a konečně jsem se dostal i k jeho vyzkoušení a implementace do vlastního projektu (projekt digitální centrály TCS). Protože již mám funkční projekt přes ethernet rozhraní na jiném čipu, rozhodl jsem se využít ukázkovou aplikaci od Espressif na komunikaci s WiFi modulem pomocí AT příkazů. V následujícím článku popíšu od začátku, jak aplikaci dostat do modulu a jak s ní komunikovat. 

Stažení potřebných komponent a programů

Pro začátek budeme potřebovat stáhnout několik balíčků a programů.

  1. Program pro nahrávání firmware do modulu:
    https://espressif.com/sites/default/files/tools/flash_download_tools_v3.4.9.2_0.zip
  2. Aplikace s AT příkazy:
    https://espressif.com/sites/default/files/ap/esp32_at_bin_v0.10.zip
  3. Popis všech dostupných AT příkazů v angličtině:
    https://espressif.com/sites/default/files/documentation/esp32_at_instruction_set_and_examples_en.pdf
  4. Binární soubor pro vyčistění paměti FLASH:
    https://github.com/MHEtLive/ESP32-MINI-KIT/blob/master/AT/erase_flash_bins/32Mbit_Null.rar

 

Oficiální stránka výrobce se soubory ke stažení je zde: https://espressif.com/en/products/hardware/esp32/resources

Použitý hardware

Jako hardware jsem použil vývojovou desku s modulem ESP-WROOM-32 zakoupenou v Číně na Aliexpress spolu s modulem (Obr. 1). Dále pro vyzkoušení AT příkazů jsem použil převodník z USB na UART (obr. 2).

ESP-WROOM-32

Obr. 1: ESP-WROOM-32

Převodník z USB na UART

Obr. 2: Převodník z USB na UART

 

Nahrávání aplikace do modulu

Při nahrávání aplikace do modulu jsem měl trochu problémy a nepovedlo se mi to hned napoprvé. Proto se pokusím vysvětlit přesně mj postup, který proběhl úspěšně. Doporučuji být v tomto kroku trpělivý a pečlivý.

1. Připojíme ESP modul do počítače pomocí microUSB

2. Nejprve rozbalíme všechny stažené archívy do předem zvoleného úložiště

3. Spustíme aplikaci “Flash Download Tools” a zvolíme ESP32 DownloadTool

4. Nastavíme aplikaci přesně podle obrázku 3 (Vybraný binární soubor je 32Mbit_Null.bin)

Download Flash Tools - vyčištění paměti modulu

Obr. 3: Download Flash Tools – vyčištění paměti modulu

Obr. 4: Download Flash Tools – probíhající nahrávání firmwaru

Download Flash Tools - nahrávání AT aplikace do ESP modulu

Obr. 5: Download Flash Tools – nahrávání AT aplikace do ESP modulu

5. Vybereme správný COM port.

6. Stiskneme START a poté na vývojové desce držíme tlačítko BOOT a k tomu stlačíme EN. Nejdříve pustíme tlačítko EN a poté teprve BOOT. V okně nahrávacího programu by se měly zobrazit nové informace (obr. 4) a začne nahrávání.

7. Po dokončení nahrávání se napíše FINISH

8. Nyní celý proces zopakujeme od kroku 6, ale tentokrát s jinými binárními soubory (Obr. 5) – viz tabulka níže. 

bootloader/bootloader.bin 0x1000
phy_init_data.bin 0xf000
partitions_at.bin 0x8000
esp-at.bin 0x100000

9. Aplikace by měla být úspěšně nahraná v modulu.

10. Stiskneme STOP v nahrávacím programu.

Kontrola správné funkčnosti AT aplikace v modulu

Aby jsme měli jistotu, že aplikace s AT příkazy funguje správně, vyzkoušíme ji několika jednoduchými kroky.

Pro kontrolu jsem použil terminál PuTTY (http://www.putty.org/) nastavený na stejný COM port jako při nahrávání aplikace a rychlost BAUD je 115 200. Stačí jen připojený modul restartovat pomocí tlačítka EN a při správném chování modulu bude výpis vypadat podobně, jako na obrázku 6. Jestliže se tak nestalo, zkuste celý proces nahrávání zopakovat ještě jednou.

Zobrazení funkční aplikace v konzoli.

Obr. 6: Zobrazení funkční aplikace v konzoli.

 

Jestliže je vše v pořádku, můžeme přejít k použití AT příkazů.

Příklad použití vybraných AT příkazů

Komunikace mezi ESP32 modulem a jiným zařízením pomocí AT příkazů probíhá na jiném UARTu než byl použit k nahrávání aplikace. Proto je potřeba připojit převodník mezi UART a USB počítače, jestliže si chceme nějaké AT příkazy vyzkoušet. Defaultně je nastaven UART1 pro aplikaci AT příkazů, bohužel na vývojové desce se pinu UART1 mohou lišit podle desky. V mém případě se jedná o piny označené jako RX2 a TX2. Pro otestování a vyzkoušení si několika základních AT příkazů, jsem použil jednoduchou aplikaci “Hercules Setup Utility” (Obr. 7).

Obr. 7: Základní AT příkazy poslané pomocí programu Hercules SETUP Utility.

Po restartu se objeví příkaz “ready“, který značí, že je modul připraven k použití.

Všechny příkazy ve směru z modulu i do modulu jsou ukončeny znaky <CR><LF> nebo-li “\r\n“. Výpis vybraných AT příkazů je v tabulce 1.

Odeslaná data směrem do ESP32 modulu jsou modře a přijatá data jsou oranžově.

Příklad připojení modulu k vašemu AP.

 AT+CWMODE=1<CR><LF>
OK

AT+CWJAP=”AP_SSID”,”vase-heslo”<CR><LF>
OK

Vytvoření TCP serveru na portu 1234.

AT+CIPSERVER=1,1234<CR><LF>
OK

Zobrazení připojeného zařízení a příjem 2 bytů “AB”.

CONNECT
+IPD,2:AB

Odeslání dat (4 byty, “AHOJ”)

AT+CIPSEND=4<CR><LF>
>AHOJ
SEND OK

Odpojení připojeného zařízení

AT+CIPCLOSE<CR><LF>
OK

Připojení k TCP serveru na adrese 192.168.1.21 s portem 1234

AT+CIPSTART=”TCP”,”192.168.1.21″,1234<CR><LF>
OK

Tabulka 1: Popis vybraných AT příkazů.

AT příkaz Popis
 AT Testovací příkaz. Vrací pouze OK.
 AT+RST Restartuje modul.
 AT+GMR Vrací informace o aktuální verzi firmwaru.
AT+CWMODE? Vypíše aktuální mód WiFi modulu (AP/Client/AP+Client).
 AT+CWMODE=<mode> Změna módu WiFi. 
mode:
1 – Client
2 – AP
3 – AP + Client
 AT+CWJAP=<ssid>,<pwd>[,<bssid>] Připojení WiFi modulu k AP.
ssid – SSID název AP
pwd – Heslo k AP
bssid – mac adresa AP
 AT+CWLAP Vyhledání dostupných AP v okolí.
 AT+CWQAP Odpojení od AP.
 AT+CWSAP=<ssid>,<pwd>,<chl>,<ecn>[,<max conn>][,<ssid hidden>] Nastavení modulu jako WiFi AP.
ssid – jméno AP
pwd – heslo k AP
chl – kanál
ecn – typ zabezpečení pro heslo 
(0 – OPEN, 2 – WPA-PSK, 3 – WPA2-PSK, 4 – WPA-WPA2-PSK)
max conn – maximální počet klientů (1 – 10)
ssid hidden – skrýt SSID jméno
 AT+CIPDOMAIN=<domain name> DNS resolver, nebo-li zjištění IP adresy serveru podle URL.

domain name – URL serveru

 AT+CIPSTART=<link ID>,<type>, <remote IP>,<remote port>[,<TCP keep alive>] Připojení k serveru pomocí TCP/UDP/SSL
link ID – Používá se pouze při povoleném více spojení; určuje číslo spojení
type – použitý protokol k připojení
(“UDP”, “TCP”, “SSL”)
remote IP – IP adresa serveru
repote port – port služby
TCP keep alive – časový interval TCP pro keep-alive (1 – 7200 s; 0 – keep-alive nepoužito)
 AT+CIPSEND=<length> Posílání dat přes TCP nebo SSL spojení. 
length – délka odesílaných dat
Po odeslání tohoto AT příkazu se odesílají data až po přijetí znaku ‘>’. Modul čeká na přijetí všech znaků podle parametru length.
 AT+CIPSEND=[<link ID>,]<length>[,<remote IP>, remoteport>] Posílání UDP dat. Funguje na stejném principu jako příkaz pro posílání přes TCP jen se navíc zadává port a IP adresa.
link ID – Používá se pouze při povoleném více spojení; určuje číslo spojení
length – počet dat k odeslání
remote IP – IP adresa serveru
remoteport – port služby
 AT+CIPCLOSE=<link ID> Uzavře vytvořené spojení.
link ID – Používá se pouze při povoleném více spojení; určuje číslo spojení
 AT+CIFSR Vypíše IP adresu.
 AT+CIPMUX=<mode> Povolí nebo zakáže využívat více spojení. 
mode:
0 – jen jedno spojení
1 – více spojení
AT+CIPSERVER=<mode>[,<port>]  Vytvoří/odstraní TCP server. 
mode – (0 – odstraní, 1 – vytvoří)
port – port služby (default je 333)
 AT+CIPSNTPCFG=<timezone>[,<SNTP server1>,<SNTP server2>,<SNTP server3>]  Konfigurace časové zóny a časových serverů pro získávání času přes SNTP protokol.
timezone – časové pásmo (-11. 13)
SNTP server 1 – 3 – Jeden až tři SNTP servery.
 AT+CIPSNTPTIME?  Zjistí a vypíše aktuální datum a čas z SNTP serveru.
+IPD,<link ID>,<len>[,<remote IP>,<remote port>]:<data>  Příkaz přijatý z ESP32 modulu v případě přijatých dat.
link ID – Používá se pouze při povoleném více spojení; určuje číslo spojení
len – délka přijatých dat
remote IP – IP adresa odesílatele
remote port – port odesílatele
data – přijatá data

 

Popis dalších AT příkazů v angličtině můžete najít v oficiální dokumentaci zde: https://espressif.com/sites/default/files/documentation/esp32_at_instruction_set_and_examples_en.pdf Jestliže vám zde nějaký AT příkaz chybí, rád ho doplním nebo pomůžu s přeložením informací z dokumentace.

Ukázka použití ESP32 v hotovém projektu

V současné době je snaha o použití ESP32 modulu v projektu na řízení modelové železnice: Digitální DCC centrála pro řízení modelové železnice pomocí Android aplikace

Závěr

Modul ESP32 je dostatečně výkonný a má dostatek paměti na to, aby celá aplikace byla přímo v něm a proto není vždy nutné použití AT příkazů pro komunikaci. Já jsem i přesto využil tuto aplikaci a to z důvodu, že už mám hotový projekt s ethernet rozhraním a nebyl čas na to, abych celý projekt integroval do ESP32. V tom případě je vhodné použít aplikaci s AT příkazy pro komunikaci s již hotovým projektem. 

Myslím si, že aplikace s AT příkazy je perfektní pro jednoduchou TCP a UDP komunikaci, ale chybí jí například multicast a to je pro některé aplikace dost velký problém. Sám se budu snažit multicast do AT aplikace dopsat nebo doufat, že brzy vyjde aktualizace, kde již multicast bude. 

Přispějte

Líbí se Vám projekt a rádi byste viděli na webu více podobných projektů? Můžete mi pomoct a darovat alespoň malou částku na vývoj. Učiníte tak pomocí formuláře v pravém sloupci, kde můžete poslat peníze prostřednictvím PayPal účtu nebo platební karty. Také pomůžete tím, že budete web nebo tento článek sdílet na sociálních sítích.  

 

Článek byl 19x komentován “WiFi ESP32 začínáme snadno a rychle (aplikace s AT příkazy)

  1. Chichichiiii

    Díky za návod. Jenom dodám. Provedl jsem to jak je tady, ale nestiskl jsem tlačítko BOOT/EN.
    1. Připojil jsem ESP nahrál jsem NULL firmware a odpojil zařízení
    2. Připojil jsem ESP nahrál zbylé soubory a odpojil zařízení
    3. Připojil jsem ESP a log v putty vypadá úplně stejně.

    Ještě ověřím ty AT příkazy. Ale myslím si, že ty tlačítka asi nebudou tak kritické. 😉

    1. admin Post author

      Zdravím,
      Vámi popsaný způsob samozřejmě funguje, ale nemusí fungovat vždy. Záleží, jestli už je nějaký program nahraný v modulu a také může být modul už napájený a poté se používá kombinace BOOT/EN pro vstup do režimu bootloaderu.

  2. Josef Havlíček

    Dobrý den.

    Pěkný článek. Díky. Chtěl bych podle něj zprovoznit ESP32 WROOM, který mu právě dorazil.
    Chtěl bych se zeptat proč jste použil 2 rozdílné Terminály? J nutné použít PuTTY? Nebo by fungoval i Hercules?
    Děkuji za doplnění.
    JH

    1. admin Post author

      Dobrý den,
      použil jsem dva rozdílné terminály především protože jsem dost zvyklý používat PuTTY. Je opravdu dobrý a jednoduchý a např. jako terminál pro embedded desky s Linuxem je výborný. Bohužel pro vkládání AT příkazů není PuTTY příliš vhodný. Pro tento účel je lepší Hercules, protože umožňuje poslat celý AT příkaz včetně zalomení. Oproti tomu v Herculesu nejde vkládat jen tak snadno psaný text mimo předvolená pole. Samozřejmě terminál můžete zvolit takový, jaký Vám bude více vyhovovat.

  3. Petr

    Dobry den,
    mam dotaz ohledne Bluetooth. Po nahrani programu SimpleBLE.h do desky ESP-WROOM-32 se nemohu sparovat s Bluetooth. Bluetooth na telefonu vidim ale nemohu se pripojit.
    Dekuji za odpoved Petr

  4. Vasek

    Ahoj, Zacinam s ESP32 a dival jsem se ,ze uz je dostupny AT firmware verze 1.0. Pri pohledu na soubory v1.0 tech souboru pro pridani do flasheru(Flash Download Tools v3.6.4) je mnohem vice. Vsiml jsem si take souboru download.config, ktery obsahuje veskere nastaveni souboru pro flashovani, bohuzel vsak ve flasheru nikde nevidim moznost tento konfiguracni soubor nahrat a ani nevim jestli to jde pouzit jako parametr flasheru pri spusteni z prikazove radky. Nemate s timto zkusenosti? Pripadne mi celkem trapne, ze ESP ma Flashovaci program ve stylu windows aplikace a neni mozne si jeho konfiguraci nahrat nebo ulozit. Pro dalsi update firmware je to docela vopruz to pokazde konfigurovat 🙁

    1. admin Post author

      Zdravím, ano firmware AT aplikace pro ESP32 se neustále vyvíjí a mění. Sám jsem našel několik chyb při mém vývoji a reportoval je vývojářům. Co se týká vývoji a flashování ESP32 na Windows, tak to bohužel není úplně nejpříjemnější. Vše mají primárně pro Linux a proto se to na Widnows používá hůře. Ale přijde mi, že to postupně zlepšují. Pokud se nemýlím, tak program flasher v poslední verzi umožňuje už nahrát více souborů, než tomu bylo dříve a také si po vypnutí a znovu spuštění pamatuje poslední nastavení.

      Navíc mě tak napadá, že tohle obvykle člověk stejně udělá jen jednou. Teda pokud nehodláte vyvíjet vlastní aplikaci. Tím se nyní trochu zabývám, ale lepší způsob nahrávání jsem zatím bohužel nenašel.
      Stačí to jako odpověď? Kdykoliv kdyžtak napište.

  5. Vasek

    Ted jsem si s tim trochu hral a nasel jsem jediny zpusob jak si konfiguraci menit/ulozit. V podadresari Flasheru configure/ESP32 je v souboru spi_download.conf konfigurace ulozena, tak si staci po rucnim nastaveni souboru ve flasheru tento zazalohovat a pripadne zeditovat pro pristi flashovani. Nevim proc neni tento soubor prilozen k firmware, protoze kazda verze firmware ma trochu jine nastaveni / ulehcilo by to praci tem kteri jen chteji vyzkouset novy firmware.
    Jinak mi zatim AT firmware nejede, nekde delam chybu. Ani verze 0.1 ani 1.0. Vymazani i flashovani probehne vporadku, ale modul zustava v bootmodu ani po resetu zadna zmena 🙁 Budu jeste experimentovat, mozna mam i spatny modul, kdo vi…

    1. admin Post author

      To je paráda, děkuji za dobrý tip 🙂 Třeba by se dal napsat jednoduchý prográmek, který by ten soubor vytvořil. Nebo zkusit napsat přímo výrobci, jestli by to nemohli generovat k tomu.

      Ohledně bootmodu, je potřeba mít správně připojený pin pro BOOT. Pokud máte desku, jako je na obrázku 1 v článku, tak tam je to OK, v případě samotného modulu, tam se musí přivést Vcc na pin IO0 (BOOT). Měl by to být pin číslo 25 u modulu ESP32-WROOM. Pokud je ten pin na GND, pak je modul stále v bootmodu.

    1. admin Post author

      Tak potom jedině špatně nahraný firmware. Nahrál jste všechny binární soubory na správné místo? A hlavně v jednom kroku (najednou)? Měly by být na těchto místech:
      0x1000 bootloader/bootloader.bin
      0x20000 at_customize.bin
      0x21000 customized_partitions/ble_data.bin
      0x24000 customized_partitions/server_cert.bin
      0x26000 customized_partitions/server_key.bin
      0x28000 customized_partitions/server_ca.bin
      0xf000 phy_init_data.bin
      0x100000 esp-at.bin
      0x8000 partitions_at.bin

  6. Vasek

    Ano, zkousel jsem obe verze firmware 0.1 ,1.0, a chova se to stejne. Adresy by mely byt vporadku. Jedine co mam jiny Flashovaci program – novejsi verzi 3.6.4, jina bohuzel na strance Espressiv neni ke stazeni.

    1. admin Post author

      Poslední verzi flashovacího programu jsem zkoušel zrovna o víkendu, ale nenahrával jsem kompletní firmware, jen jeho část. Vše mi fungovalo perfektně. Zkusil bych změřit, jaká úroveň napětí je na tom pinu IO0 (BOOT). Je zvláštní, že při flashování vše proběhne v pořádku. Odkud máte tu desku? Z Číny nebo nějaký oficiální distributor?

  7. Vasek

    Desku objednaval kolega , bohuzel nevim odkud , ale je mozne ze nekde z Ciny. Jako vyrobce je tam uveden Watterott – http://www.watterott.com. Mam od nich 2 kusy a oba dva se tvari stejne. Je to opravdu divne, ze Flashovani probehne zcela bez problemu az do konce, ale software se nespusti. Zkusim jeste zkontrolovat tu desku jestli na ni neni neco spatne. Snad to najdu nebo zkusim modul od jineho vyrobce 🙂

    1. admin Post author

      To je fakt divné, nemyslím si, že by ten modul byl špatný, ale už mě nenapadá, kde jinde bych hledal. Ještě se tak dívám na schéma a tam to vypadá, že převodník z USB na UART umí ovládat i EN a BOOT piny pomocí RTS a DTR signálů. Jste schopen tyto signály nějak ovládat? Případně jsou osazeny na desce odpory R14 a R15?

      1. Vasek

        Jo jo, presne tak! 😉 Terminalovy program je mel nastavene tak ze ten boot z Flash pameti blokoval a porad to bylo v Boot modu.Ted uz to jede! Vyzkousim co umi firmware, uvidim. Kazdopadne diky za rady 😉

        1. admin Post author

          Paráda! Tak hodně štěstí 🙂 Přijde mi, že toho umí hodně, ale má to dost mezery ještě. Já zatím použil UDP protokol, UDP multicast, TCP server (umí to pouze jeden – na jednom portu). Zkoušel jsem i WiFi AP i Client, bohužel v AP modu zatím neinformuje o připojení nového klienta – pracují na opravě.

          1. Vasek

            Ja jsem teprve na uplnem zacatku. V podstate potrebuji nahradit klasicky COM port bezdratovym spojenim Wifi/Bluetooth mezi pristrojem a PC. Na to by asi stacil nejaky jednoduchy protokol, asi UDP. Premyslim take o vyuziti ctecky SD karet a filesystemu ktery by mel firmware take umet. Jinak koukal jsem na terminalovy program Hercules setup, nenni spatny, ale mohu doporucit i DockLight, ktery umoznuje vytvorit si seznam vsech AT commandu, i s popisem a cele to ulozit. Nejakou dobu ho pouzivam ,a celkem spokojenost 😉 https://docklight.de

Komentovat

Vaše e-mailová adresa nebude zveřejněna. Povinná pole jsou označena *

*

*

By continuing to use the site, you agree to the use of cookies. more information

Užíváme cookies, abychom vám zajistili co možná nejsnadnější použití našich webových stránek. Pokud budete nadále prohlížet naše stránky předpokládáme, že s použitím cookies souhlasíte.

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close