blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
2
SLEDOVAŤ BLOG
Programátor
deadawp



Wokwi - simulátor pre Arduino projekty
pridal deadawp 14.4. 2022 o 13:43 (naposledy upravené 19.6. 2022 o 13:41)



Wokwi je simulátor pre vývoj jednoúčelových projektov a prototypov v jazyku Wiring (Arduino Core). Simulátor je dostupný zdarma, alebo v platenej verzii (členstvo) na webe, kde celá simulácia prebieha. Používateľ môže využiť rôzne podporované mikrokontroléry, napríklad z rady AVR ATmega na vývojových kitoch Arduino Uno, Nano, Mega. K dispozícii je aj populárny mikrokontróler ESP32 od Espressif Systems a Raspberry Pi Pico. Taktiež je na výber aj mikrokontróler ATtiny85, či TinyPICO. ESP32 je možné programovať aj v Microphytone a Rpi Pico v Javascripte či Circuitpythone.

Na simulátor som narazil pred niekoľkými mesiacmi v jednej z Arduino skupín na Facebooku. Rozhodol som sa simulátor vyskúšať po dobu pár mesiacov a dnes by som rád zhrnul moje poznatky a pripomienkym a taktiež aj porovnanie s inými populárnymi cloud simulátormi ako napríklad TinkerCAD. Wokwi je dostupný v anglickom a dnes už aj v českom jazyku vďaka používateľovi @Ajtak.

Nakoľko využívam iba mikrokontroléry Arduino a ESP32 programované pod Wiringom (Arduino Core), nebude sa táto recenzia venovať iným mikrokontrolérom a programovacím jazykom, ktoré sú na Wokwi dostupné. Testovaná bola verzia simulátora zdarma bez predplateného členstva. Projekty vo Wokwi je možné uložiť a zamknúť, prípadne ich je možné celé zdieľať s možnosťou ich uloženia druhou stranou ako svoj projekt. Projekt môže vyskúšať a odsimulovať aj neregistrovaný používateľ, nemôže ho však pochopiteľne uložiť.


Dokumentácia
V prvom rade musím pochváliť dokumentáciu projektu Wokwi pre jednotlivé mikrokontroléry. Používateľ v prehľadnej dokumentácii okamžite zistí, ktoré z podporovaných zberníc mikrokontroléra sú v simulátore implementované a môže ich použiť a vyskúšať. Taktiež sú k dispozícii aj ukážkové zdrojové kódy pre základné projekty typu Blink, ovládania NeoPixel LED pásikov, ringov a podobne. Pre mikrokontróler ESP32 som v dokumentácii zistil, že v dobe keď som začal  s Wokwi ešte neexistovala podpora simulácie pre kryptografické akcelerátory.

Z toho dôvodu som nemohol otestovať projekty, ktoré využívali šifrované spojenie s webserverom cez HTTPS protokol, alebo s MQTT brokerom po MQTTS protokole. Bolo možné otestovať iba projekty s HTTP a MQTT konektivitou. Dnes je už však podpora kryptografických akcelerátorov implementovaná a plne funkčná. 

ESP32 pod Wokwi využíva poslednú release verziu Arduino Core 2.0.2 (platné k 15. Aprílu 2022), ktorá je založená na ESP-IDF 4.4-beta1. Existujúce projekty, ktoré som predtým spúšťal zrazu na Wokwi nefungovali. Táto verzia ESP-IDF má nevýhodu v podobe nepodpory šifrovaného spojenia so serverom, ak sa využíva TLS 1.3. Príklad knižnice WiFiClientSecure na doménu howmyssl fungoval dobre a spojenie sa vykonalo, avšak na freehosting sa mi ESP32 nedokázalo pripojiť.

Po niekoľko-hodinovom pátraní som prišiel nato, že po downgrade release verzie Arduino Core v Arduino IDE na 2.0.1, alebo upgrade na development verziu 2.0.3-RC1 spojenie fungovalo. Changelog verzie medzi 2.0.2 na 2.0.3-RC1 obsahoval aj commit s aktualizáciou knižnice mbed_TLS. Verzie 2.0.1 a 2.0.3-RC1 sú založené na ESP-IDF 4.4 (release, nie beta verzia).

Verziu SDK (ESP-IDF) na ktorom je aktuálne Arduino Core použité môžete získať zavolaním a vypísaním funkcie getSdkVersion() pre objekt ESP. 

void setup() {
Serial.begin(115200);
Serial.println("Using ESP object:");
Serial.println(ESP.getSdkVersion());
}
void loop() {}


