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



Izbový termostat - Portovanie programu - Arduino ---> ESP8266
pridal deadawp 22.9. 2020 o 15:19 (naposledy upravené 29.6. 2021 o 12:39)



Projekt Izbový termostat (build 1.0.1) bol postavený pôvodne na platforme Arduino s využitím Ethernet shieldu Wiznet W5100, respektíve Ethernet modulu Wiznet W5500. Implementácia využívala naprogramovaný HTTP webserver, ktorý dokázal odpovedať na radu preddefinovaných HTML stránok. Nakoľko platforma nemá pokročilú implementáciu pre webserver, je nutné všetko implementovať samostatne - zvoliť HTTP hlavičku a jej kód a následný payload, ktorý sa klientovi odošle ako response na požiadavku. Payload obsahuje HTML kód webovej stránky.  

Jednou z funkcionalít Izbového termostatu bolo aj spracovanie HTML formulára, ktorý umožňoval zápis údajov o cieľovej teplote a hysteréze do EEPROM pamäte, aby boli tieto dáta dostupné aj po stop-start cykle Arduina. Implementácii bolo nutné prispôsobiť aj spôsob, ako narábať s EEPROM pamäťou, nakoľko má limitovaný počet prepisov - rádovo 10 až 100-tisíc. Nie je do nej možno zapisovať tak, ako do premennej bežiacej v RAM pamäti v bežiacej aplikácii. 

Nakoľko webserver neobsahoval pokročilú vstavanú implementáciu pre spracovanie premenných obsiahnutých v GET požiadavke, bolo nutné požiadavku rozparsovať - C funkciou strtok() a vytiahuť hodnotu z jednotlivých parametrov požiadavky, ktorým bola priradená. 

ESP8266 je WiFi platforma, na ktorú sa pokúsime portovať plnú funkcionalitu programu pre Izbový ermostat, ktorý bol pôvodne navrhnutý pre Arduino a Ethernet. Knižnica ESP8266WiFi umožňuje dosku ESP8266 pripojiť k WiFi sieti a umožňuje jej pracovať v režime klienta a vytvoriť HTTP spojenia. 

Nakoľko však potrebujete funkciu webservera, vyžaduje sa  knižnica ESP8266WebServer. To umožní spúšťať samostatné HTML stránky. V systéme sa nachádzajú celkom 3 samostatné stránky, pričom prvá zo stránok - Root je iba výpis HTML kódu s aktuálnymi dátami - aktuálna teplota, nastavená cieľová teplota a hysteréza. Odoslaním HTML formulára z root stránky sa formulár spracúva v súbore action.php, pričom GET metódou sú do linku dosadené parametre fname (cieľová teplota)  a fname2 (hysteréza). Webserver pre ESP8266 má priamo možnosť prevziať argument, obsahuje pre túto funkciu programovú implementáciu. 

Porovnanie náročnosti prevzatia argumentov  z HTTP GET requestu - Arduino + Ethernet / ESP8266:

Práca s webserverom pod ESP8266 je oveľa efektívnejšia a umožňuje prispôsobiť webserver pre potrebné využitie. Každá existujúca HTML stránka je spustená samostatne a má svoj vlastný callback, ktorý sa vykoná pri jej spustení klientom. 

V odpovedi - response dokáže ESP odoslať predvolený HTTP kód, priradiť content-type a payload odpovede. V prípade HTML stránky je content-type text/html, v prípade JSON správy je to application/json. Je možné vyhotoviť špecifickú 404 - Not found stránku, na ktorú používateľa ESP8266 presmeruje v prípade, že vykoná request na neexistujúcu lokalitu (priečinok) / súbor. Taktiež je možné na konkrétnej stránke očakávať aj typ requestu GET / POST a prijímať iba dáta prijaté touto metódou. V prípade, že sú dáta dostupné inou metódou, sú zahodené.

ESP8266 je stabilnejšie aj na väčšie webové stránky. Optimálna veľkosť je do 4kB. V prípade, že sa vyžadujú rozsiahlejšie CSS štýly, template pre webovú stránku, je lepšie ťahať štýly, jQuery, JS scripty a iné z oficiálnych CDN serverov, ktoré majú garantovaný uptime a dané zdroje si načíta klient, ktorý sa k ESP8266 pripojí, ESP nemusí distribuovať tisíce riadkov kódu a mať ich fyzicky uložené vo flash pamäti. 

Zdrojový kód HTML stránok, spôsob načítavania dát zo senzora DS18B20 na OneWire zbernici je totožný. Pri ESP8266 treba rozlišovať zápis vývodu prostredníctvom čísla digitálneho pinu s označením D, respektíve jeho GPIO číslo. Napríklad D3 má GPIO označenie 0, D1 --> 5, D2 --> 4 a podobne.

EEPROM
Väčším problémom je implementácia EEPROM úložíska a práce s ním. ESP8266 nemá vstavanú EEPROM pamäť, avšak dokáže ju softvérovo emulovať na existujúcej flash pamäti. Štandardne sa používa emulátor pre 512B (pre náš účel dostačujúce), ale je ju možné rozšíriť až na 4096B --> 4kB. 

Knižnicu EEPROM má ESP8266 vlastnú v Arduino Core. Použitie funkcie pre čítanie je totožné, avšak pre zápis sa vyžaduje dodatočný príkaz EEPROM.commit();, ktorý zápis do (flash) EEPROM sekcie potvrdí a vykoná. Bez tohto príkazu sa príkazom EEPROM.write() zápis nevykoná. 

Oblasť, z ktorej je EEPROM emulovaná sa nachádza vždy za filesystémom pre program. Štandardne má partícia pre program 1MB a ani zmenou programu sa EEPROM emulovaná oblasť vo flash pamäti nezmení (závisí aj od nastavenia zápisu do flash systému - App only). 

Viac o Ethernet termostate: https://martinius96.github.io/termostat-ethernet/

Strojové kódy (.hex) pre Arduino a Ethernet s funkcionalitou Ethernet termostatu je možné nájsť v Github repozitári: https://github.com/martinius96/termostat-ethernet/



Prístupov 7519
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDOVAŤ
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
Ako nainštalovať Watmonitor?
[ 21.11.2024] (príspevkov 0)
Update grafov, ukážkových kódov - Watmon...
[ 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)