IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

6. diel - SPI Flash File System pre webový server na ESP-32

V minulej lekcii, Webový server na module ESP-32 druhýkrát - Sprevádzkovanie serveru , sme dokončili program na sprevádzkovanie webového servera a ukázali sme si jeho funkčnosť.

V tomto tutoriále Internetu vecí s ESP32 sa budeme opäť venovať webovému serveru, tentoraz však využijeme SPI Flash File System. Ten nám umožňuje zobrazovať na webovej stránke súbory uložené v špeciálnom úložisku na mikrokontroléri. Obsah na stránke preto nemusíme zložito vypisovať do kódu pre mikrokontrolér. Namiesto toho využijeme externých súborov, v našom prípade HTML a CSS.

SPI Flash File System (SPIFFS)

Vďaka SPI File Flash System je možné do úložiska na mikrokontroléri ukladať rozsiahlejšie súbory obsahujúce napr. dáta, ktoré sa nemenia a nie je nutné ich teda zakaždým spúšťať spolu s programom. Toto úložisko je možné si predstaviť ako malú SD kartu, pripojenú k čipu ESP32. V základnom nastavení je úložisku pridelené cca 1,5 MB z flash pamäte. Veľkosť SPIFFS úložiska je možné zistiť v Arduino IDE po kliknutí na Nástroje a potom po nabehnutí na Partition Scheme, kde prípadne môžeme meniť jeho veľkosť. My teraz budeme pokračovať s východiskovým nastavením úložiska.

Princíp práce s SPIFFS

Akonáhle k serveru pristúpime pomocou IP adresy, webový server vyšle HTTP požiadavku pre zobrazenie základnej HTML stránky a prípadne aj CSS súboru pre vzhľad stránky. Mikrokontrolér požiadavku spracuje tak, že v úložisku pre SPIFFS vyhľadá príslušné súbory podľa názvu a poskytne ich webovému serveru, ktorý ich zobrazí resp. využije. Mikrokontrolér potom už iba spracováva ďalšie HTTP požiadavky od servera napr. pri rozsvietení LED diód či podobných akcií. Keď sme si teda prešli základnú teóriu, poďme si vyskúšať využitie SPI File Flash Systemu v praxi.

Praktický príklad - blikanie LED diódami pomocou webového servera

Pre celé zapojenie budeme potrebovať okrem LED diód aj rezistory, najlepšie o hodnote 1kΩ. Všetky súčiastky zapojíme týmto spôsobom:

Internet vecí s ESP32

Inštalácia pluginov pre nahrávanie súborov na server

Akonáhle máme všetko zapojené, poďme si postupne pripraviť prostredie. Najprv si nainštalujeme plugin na nahrávanie súborov na server, bez ktorého nám webový server nezobrazí žiadny obsah na stránke. Plugin stiahneme z GitHub repozitára autora. Po stiahnutí .zip archívu vložíme jeho obsah do zložky umiestnenia projektov. Túto zložku je možné zistiť v Arduino IDE kliknutím na Súbor a potom na Vlastnosti. V tejto zložke vytvoríme zložku tools/ a do nej vložíme celý obsah .zip archívu. Po reštarte vývojového prostredia sa objaví táto možnosť v záložke Nástroje:

Internet vecí s ESP32

Inštalácia knižníc

V tomto projekte využijeme knižníc, ktoré nie sú zahrnuté v základnej verzii Arduino IDE. Poďme si ich teda stiahnuť a doinštalovať. Konkrétne budeme potrebovať knižnice ESPAsyncWebServer a keďže táto knižnica vyžaduje k svojej práci knižnicu AsyncTCP, stiahneme a nainštalujeme aj ju.

Postup pri inštalácii knižníc rady máme v kurze Arduino - Programovací jazyk, kde sa tejto problematike venujeme.

Vytvorenie HTML a CSS súborov

Akonáhle máme správne nainštalované knižnice, je načase vytvoriť HTML súbor so základným obsahom našej stránky. V priečinku s naším projektom si vytvorme podadresár s názvom data/ av nej vytvoríme nový HTML súbor s názvom index.html. Obsah tohto súboru bude vyzerať takto:

Reťazce %STAV% a %STAV2% sú tu kvôli zobrazeniu aktuálneho stavu na LED dióde, sú tu v podstate navyše, ale hodí sa napr. pri debuggingu kódu.

V našom kóde máme štyri tlačidlá, kedy každé obsahuje odkaz a informáciu, či sa má príslušná LED zapnúť alebo vypnúť.

Vytvorenie CSS súboru

Táto časť nie je povinná, pokiaľ ale chceme mať dobrý pocit aj z vizuálu našej stránky, je dobré si napísať aspoň nejaký základný štýl stránky. Tento CSS súbor vytvoríme do rovnakého priečinka data/ ako HTML súbor. Pomenujeme ho styl.css. Dostačujúce bude tento kód:

Je dôležité do značky head v HTML súbore zahrnúť náš vytvorený CSS súbor pomocou tagu link, inak sa zobrazí čistá HTML stránka!

Kód pre mikrokontrolér ESP32