Okrem samotnej verzie SDK (ESP-IDF) môžeme získať z vypísaného názvu aj to, či ide o release verziu ESP-IDF, alebo beta verziu (pre-release), či dev (vývojársku verziu). Taktiež je možné získať počet commitov (189) a taktiež aj commit ID posledného commitu (ga79dc75f0a). To môže pomôcť vývojárom z Espressif Systems napríklad pri riešení nahlásených bugov používateľmi, keďže môže používateľ využívať aj hlavnú development vetvu a nie release verziu Arduino Core pre ESP32. Vývojár si tak môže zobraziť rozdiely medzi commitmi a urýchli to riešenie problému.

Obmedzenia
Ako som spomenul na začiatku článku, simulátor je dostupný zdarma, alebo v platenej verzii. Platená verzia je mesačné predplatné pre využívanie výhod klubu Wokwi. Mesačné predplatné je dobrovoľné od 5 USD, pričom na základe výšky má používateľ výhody okrem iných v podobe Superhlasov (1 superhlas za 1 dolár) pre hlasovanie v anketách pridávania nových funkcionalít a hardvéru.

Používateľ klubu má k dispozícii v simulátore možnosť pripojenia sa k WiFi sieti (2,4 GHz) s WPA/WPA2-PSK šifrovaním, ktorú sám generuje so stiahnutým IoT Wokwi Gateway softvérom. Mikrokontróler takéhoto používateľa taktiež podporuje prichádzajúce pripojenia (Incomming connections). Výhodou je aj vysoká stabilita WiFi pripojenia. Medzi výrazné výhody klubu je možnosť pridávania .bin súborov do projektu pre microSD kartu na ktorých môžu byť multimediálne súbory - zvuky, bitmapy ale taktiež aj projekt vykompilovaný napríklad z ESP-IDF frameworku... Ďalšou z výhod je možnosť importu vlastných knižníc pre senzory.

Používateľ bez statusu člena klubu môže využívať nešifrovanú (otvorenú) WiFi sieť, pričom je traffic monitorovaný administrátormi a v prípade veľkého vyťažovania servera vás môže odpojiť, či zrušiť bežiacu simuláciu. Na základe dokumentácia má byť aj znížená prenosová rýchlosť, avšak na moje projekty typu prenos pár bajtov dát do cloudu som v rýchlosti oproti reálnej nezistil rozdiel. Používateľ nemôže využiť prichádzajúce spojenia. To znamená, že v prípade HTTP servera na ESP32 ste schopní projekt simulovať, avšak k webserveru ako takému sa nepripojíte.

ESP32 môžete z toho dôvodu využívať iba v režime klienta, ktorý sa pripája k externému serveru (webclient). Taktiež nie je možné bez členstva využívať UDP komunikáciu v smere na mikrokontróler. Používateľ môže do projektu nakopírovať aj vlastné knižnice (.cpp a .h), treba ich však v zdrojových kódoch aplikácie linkovať lokálne. Importované súbory sú však dostupné iba v danom projekte. Do iného projektu je nutné opätovne súbory nahrať a linkovať v zdrojových kódoch. 

Simulácia
Po vybratí mikrokontroléra z hlavnej ponuky sa zobrazí na pravej strane mikrokontróler, ku ktorému je možné pridávať moduly a tie následne prepájať. Na ľavej strane je sketch, ktorý je možné editovať. Simulácia sa spúšťa kliknutím na Play. Všetky senzory, prepojovacie káble sú obsiahnuté v diagram.json súbore, ktorý zároveň slúži aj ako editačný súbor pre zmenu farieb a vlastností a pozícii.

Súbor diagram.json umožňuje definovať aj špecifické správanie pre Serial monitor. Štandardne nie je obsiahnutý v diagram.json, je však funkčný a nastavený na hodnotu auto, ktorá ho automaticky spustí pri výpise na UART - Serial.print() / Serial.write(). V prípade, že máte program bez výpisu, alebo s výpisom po prijatí dát, Serial monitor sa nespustí a nemôžete zadať dáta. Z toho dôvodu je nutné Serial monitor nastaviť v diagram.json na always.

Tým pádom sa Serial monitor otvorí pri štarte simulácie a je možné doň zadávať používateľský vstup, prepínať výstup na plotter a podobne. Štandardne je Serial monitor pre používateľský vstup nastavený s ukončovacím znakom lf, čo znamená ukončovací znak riadku "\n". Ukončovacie znaky Serial monitora pri odoslaní správy je taktiež možné konfigurovať prostredníctvom diagram.json súboru.

