V apríli 2023 Laskakit predstavil a naskladnil vývojovú dosku ESPlan do svojho e-shopu. Táto kompaktná doska s rozmermi 73x61 mm je vybavená procesorom ESP32-WROOM-32, ktorý je dostupný v dvoch variantách – s PCB anténou alebo s IPEX konektorom. Doska obsahuje aj montážne otvory pre jednoduchú inštaláciu. Významným prvkom je integrovaný RJ45 konektor a Ethernetový kontrolér LAN8720A, ktorý pracuje na PHY vrstve OSI modelu a podporuje štandard IEEE 802.3-2005 spolu s funkciou auto-MDIX. Tento kontrolér umožňuje prenosové rýchlosti 10BASE-T/100BASE-TX a využíva RMII rozhranie na prepojenie s mikrokontrolérom, pričom zabezpečuje prevod signálov na Ethernet. Podporu pre tento Ethernetový kontrolér poskytujú aj systémy pre domácu automatizáciu, ako sú HomeAssistant a ESPhome. Ethernetový port je galvanicky oddelený použitím oddelovacieho transformátora HR641680E, čím sa zabezpečuje ochrana a stabilita pripojenia.
Doska ESPlan zaujme aj integrovanou čítačkou SD kariet a modulom Ako RS485 transceiver je použitý WS3081. Je vhodný pre 3V3 logiku a má aj vysoký dátovú priepustnosť. Poskytuje plnohodnotné RS485 rozhranie, vhodné na pripojenie rôznych senzorov a dovolím si povedať, že aj pre industriálnu aplikáciu, keďže má aj potrebné ochrany, i keď produkt ako taký nemá CE certifikáciu a predáva sa ako nekompletné (nie koncové) zariadenie.
RS485 má aj prepojku (od verzie ESPlanu 1.1), ktorá pripája rezistor 120 ohm medzi piny 1 a 2 RS485 zbernice a funguje ako ukončovací rezistor, ktorý sa vyžaduje pre správne fungovanie zbernice. Táto prepojka sa nepoužíva, ak by bol ESPlan zapojený v strede RS485 siete. Má tiež aj ochranu proti prepätiu na RS485 linke skrz TVS diódu. Výhoda RS485 je, že je ju možné ťahať na stovky metrov. Pre aplikáciu ako Watmonitor sa napríklad hodí hydrostatický snímač MY-136 s rozhraním RS485, ktorý meria výšku vodného stĺpca v rozsahu 0 až 2 metre, čo reprezentuje hodnotami tlaku v pascaloch. Doska ponúka aj ďalšie vyvedené piny, pričom je potrebné dbať na ich správne použitie, keďže niektoré sú vyhradené len pre vstupy (INPUT_ONLY).
Okrem toho obsahuje aj uŠup konektor pre environmentálne snímače z produkcie Laskakitu, ktoré komunikujú cez I2C, ale dá sa na týchto GPIO emulovať aj UART, alebo sa dá použiť aj pre iné digitálne senzory, ktoré využívajú napr. 1 dátový vodič (DHT2X, Dallas DS18B20, WS2812B). Pre napájanie dosky je možné priamo pripojiť modul SDaPo DP1435 PoE (IEEE 802.3af, 5V 2.4A), ktorý umožňuje napájanie prostredníctvom PoE v rozsahu 37-57V, štandardne 48V DC. V prípade, že PoE nie je použité, doska sa môže napájať cez USB-C konektor na 5V.
Laskakit inovoval pôvodnú verziu dosky ESPlan 1.0 na novú verziu 1.1, pričom zmeny sa týkali najmä niekoľkých komponentov, ktoré boli vymenené. Z hľadiska zapojenia medzi ESP32 a LAN8720A cez RMII rozhranie sa teraz používajú piny MDC (Management Data Clock) na GPIO23 a MDIO (Management Data Input/Output) na GPIO18. Pin pre riadenie napájania (enable) sa už nepoužíva, pričom GPIO17 je teraz zodpovedný za generovanie 50 MHz hodinového signálu pre PHY LAN8720A. GPIO5 je pripojený na RST pin LAN8720A a môže slúžiť na resetovanie modulu zmenou digitálneho stavu. Modul je resetovaný pri nízkom (LOW) stave, pričom štandardne je nastavený na vysoký (HIGH) stav. K doske ESPlan je k dispozícii aj 3D tlačená krabička, ktorá zohľadňuje aj PoE modul, čo poskytuje praktické a bezpečné uchytenie pre všetky komponenty.
Programová implementácia pre dosku ESPlan a pripojenie k webovej aplikácii Watmonitor, vrátane integrácie ultrazvukového senzora vzdialenosti JSN-SR04T, vyžaduje využitie knižnice ETH, ktorá je súčasťou Arduino Core pre ESP32, ako aj knižnice NewPingESP8266 na komunikáciu s ultrazvukovým senzorom. Tento program je plne kompatibilný s WiFi programom, pričom využíva knižnicu WiFiClientSecure a jej objekt podobne ako pri WiFi pripojení. Aktuálna implementácia bola v Arduino Core 3.0.7, ktoré je postavené na ESP-IDF v5.3.2.
Avšak, pri použití Ethernetu sa WiFi.begin() a ďalší relevantný kód pre WiFi adaptér nevyužívajú. Ethernetové pripojenie funguje automaticky bez potreby explicitného vykonávania reconnectu, ako je to bežné pri WiFi spojení. Čip LAN8720A, ktorý je súčasťou ESP32, sa postará o všetko potrebné pri štarte. To znamená, že aj počas behu programu je možné vytiahnuť Ethernetový kábel, pripojiť ho späť, a pripojenie sa automaticky obnoví. Program môže prostredníctvom udalostí (eventov) informovať o stave Ethernetu, vrátane pridelenia IP adresy, nastavenia rýchlosti a duplexu. V tejto implementácii sa využíva aj FreeRTOS s dvoma samostatnými úlohami (tasks).
Jeden task vykonáva periodické meranie výšky hladiny vody v studni pomocou ultrazvukového senzora JSN-SR04T (tento senzor je kompatibilný aj s ďalšími modelmi, ako sú RCW-0001, URM [DFrobot], IOE-SR0X, HC-SR0X, HY-SRF0X, DYP-MEXXX, Parallax PING™ a ďalšie). Druhá úloha sa stará o pripojenie k webovému serveru hladinomera (Watmonitora) prostredníctvom HTTPS protokolu. Vzhľadom na to, že niektoré piny sú označené ako INPUT_ONLY (čo je vhodné len pre pin Echo), pre pripojenie pinu Echo a Trigger som zvolil piny GPIO32 a GPIO33.
Programová implementácia pre ESPlan využíva sofistikovanú logiku a riadenie, ktoré nie je založené na jednoduchom "loopovom" fungovaní, ale na efektívnej komunikácii medzi úlohami (tasks) pomocou fronty Queue. Táto fronta umožňuje bezpečné preposielanie dát medzi úlohami, pričom sa používa FIFO (First In, First Out) buffer, čo zabezpečuje, že dáta sú spracované v poradí, v akom boli vložené. Úloha, ktorá vykonáva meranie vzdialenosti, musí najprv získať validnú hodnotu (tzn. vzdialenosť väčšiu než 0 cm).
Po úspešnom meraní sa hodnota ukladá do Queue a táto úloha následne začne odpočítavať 300-sekundový cyklus, po ktorom vykoná meranie opäť. Tento cyklus sa opakuje, aby sa zabezpečila pravidelná aktualizácia hodnôt. Druhá úloha, ktorá realizuje HTTPS request, čaká na príchod dát do Queue. Maximálna doba čakania je obmedzená na hodnotu daného dátového typu, čo zodpovedá približne 49,7 dňa. Ak sa dáta do Queue dostanú, táto úloha automaticky vykoná HTTP POST request na server, pričom odošle hodnotu spolu s autentifikačným tokenom, ktorý umožňuje mikrokontrólerovi autorizovať zápis na webovú aplikáciu Watmonitor.
Po úspešnom prijatí dát serverom sa hodnoty z Queue odstránia. Tento proces by mohol byť realizovaný okamžite po prijatí dát pomocou metódy xQueueReceive, ale pre prípad neúspešného requestu sa hodnoty uchovajú v Queue, aby sa mohli opätovne poslať pri ďalšej príležitosti. To zabezpečuje, že ak HTTP request zlyhá, dáta nebudú stratené, a program bude pokračovať s opakovaním požiadavky, až kým nebude úspešne odoslaná. Tento prístup zabezpečuje robustnosť a spoľahlivosť systému, kde je inter-task komunikácia riadená efektívne, čo umožňuje plynulé meranie a odosielanie dát na server bez zbytočných strát informácií.
V tomto prípade sa používa xQueuePeek a až po vyhodnotení, že boli dáta zapísané sa dáta z Queue odstránia volaním funkcie xQueueReset, ktorý vymaže obsah celej Queue (toto by nebolo úplne dobré, ak máte v Queue viacero dát s ktorými chcete pracovať.). Týmto sa zabezpečuje synchronizácia pre implementáciu senzorového IoT uzla pre Watmonitor, teda nikdy nedôjde k situácii, že by mikrokontróler odosielal prázdne dáta a vždy bude na dáta čakať. Existujú aj pokročilejšie metódy ako xSemaphoreTake a pod, ale tento typ sa hodí skôr pri používaní kritických funkcií, napr. ukladanie do pamäte, komunikácia s externou perifériou, kedy nechcete, aby vám iný task čítal a používal dáta z periférie s ktorou komunikuje iný task, ktorý je prioritný.
Task si tak prístup zamkne a po vykonaní úlohy zase semafór uvoľní a umožní ho použiť inému tasku. Celý FreeRTOS program je možné škálovať, pridávať ďalšie funkcie, ktoré môžu mať vlastný mechanizmus so samostatnou Queue, či Semaphore. Rovnako tak je FreeRTOS výhodný aj vo vzťahu k programom pre začínajúcich vývojárov, ktorí nevedia ešte navrhovať program bez delayu a vďaka FreeRTOS sa dosiahne to, že delay zablokuje iba vlákno a nie celý void loop, ktorý štandardne beží na Jadre aplikácie Core 1. V prípade zablokovania vlákna ostatné vlákna bežia ďalej, teda celý program sa javí ako dynamicky bežiaci bez zablokovania kompletného programu. K tomuto článok z Júna 2022: https://deadawp.blog.sector.sk/blogclanok/13362/ako-spustit-neefektivny-program-efektivne-freertos.htm
FreeRTOS program s Queue pre ESPlan (testované na verzii 1.1), využíva PHY Ethernet s LAN8720A, ultrazvukový snímač JSN-SR04T a iné s Trigger a Echo signálmi (separátne/kombinované):
https://github.com/martinius96/hladinomer-studna-scripty/blob/master/examples/Hladinomer/HTTPS/ESPlan/ESPlan.ino
Webaplikácia hladinomera (Watmonitor):
https://your-iot.github.io/Watmonitor/
ESPlan kúpite u Laskakitu:
https://www.laskakit.cz/laskakit-esplan-esp32-lan8720a-max485-poe/