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

7. diel - Odoslanie obrázkov na webový server na module ESP-32

V predchádzajúcej lekcii, SPI Flash File System pre webový server na ESP-32 , sme sa zoznámili s SPI Flash File System pre webový server na module ESP32 a predviedli sme si ho na príklade.

V tomto tutoriále Internetu vecí s ESP-32 si predstavíme, ako jednoduchým spôsobom nahrať obrázky na webový server. Naučíme sa ich tiež ako ich zobraziť v prehliadači. Opäť použijeme nám už známe rozhranie SPIFFS.

Nahranie obrázkov na webový server cez SPIFFS

Rozhranie Serial Peripheral Interface Flash File System (SPIFFS) už poznáme, preto si ho teraz len trochu zrekapitulujeme. Toto rozhranie si možno predstaviť ako prídavné úložisko na čipe ESP-32, na ktoré môžeme ukladať súbory, obrázky atď. V tomto tutoriále do neho nahráme niekoľko obrázkov, aby sme si vyskúšali, ako sa s ním v tomto prípade pracuje.

Keďže teraz nebudeme cez webový server nijako ovládať akékoľvek hardvérové periférie, bude nám stačiť samotný čip. Tým sa nám veľmi znížila obtiažnosť projektu, pretože nemusíme riešiť schému zapojenia. Poďme si teraz najprv vytvoriť HTML dokument.

Štruktúra HTML dokumentu

Keďže už máme nejaké skúsenosti s nahrávaním súborov na webový server, vieme, že je dôležité si pred začiatkom písania hlavného programu najskôr vytvoriť HTML dokument. Ten bude obsahovať štruktúru stránky zobrazenej na webovom klientovi a tento súbor budeme tiež odosielať cez SPIFFS. V pracovnej zložke s kódom pre mikrokontrolér si vytvoríme novú zložku s názvom data/ av nej vytvoríme HTML súbor index.html. Tento dokument bude vyzerať takto:

Dokument obsahuje iba základnú štruktúru HTML stránky, zobrazenie nahraných obrázkov a tiež základné CSS štylovanie, nech stránka nie je tak jednoduchá. Takto vytvorený dokument bude v tomto projekte dostatočný, poďme sa teda presunúť k samotnému programu pre náš mikrokontrolér.

Do atribútu src tagu img je dôležité napísať iba názov obrázku bez prípony, vďaka tejto informácii bude z SPIFFS priradený správny obrázok.

Skript pre ESP-32

Začnime teda s najdôležitejšou zložkou projektu - kódom pre mikrokontrolér. Logika tohto programu sa nebude veľmi líšiť od programu z lekcie. Jediný rozdiel bude v podstate iba v tom, že budeme na server posielať obrázky. Začneme obligátne hlavičkou:

Čo sa týka zahrnutých knižníc, všetky sme si už opisovali skôr. Avšak opakovanie je matkou múdrosti, a tak si poďme ľahko pripomenúť ich význam v kóde. Knižnica WiFi.h nám ponúka funkcie pre prácu s Wi-Fi sieťou, ako napr. funkciu pre pripojenie k sieti, či pre získanie aktuálnej IP adresy. ESPAsyncWebServer.h je knižnica, ktorá nám poskytuje funkcie a objekty, vďaka ktorým môžeme nakonfigurovať asynchrónny webový server a knižnica SPIFFS.h nám zaistí prácu s rozhraním SPIFFS.

Reťazce ssid a password obsahujú prihlasovacie údaje Wi-Fi siete, ku ktorej chceme, aby sa mikrokontrolér pripojil. Posledným riadkom kódu určíme serveru, na ktorom porte má bežať. V našom prípade to bude defaultný port pre webový server, čiže 80. Máme teda vytvorenú celú hlavičku súboru a môžeme pokračovať ďalej.

Funkcia setup()

Poďme sa vrhnúť na funkciu setup():

Najskôr zo všetkého si nastavíme výstup sériového monitora na určitý počet Baudov, v našom prípade na 115200. Potom pripojíme mikrokontrolér k Wi-Fi sieti funkciou begin(), do ktorej pošleme ako parametre naše dva reťazce s prihlasovacími údajmi k sieti. Ak prejde kontrola pripojenia k sieti, ešte je potrebné zistiť, či sa nevyskytol problém s rozhraním SPIFFS. Ak je všetko v poriadku, do sériového monitora sa nám vypíše IP adresa, ktorú keď vložíme do prehliadača, uvidíme obsah našej webovej stránky.

Potom už stačí iba vytvoriť kód na spracovanie požiadaviek z webového klienta. Najprv určíme, čo sa má stať hneď po načítaní stránky, na to slúži táto časť kódu:

Tu sa vyhodnotí najskôr, či je obsah URL adresy prázdny prvým parametrom funkcie on() a ak áno, server dostane súbor so štruktúrou HTML stránky, ktorú zobrazí v prehliadači.

Pre zaujímavosť, tretí parameter funkcie send() objektu pozadavek() je tzv. MIME type súboru, tzn. aký práve obsah sa v súbore nachádza. V našom prípade to je čistý HTML text, ale napr. obrázky či PDF dokumenty majú iný MIME type, pretože sa jedná o úplne odlišný typ súboru.

Keďže sme v našom HTML súbore do atribútu src pri značke img uviedli názvy súborov, webový klient si ich od servera bude chcieť vyžiadať tým, že tieto názvy vložia do URL adresy. Preto je na čase určiť mikrokontroléru, ako sa má zachovať. Pre vysvetlenie si uveďme jednu z vyššie uvedených implementácií funkcií on():

Akonáhle sa v URL adrese objaví reťazec zelena, pošle sa cez rozhranie SPIFFS obrázok s názvom, ktorý je uvedený v druhom parametri funkcie send(). V našom prípade je to súbor zelena.png, ktorý sa zobrazí v prehliadači.

Úspešne sme vyriešili spracovanie požiadaviek z klienta. Teraz nám už stačí do programu doplniť funkciu loop(). Táto konkrétna síce nebude mať žiadne telo, ale ako už vieme, v programe sa musí vyskytovať:

Príprava a nahranie obrázkov

Teraz obrázky, ktoré chceme nahrať do úložiska, presunieme k HTML súboru do zložky data/. Obrázky, ktoré využívame v tomto projekte, sa spoločne so sketchom a kódom nachádzajú v zips archíve pod lekciou.

Je dôležité si dať pozor na veľkosť nahrávaných obrázkov, ich veľkosť nesmie presiahnuť veľkosť vyhradenú pre SPIFFS. Oplatí sa obrázky pred nahraním komprimovať, aby sme zmenšili ich veľkosť a teda si uvoľníme miesto v pamäti.

Po kompilácii a nahraní kódu pre mikrokontrolér rozklikneme položku Nástroje a potom ESP32 Sketch Data Upload, čím sa nahrajú všetky súbory v priečinku data/ a na prehliadači sa zobrazia obrázky týmto spôsobom:

Internet vecí s ESP32

V budúcej lekcii, Spracovanie dát z HTML formulára na module ESP-32 , si ukážeme, ako môžeme spracovávať dáta z HTML formulára na stránke bežiacej na webovom serveri na ESP32.


 

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é 20x (4.56 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C++

 

Predchádzajúci článok
SPI Flash File System pre webový server na ESP-32
Všetky články v sekcii
Internet vecí s ESP32
Preskočiť článok
(neodporúčame)
Spracovanie dát z HTML formulára 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