Dnes chcem predstaviť projekt senzorickej siete, ktorá je navrhnutá pre interné použitie v LAN sieti. Komunikujúce mikrokontroléry sú postavené na mixe platforiem ESP8266 (NodeMCU), ESP32 (Devkit), Arduino + Ethernet W5100, Arduino + Ethernet W5500. Každá z platforiem obsahuje knižnicu, ktorá umožňuje realizovať HTTP prenos či na úrovni klienta, alebo webservera.
V senzorickej sieti jedna z platforiem funguje ako centrálny uzol - webserver, ktorý prijíma dáta po HTTP protokole POST metódou. Webserver na platforme ESP8266 vyžaduje samostatnú knižnicu. Pre ESP32 je webserver implementovaný priamo v hlavičkovom súbore WiFi.h, ktorý obsluhuje aj WiFi HTTP spojenie a pripojenie na existujúcu WiFi sieť.
Webserver pre ESP8266 a ESP32 obsahuje jednoduchú možnosť preberať jednotlivé argumenty z POST dát. Arduino s Ethernet shieldom nemá tak pokročilú knižnicu, vyžaduje sa preto rozparsovanie jednotlivých dát napríklad funkciou jazyka C strtok() s terminátorom & - ktorý oddeľuje jednotlivé argumenty.
Takto je možné získať jednotlivé argumenty, ktoré webserver načítal pri požiadavke klienta. Spracovanie je teda pri využití Arduina s Ethernetom dlhšie ako pri ESP vývojových doskách. Nakoľko pripojenie klient trvá iba pár ms, je možné prevádzkovať aj väčší počet senzorických uzlov komunikujúcich s webserverom. Štandardne každý uzol odosiela dáta po pár sekundách, či minúte. Vďaka architektúre klient-server je možné odosielať aj viacero dát v jednej požiadavke, pričom sú dáta oddelené oddelovačom &. Payload klienta, môže vyzerať napríklad: teplota=21.33&vlhkost=50.91&tlak=1013.91.
Bloková schéma:
Dáta sú uchované v RAM pamäti webservera a pri každej požiadavke sa prepisujú. Teda ak klient vypadne, webserver stále drží poslednú načítanú hodnotu. Webserver distribuuje dáta od senzorov aj na webovú stránku, ktorá je prístupná používateľovi. Výpis je realizovaný do jednoduchej HTML tabuľky. V prípade, že v LAN sieti existuje prístup na internet, je možné importovať aj grid systémy ako Bootstrap, či iné grafické knižnice.
V pokročilej implementácii môžu byť dáta distribuované aj pre klientov, ktorí môžu na základe hodnôt z webservera riadiť ovládanie relé, výkonových prvkov, chladenia, kúrenia, pričom sú dáta odosielané z iného - nezávislého uzla. Pri platformách ESP8266 a ESP32 je možné využiť mDNS - multicast DNS, kedy je možné v LAN sieti prevádzkovať aj DNS záznam pre webserver s doménovým menom tvaru: moje_domenove_meno.local.
Vďaka tomu je možné pripojiť sa na doménové meno, aj keď nevieme presnú IP adresu, ktorá sa na základe DHCP môže každých pár hodín zmeniť. Taktiež LAN sieť musí podporovať mDNS, rovnako tak mDNS nie je defaultne zapnuté vo Windowse. Pri platformách ESP8266 a ESP32 je možné ďalej využiť aj AP mód, kedy webserver funguje aj ako prístupový bod, vysiela vlastnú SSID sieť s WPA/WPA - PSK šifrovaním, alebo bez hesla. Tento režim sa funkčne nastavuje cez WiFi.softAP(ssid, pass); funkciu.
Tu je nutné zdôrazniť, že je možné využiť maximálne 5 klientov, ktorí sú na sieti pripojení. Pri väčšom počte klientov je server nestabilný, najmä v prípade ESP8266, ktorý má iba jednojadrový procesor, ktorý sa stará o WiFi časť (prístupový bod), webserver, komunikáciu a Arduino softvérové jadro, ktoré musí obsluhovať. Existuje teda viacero možností, ako je možné prevádzkovať a na akom koncepte postaviť jednoduchú komunikačnú sieť v LAN sieti.
Populárne senzory, ktoré môžete použiť ako zdroje dát:
- DS18B20 - teplotný senzor na OneWire zbernici
- DHT22 - digitálny senzor teploty a vlhkosti vzduchu
- BME280 - I2C senzor teploty, vlhkosti, tlaku vzduchu
- BMP280 - I2C senzor teploty, tlaku vzduchu
- SHT21 - I2C senzor teploty, vlhkosti
- HC-SR04 - ultrazvukový senzor vzdialenosti 2-450cm
- HC-SR501 - PIR infračervený senzor pohybu
Viac mnou realizovaných projektov nájdete na: https://arduino.php5.sk
Zdrojové kódy pre webserver:
Zdrojové kódy pre HTTP klientov: