Simulátor Wokwi som v predchádzajúcom článku opísal. Nespomenul som však možnosť premenovania Arduino Core .ino projektu na príponu .c, čo umožní využitie paradigmy frameworku ESP-IDF a jeho použitie, i keď s určitými rezervami, ktoré tu spomeniem. Rozhodol som sa do simulátora Wokwi integrovať pre používateľov jednoduché príklady na pripojenie k WiFi sieti a pre senzorový uzol, ktorý funguje v režime webclienta a odosiela dáta na vzdialené webové rozhranie (PHP backend).
Všetky vstavané príklady vo frameworku ESP-IDF, ktoré využívajú WiFi obsahujú integrované menu v Menuconfigu, ktoré slúži pre konfiguráciu WiFi adaptéra t.j. SSID a heslo WiFi siete, prípadne navolenie prenosovej technológie na PHY / SPI Ethernet. Menuconfig však v simulátore Wokwi nie je dostupný a taktiež ani súbor Kconfig (pre definíciu WiFi menu), či sdkconfig, ktorý obsahuje zadané SSID a heslo WiFi siete z konfiguračného menu.
Z toho dôvodu som musel spojiť niekoľko starších príkladov frameworku ESP-IDF, ktoré umožnili nastavenie SSID a hesla WiFi siete priamo do programovej implementácie. Funkcie, ktoré slúžia na pripojenie k WiFi sieti sú iné, nakoľko tu nie je možné využiť komponenty napr. protocols_common, ani automatizovanú funkciu example_connect(), ktorá berie údaje o SSID a hesle priamo zo súboru sdkconfig.
Simulátor Wokwi má integrovanú otvorenú WiFi sieť Wokwi-GUEST bez hesla pre používateľov bez klubu. Používatelia klubu (predplatitelia) služby majú k dispozícii aj uzavretú WiFi sieť štandardu WPA/WPA2-PSK, ku ktorej je možné pripojiť sa s identickým zdrojovým kódom po nastavení SSID a hesla. Otvorená WiFi sieť využíva prázdny string pre makro hesla. Do zdrojového kódu som pridal aj výpis aktuálnej verzie frameworku ESP-IDF. Po spustení simulácie sa mikrokontróler ESP32 úspešne pripojil k WiFi sieti Wokwi-GUEST, z DHCP služby bola mikrokontroléru priradená privátna adresa 10.0.0.2. Hlavný vývojár simulátora Wokwi môj program zaradil na požiadanie medzi ukážkové implementácie pre príklady frameworku ESP-IDF.
Doteraz sa v službe príklad ESP-IDF s využitím WiFi nevytvoril a nebol dostupný. Dostupné implementácie boli výhradne na ovládanie GPIO pre výstup, vstup, Blink s využitím FreeRTOS, či binárne LED počítadlo. Program pre WiFi pripojenie je dostupný v simulátore Wokwi:
https://wokwi.com/projects/343629632022512211
Zaujímalo ma, či bude pod ESP-IDF fungovať validne aj operačný systém reálneho času FreeRTOS a taktiež aj Queue pre inter-task komunikáciu. Program bolo veľmi jednoduché integrovať, nakoľko som mal k dispozícii už existujúci program pre senzorový uzol, ktorý štandardne používam. Uzol je tvorený mikrokontrolérom ESP32, ultrazvukovým senzorom vzdialenosti JSN-SR04T, prípadne HC-SR04 (dostupný vo Wokwi). V pravidelných intervaloch (raz za 5 minút) sa vykoná 10 priemerovaných meraní ultrazvukovým senzorom. Následne sa výsledná hodnota odošle na webserver, kde je zapísaná do MySQL databázy a vizualizovaná používateľovi v dashboarde.
Program fungoval bez problému vrátane WiFi pripojenia. Queue fungovala taktiež bez problému, HTTP task sa spúšťal po nameraní dát (tak ako mal). Bohužiaľ rovnako ako v prípade Arduino Core implementácií, ani tu nefungoval HTTP / HTTPS POST request. Po prepísaní programu na metódu GET sa request podarilo zrealizovať a webserver zapísal dáta do MySQL databázy. Obe programové implementácie by mali fungovať aj pod novšími ESP32 modulmi ESP32-S2, ESP32-S3, prípadne ESP32-C3. Testované boli programové implementácie pod ESP32 Devkit V1, čo je modul ESP32-WROOM-32.
Po spustení simulácie bolo možné ovládať vzdialenosť predmetu od senzora pre voliteľné meranie vzdialenosti. Program pre senzorový uzol je taktiež dostupný v simulátore Wokwi verejne:
https://wokwi.com/projects/343630893376602707
Ukážkové dáta senzorový uzol posiela na testovacie webové rozhranie projektu Hladinomer:
http://arduino.clanweb.eu/studna_s_prekladom/
Nevýhody ESP-IDF implementácii v prostredí simulátora Wokwi:
Nakoľko v simulátore absentuje použitie konfiguračného menu - menuconfig, stáva sa programovanie zložitejšie, nakoľko sa neskompilujú ani základné programy a je ich nutné pretvárať, keďže takmer všetky využívajú špecifické menu s ktorým už program pracuje. Taktiež nie je možné využiť nástroje pre prácu s flash pamäťou (esptool.py), kryptografické nástroje (espsecure.py) a pre prácu s eFuses (espefuse.py). Z dôvodu absencie menuconfigu nie je možné vyskúšať ani systémové funkcionality typu Secure Boot V1, resp. V2 u novších verzií ESP32 a taktiež ani Flash Encryption.