Treťou záložkou menu je Library Manager (Manažér knižníc), ktorý umožňuje výber knižnice pre komunikáciu s perifériou. Využiť je možné iba dostupné knižnice, nakoľko štandardný používateľ nemôže importovať svoju knižnicu. V mojom prípade som využil knižnicu LiquidCrystal_I2C pre komunikáciu s LCD znakovým displejom po I2C zbernici. Program sa neskompiloval, nakoľko knižnica v simulátore Wokwi bola iná, ako moja v projekte v Arduino IDE. Zmena bola minimálna, funkciu lcd.begin() bolo nutné nahradiť za lcd.init(). 

Wokwi disponuje aj rôznymi ne-senzorovými knižnicami, ktoré umožňujú realizovať napríklad MQTT (PubSubClient) spojenie, alebo parsing JSON štruktúr (ArduinoJson). Taktiež sa tu nájdu aj knižnice pre pripojenie k populárnym IoT clodovým službám typu ThingSpeak, WIOTerminal, ThingsIoT.

Práve knižnice sú jeden z kameňov úrazu pri využívaní tohto simulátora. Chcel som otestovať senzorový uzol na ESP32, ktorý využíva ultrazvukový senzor vzdialenosti HC-SR04. V knižniciach však bola iba knižnica NewPing, ktorá funguje len pre architektúru mikrokotrolérov AVR ATmega. Knižnica NewPingESP8266, ktorá je uspôsobená pre mikrokontroléry ESP8266 a ESP32 od Espressif Systems tu nie je dostupná. Z toho dôvodu som senzor použiť nemohol a využil som iba preddefinované číslo, ktoré som senzorovým uzlom prenášal na vzdialený webserver, existovala ale aj možnosť využiť vstavanú funkciu pulseIn() pre načítania počtu milisekúnd od vyslania po prijatie ultrazvuku zo senzora pre prepočet na vzdialenosť.

Zhodnotenie a porovnanie s TinkerCAD
Simulácia v simulátore Wokwi funguje naozaj veľmi dobre. V pravej časti simulovaného projektu je vidieť čas simulácie a taktiež aj percentuálny pomer behu programu oproti reálnemu času. Zaznamenal som problémy napríklad v slučkách s delayom, kedy sa beh programu znižíl asi na 30%. Keď mám porovnať Wokwi so simulátorom TinkerCAD, išiel by som určite do Wokwi. Wokwi je novovznikajúci projekt, ktorý má širokú základňu fanúšikov a potenciál ďalej rásť. TinkerCAD nemá WiFi mikrokontroléry (ESP8266, ktorý tam bol podporovaný už nie je).

V TinkerCAD-e viazla aj dokumentácia, obsahoval skôr len hotové zapojenia, ktoré bolo možné s preddefinovaným zdrojovým kódom spustiť, neobsahoval možnosť využitia iných knižníc. Nemal možnosť real-time simulácie, nakoľko reálna rýchlosť vykonávania programu bola asi na 15 až 20% reálneho času. Pre ESP32 je možné na Wokwi využívať aj FreeRTOS a tasky. FreeRTOS funguje dobre, dlhšia je však kompilácia programu. Od Februára 2022 je beh ESP32 aplikácii v simulátore Wokwi zrýchlený. 

Čo mi vo Wokwi chýba?

  • Populárne senzory pre meteo dáta (DS18B20, BME280, BMP280, SHT3X)
  • Aspoň jedna RFID čítačka (NXP RC522 / RDM6300...)
  • Existujúce knižnice s kompatibilitou pre ESP architektúru
  • Mikrokontróler ESP8266
  • Možnosť simulácie na pozadí 24/7, možnosť logovania
  • Možnosť kombinovania viacerých mikrokontrolérov v projekte
  • Externý zdroj napätia / prúdu
  • Multimeter / osciloskop

Vyskúšajte Wokwi na ukážkových projektoch: 



Prístupov 10347
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDUJETE
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
Update grafov, ukážkových kódov - Hladin...
[ 16.11.2024] (príspevkov 0)
XIAO ESP32-C6 od Seeed Studio
[ 10.11.2024] (príspevkov 0)
ESP-IDF v4.4.2 prechod na v5.2
[ 5.11.2024] (príspevkov 0)
Krabička pre RFID DOMINATOR 2.0
[ 18.10.2024] (príspevkov 0)
Známe neduhy - Ecotec 1.6E Opel/GM Chevr...
[ 8.10.2024] (príspevkov 0)
Cold-start BQ25570 vs BQ25504 od Texas I...
[ 2.8.2024] (príspevkov 0)
EG21-G - MQTT pripojenie na Thingsboard
[ 5.6.2024] (príspevkov 0)
Quectel EG21-G - HTTP request
[ 17.5.2024] (príspevkov 0)
Tip na darček k jubileu 60
[ 29.4.2024] (príspevkov 0)