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 5x 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.

Komentovat

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

*

*