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 prijaté v Payloade.
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:Štandardne sú dáta v takejto jednoduchej senzorickej sieti 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, ktoré sa korektne načítajú. Dáta je možné ukladať aj na SD kartu, či v prípade ESP dosiek aj do internej SPIFFS pamäte, rovnako tak i do emulovanej EEPROM-ky.
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
Jednoduchú implementáciu pre webserver môžete vyskúšať aj z mojej stránky z projektu WiFi teplomera na platforme ESP8266:
https://arduino.php5.sk/wifi-teplomer.phpZdrojové kódy pre webserver:ESP8266 -
https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WebServer/examples/HelloServer/HelloServer.inoESP32 -
https://github.com/espressif/arduino-esp32/blob/master/libraries/WebServer/examples/HelloServer/HelloServer.inoArduino + Ethernet W5100 -
https://github.com/arduino-libraries/Ethernet/blob/master/examples/WebServer/WebServer.inoArduino + Ethernet W5500 -
https://github.com/adafruit/Ethernet2/blob/master/examples/WebServer/WebServer.inoZdrojové kódy pre HTTP klientov:
ESP8266 -
https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/examples/WiFiClient/WiFiClient.inoESP32 -
https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/examples/WiFiClient/WiFiClient.inoArduino + Ethernet W5100 -
https://github.com/arduino-libraries/Ethernet/blob/master/examples/WebClient/WebClient.inoArduino + Ethernet W5500 -
https://github.com/adafruit/Ethernet2/blob/master/examples/WebClient/WebClient.ino