Proiectul consta in crearea unui server web accesibil printr-un browser, care monitorizeaza informatii despre camera in care este plasat si ofera acces si control asupra unui alt server care face stream la o camera video, amplasata in aceeasi incapere. De asemenea, o alarma poate sa fie activata din browser (de exemplu cand se vede ceva suspect pe camera), iar aceasta poate fi oprita doar prin introducerea unei parole folosind un keypad.
Scopul acestuia este supravegherea unei camere, iar ideea de la care am plecat a fost montarea unei camera video indreptate spre usa de la intrarea casei, pe care am dus-o putin mai departe.
Proiectul este util pentru mine deoarece pot urmari cu usurinta temperatura si calitatea aerului din camera in care se afla dispozitivul si sa urmaresc camera video live, toate acestea ori de pe telefon, ori de pe calculator.
Utilizatorul se conecteaza prin browser folosind adresa ip asignata. Acesta poate vedea informatile de temperatura, umiditate si miscare in timp real (acestea de updateaza la cateva secunde). De asemenea, utilizatorul are acces la stream-ul video si are la dispozitie diferite butoane care controleaza camera, inclusiv un buton care face o captura la video si o downloadeaza automat.
De asemenea, utilizatorul are in browser un buton de alarma, care porneste un buzzer care poate sa fie dezactivat doar in mod fizic, atunci cand se introduce parola corecta pe un keypad.
Produs | Link |
Placa dezvoltare ESP32 | https://www.emag.ro/placa-dezvoltare-esp32-devkit-v1-ai669-s332/pd/DXV9FDMBM/ |
Modul ESP32-CAM | https://www.emag.ro/modul-esp32-cam-ov2640-camera-inclusa-ai065-s72/pd/DKDGT8BBM/ |
Convertor mini USB Serial | https://www.emag.ro/modul-convertor-mini-usb-serial-ft232rl-rosu-cu-mufa-usb-mini-ai097-s188/pd/DBPRXGBBM/ |
Senzor temperatura si umiditate | https://www.emag.ro/senzor-umiditate-si-temperatura-dht22-cl170/pd/DD006JBBM/ |
Senzor miscare | https://www.emag.ro/senzor-miscare-am312-mini-arduino-ai003-s10/pd/DYV2JZBBM/ |
Fire mama-mama | https://www.emag.ro/modul-esp32-cam-ov2640-camera-inclusa-ai065-s72/pd/DKDGT8BBM/ |
Fire mama-tata | https://www.emag.ro/set-10-fire-dupont-mama-tata-30-cm-cl95/pd/D4J66JBBM/ |
Fire tata-tata | |
Breadboard 830p | |
Keypad | https://ardushop.ro/ro/home/1003-tastatura-cu-4-intrari.html |
WiFi.h - folosit pentru conectarea la WiFi.
ESPAsyncWebServer.h - folosit pentru realizarea server-ului asincron si pentru template processing-ul oferit.
DHT-sensor-library - Folosit pentru citirea valorilor de temperatura si umiditate. Aceasta are ca dependenta si Adafruit Unified Sensor Driver
In functia setup() initial se defineste rolul asignat fiecarui pin, dupa care se incearca conexiunea la WiFi pana cand aceasta reuseste. Dupa ce s-a conectat la WiFi, se scrie pe monitorul serial adresa ip locala a server-ului pentru a putea fi accesat din browser. De asemenea, tot aici se defineste raspunsul care trebuie returnat in urma unui request, pentru fiecare ruta care este folosita.
Am creat functia getMotion(), care citeste senzorul de miscare, si readDHT(String val), care citeste senzorul de umiditate si temperatura pentru a le putea lua usor cand am nevoie de acestea.
Html-ul, css-ul si javascript-ul paginii este stocat in memoria flash, in PROGMEM (https://www.arduino.cc/reference/en/language/variables/utilities/progmem/). Aici se afla codul pentru styling-ul paginii, dar si pentru diferitele informatii oferite. Pentru updatarea valorilor pe site in timp real am creat cateva functii care se apeleaza la un anumit interval. In principiu, la un anumit numar de secunde se face un request de tip GET catre server-ul web care ii intoarce valorile cerute, in functie de calea request-ului. (am mentionat mai sus, sunt definite in setup).
Stream-ul live care se poate vedea pe pagina este hostat pe un esp32-cam. Codul pentru camera este cel oferit in Examples→CameraWebServer. Am urmarit codul si am adaugat butoane pentru controlul calitatii video si flip-ul imaginii video in ambele direcii. De asemenea, am adaugat un buton care face captura la imaginea video oferita si o downloadeaza automat. Toate acestea sunt facute prin intermediul unor requesturi catre esp32-cam. Desi server-ul principal este asincron si permite mai multi utilizatori simultan, camera web este mai limitata si permite un singur utilizator sa fie conectat la un anumit moment dat. Asadar, desi pot accesa server-ul de monitorizare de pe mai multe device-uri simultan, se poate viziona stream-ul propriu-zis doar de pe un singur device (primul venit). Toate celelalte functionalitati sunt inca disponibile indiferent de numarul de utilizatori.
Intr-un final, mi s-a parut o idee buna sa pot activa o alarma din browser (de exemplu in caz ca se vede ceva suspect pe camera). Am creat un buton de alarma care face un request de tip get pe server. Acesta da drumul la buzzer care face zgomot pana cand aceasta este dezactivata. Singurul mod prin care alarma este dezactivata este prin introducerea parolei potrivite cu ajutorul unui keypad. Pentru realizarea acestui lucru, citesc mereu in loop valorile butoanelor de pe keypad. Retin mereu ultima valoare citita pentru a o lua in considerare o singura data (sa nu se puna aceeasi cifra de mai multe ori daca se tine apasat pe buton, etc). Deoarece butoanele de pe keypad sunt 1,2,3 si 4, am descis sa folosesc o parola de 5 cifre formata din acestea. De fiecare data cand se apasa pe un buton, se inmulteste o “parola curenta” cu 10 si se adauga numarul apasat. Daca parola curenta si parola reala au acelasi numar de cifre, se compara, altfel se trece mai departe. Indiferent daca parolele au fost identice sau nu, se reseteaza parola curenta cu 0. Cand parola curenta este 0, se tine aprins un led, care reprezinta faptul ca buffer-ul parolei este gol.
26 aprilie : alegerea temei proiectului
05 mai : ajunge prima comanda
19 mai : ajunge o comanda suplimentara
30 mai : finalizare wiki
luna mai: lucrat la proiect