Teraz máme vytvorený všetok obsah na našej stránke, poďme sa teda vrhnúť na logiku v našom projekte. Poďme si teda zase postupne popísať všetky súčasti programu.

Začnime opäť hlavičkou programu:

Najskôr je dôležité zahrnúť do projektu knižnice, ktoré nám markantne znížia rozsah programu. Knižnica WiFi.h je nám už známa z minulosti, presuňme sa teda ku knižnici ESPAsyncWebServer.h. Knižnica nám umožní asynchrónny webový server, kedy sa pri každej požiadavke zo servera zaneprázdni vlákno procesu a nemôže byť využité ničím iným. Knižnica SPIFFS.h nám potom zaistí nahranie HTML a CSS súborov na server.

Do reťazcov ssid a password vložíme údaje k sieti, ku ktorej chceme, aby sa mikrokontrolér pripojil, az ktorej získame IP adresu.

Funkcie pre výpis stavu diód

Teraz si poďme vytvoriť funkciu, ktorá nám bude nahrádzať text na stránke s aktuálnymi stavmi na oboch diódach:

Funkcia obsahuje iba podmienky pre vyhodnotenie aktuálnej požiadavky zo servera. Podľa hodnoty vstupného parametra var vypíše na stránku hodnotu OFF alebo ON v závislosti od aktuálneho stavu diód, ktorý prečítame pomocou funkcie digitalRead(). Túto funkciu budeme využívať pri spracovávaní každej požiadavky zo servera.

Funkcia setup()

Poďme sa teraz presunúť k hlavnej časti nášho programu, teda k funkcii setup(). Najskôr si nastavíme počet Baudov sériového monitora a pomocou funkcie pinMode() nastavíme piny pre LED. Ak sa vyskytne chyba pri nahrávaní SPI Flash File Systemu, vypíšeme chybovú hlášku:

Ďalej poďme náš mikrokontrolér pripojiť k Wi-Fi:

Teraz sa presunieme na spracovanie požiadaviek zo servera. Spracovanie požiadavky funguje na princípe čítania údajov z URL adresy. Metódou GET a na základe obsahu URL adresy určíme, čo sa má stať. Najprv nastavíme, ktorý súbor sa má zobraziť hneď po načítaní stránky. V našom prípade je to súbor index.html:

V celom programe je veľmi dôležitá funkcia send(), a preto si ju poďme vysvetliť. Prvým parametrom určíme, kde má súbor nájsť a naň potom aj presmerovať. Názov súboru je druhý parameter. Lomítko pred názvom súboru znamená, že má súbor hľadať v podpriečinku zložky, kde sa nachádza projekt. Ďalšie dva parametre sú nevyhnutné pre prácu so súbormi a posledný parameter je nami vytvorená funkcia, ktorá mení hodnotu placeholdera s aktuálnym stavom diód. V tejto chvíli sa nič nezmení.

Rovnakým spôsobom na server pošleme aj CSS súbor:

A nakoniec spracujeme požiadavky zo servera, pokiaľ sa zmení stav na akejkoľvek dióde. Použijeme opäť funkciu send() a zároveň zmeníme hodnotu priamo na doske. Po spracovaní požiadavky sa zmení hodnota na LED a zároveň sa zmení aj hodnota placeholdera:

Aby program fungoval, musí sa zhodovať prvý parameter funkcie on() s odkazom uvedenom v HTML kóde pri jednotlivých tlačidlách!

Spustenie kódu a nahranie súborov:

Teraz môžeme program skompilovať a nahrať do mikrokontroléra. Po nahraní kódu je potrebné nahrať aj súbory, ktoré využívame. Stačí kliknúť na položku v navigácii Nástroje a potom na ESP32 Sketch Data Upload, čím sa všetky potrebné súbory nahrajú do pamäte na ESP32.

Súbory je dôležité nahrať až po nahratí celého kódu pre mikrokontrolér.

Akonáhle sme nahrali ako kód pre ESP32, tak aj oba súbory, presunieme sa do sériového monitora, kde zistíme IP adresu mikrokontroléra. Po vložení tejto IP adresy do prehliadača sa zobrazí táto stránka:

Internet vecí s ESP32

Teraz po kliknutí na príslušné tlačidlo pri každej dióde bude dochádzať k zmene jej stavu zo zhasnutej na rozsvietenú a naopak. Celý kód a všetky súbory sú pripojené v archíve na stiahnutie pod lekciou.

V nasledujúcej lekcii, Odoslanie obrázkov na webový server na module ESP-32 , si predstavíme spôsob nahrania obrázkov na webový server cez rozhranie SPIFFS.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 36x (3.15 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C++

 

Predchádzajúci článok
Webový server na module ESP-32 druhýkrát - Sprevádzkovanie serveru
Všetky články v sekcii
Internet vecí s ESP32
Preskočiť článok
(neodporúčame)
Odoslanie obrázkov na webový server na module ESP-32
Článok pre vás napísal Adam Hudeczek
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje zejména programování mikrokontrolerů a tvorbou a provozem webových stránek a webových aplikací.
Aktivity