Cuprins:

ESP32 Smart Home Hub: 11 pași
ESP32 Smart Home Hub: 11 pași

Video: ESP32 Smart Home Hub: 11 pași

Video: ESP32 Smart Home Hub: 11 pași
Video: ESP32 HomeKit Tutorial | HomeSpan 2024, Noiembrie
Anonim
ESP32 Smart Home Hub
ESP32 Smart Home Hub
ESP32 Smart Home Hub
ESP32 Smart Home Hub
ESP32 Smart Home Hub
ESP32 Smart Home Hub
ESP32 Smart Home Hub
ESP32 Smart Home Hub

Crearea unui sistem care poate gestiona cantități mari de date despre senzori, poate avea mai multe ieșiri și se poate conecta la internet sau la o rețea locală necesită mult timp și eforturi mari. De prea multe ori, oamenii care doresc să-și facă propriile rețele inteligente de casă se luptă pentru a putea găsi și asambla componente personalizate într-un sistem mai mare. De aceea am vrut să creez o platformă modulară și bogată în funcții care să faciliteze construirea senzorilor și ieșirilor conectate la IoT.

Mulțumim DFRobot și PCBGOGO.com pentru sponsorizarea acestui proiect!

Pentru mai multe informații detaliate, vizitați repo Github:

Provizii

  • DFRobot ESP32 FireBeetle

    www.dfrobot.com/product-1590.html

  • Senzor DHT22

    www.dfrobot.com/product-1102.html

  • Senzor de lumină și gest APDS9960

    www.dfrobot.com/product-1361.html

  • Modul LCD I2C 20x4

    www.dfrobot.com/product-590.html

  • Benzi LED analogice RGB

    www.dfrobot.com/product-1829.html

  • DRV8825 Drivere cu motor pas cu pas
  • Cititor de carduri SD
  • NEMA17 Motoare pas cu pas

Pasul 1: caracteristici

Caracteristici
Caracteristici
Caracteristici
Caracteristici
Caracteristici
Caracteristici

Caracteristica principală a acestei plăci este o placă de dezvoltare ESP32 FireBeetle care gestionează toate comunicările, citirile senzorilor și ieșirile. Există doi șoferi de motor pas cu pas care controlează două motoare pas cu pas bipolare.

Autobuzul I2C este, de asemenea, defectat pentru utilizare cu componente precum APDS9960 sau un LCD. Pentru citirea temperaturii, există pini rupți pentru conectarea la un senzor DHT22, precum și un fotorezistor pentru citirea nivelurilor de lumină ambientală.

Există suport pentru o bandă de lumină analogică pe placă, care are trei MOSFET-uri pe ea pentru a conduce luminile LED.

Pasul 2: PCB

PCB
PCB
PCB
PCB
PCB
PCB
PCB
PCB

Am început procesul de proiectare PCB creând mai întâi o schemă în Eagle. Deoarece nu am reușit să găsesc o bibliotecă ESP32 FireBeetle, tocmai am folosit două anteturi pin 1x18 pin. Apoi, am creat un circuit de gestionare a energiei care ar putea accepta 12v printr-o mufă cilindrică DC și să-l convertească la 5v pentru alimentarea senzorilor și ESP32.

După finalizarea schemei, am trecut la proiectarea PCB-ului în sine.

Știam că fișa cilindrică DC ar trebui să fie aproape de partea din față a plăcii, iar condensatorii de netezire a sursei de alimentare 100uF trebuie să fie aproape de intrările de putere ale driverului motorului pas cu pas. După ce totul a fost așezat, am început să direcționez urme.

În timp ce Oshpark produce PCB-uri de calitate, prețurile lor sunt destul de ridicate. Din fericire, PCBGOGO.com produce și PCB-uri grozave la un preț accesibil. Am putut cumpăra zece PCB-uri pentru doar 5 dolari, mai degrabă decât să plătesc 52 de dolari pentru doar trei plăci de la Oshpark.com.

Pasul 3: Asamblare

Asamblare
Asamblare
Asamblare
Asamblare
Asamblare
Asamblare

În general, asamblarea plăcii a fost destul de ușoară. Am început prin lipirea componentelor montate la suprafață și apoi atașarea conectorului și regulatorului jackului cilindru. Apoi, am lipit în anteturile pinilor pentru componente precum driverele de motor și FireBeetle.

După ce lipirea a fost finalizată, am testat placa pentru scurtcircuit punând un multimetru în modul de măsurare a rezistenței și văzând dacă rezistența depășea o anumită cantitate. Placa a trecut, așa că am putut apoi să conectez fiecare componentă.

Pasul 4: Prezentare generală a programării

Am vrut ca codul pentru această placă să fie modular și ușor de utilizat. Aceasta însemna să aveți mai multe clase care gestionează funcții specifice, împreună cu o clasă mai mare de împachetare care combină cele mai mici.

Pasul 5: Intrări

Intrări
Intrări
Intrări
Intrări
Intrări
Intrări

Pentru gestionarea intrărilor, am creat o clasă numită „Hub_Inputs”, care permite hub-ului de acasă să comunice cu APDS9960, împreună cu crearea și gestionarea butoanelor și a interfețelor tactile capacitive. Conține următoarele funcții:

Butonul Creați

Obțineți dacă butonul este apăsat

Obțineți numărul de apăsări de butoane

Obțineți cel mai recent gest

Obțineți o valoare tactilă capacitivă

Butoanele sunt stocate ca o structură, cu trei atribute: is_pressed, numberPresses și pin. Fiecare buton, atunci când este creat, este atașat la o întrerupere. Când acea întrerupere este declanșată, rutina de întrerupere a serviciului (ISR) este trecut de indicatorul butonului (dat ca adresă de memorie a acestuia în matricea de butoane) și crește numărul de apăsări de butoane, împreună cu actualizarea valorii booleene is_pressed.

Valorile tactile capacitive sunt mult mai simple. Acestea sunt recuperate trecând pinul tactil la funcția touchRead ().

Cel mai recent gest este actualizat prin interogarea APDS9960 și verificarea dacă a fost detectat un gest nou și, dacă a fost detectat unul, setați variabila de gest privat la acel gest.

Pasul 6: ieșiri

Ieșiri
Ieșiri
Ieșiri
Ieșiri
Ieșiri
Ieșiri

Hubul inteligent pentru casă are mai multe moduri de a transmite informații și de a schimba luminile. Există pini care izbucnesc magistrala I2C, permițându-le utilizatorilor să conecteze un LCD. Până în prezent, este acceptată doar o dimensiune a ecranului LCD: 20 x 4. Prin utilizarea funcției „hub.display_message ()”, utilizatorii pot afișa mesaje pe ecranul LCD trecând într-un obiect șir.

Există, de asemenea, un antet pin pentru a conecta un șir de LED-uri analogice. Apelând funcția „hub.set_led_strip (r, g, b)”, se setează culoarea benzii.

Cele două motoare pas cu pas sunt acționate folosind o pereche de plăci de driver DRV8825. Am decis să folosesc biblioteca BasicStepper pentru a gestiona controlul motorului. Când placa este pornită, sunt create două obiecte pas cu pas și ambele motoare devin activate. Pentru pasul fiecărui motor, se utilizează funcția „hub.step_motor (motor_id, pași)”, unde id-ul motorului este fie 0, fie 1.

Pasul 7: Logare

Logare
Logare
Logare
Logare
Logare
Logare

Deoarece placa are mai mulți senzori, am dorit capacitatea de a colecta și înregistra date la nivel local.

Pentru a începe înregistrarea, se creează un fișier nou cu „hub.create_log (nume de fișier, antet)”, unde antetul este utilizat pentru a crea un rând de fișier CSV care denotă coloane. Prima coloană este întotdeauna o marcă de timp în formatul An Luna Lună Zi Ora: Min: Sec. Pentru a obține timpul, funcția hub.log_to_file () obține timpul cu funcția basic_functions.get_time (). Structura de timp tm este apoi transmisă prin referință în funcția de înregistrare, împreună cu datele și numele fișierului.

Pasul 8: Buzzer

Buzzer
Buzzer

La ce bun o placă IoT dacă nu puteți reda muzică? De aceea am inclus un buzzer cu o funcție de redare a sunetelor. Apelarea „hub.play_sounds (melodie, durată, lungime)” începe să redea o melodie, melodia fiind o serie de frecvențe de notă, durata ca o serie de durate ale notelor și lungimea ca număr de note.

Pasul 9: Integrări externe IoT

Integrări externe IoT
Integrări externe IoT
Integrări externe IoT
Integrări externe IoT
Integrări externe IoT
Integrări externe IoT

În prezent, hub-ul acceptă webhook-uri IFTTT. Acestea pot fi declanșate apelând funcția Hub_IoT.publish_webhook (url, date, eveniment, cheie) sau Hub_IoT.publish_webhook (url, date). Aceasta trimite o cerere POST la adresa URL dată cu acele date atașate, împreună cu un nume de eveniment, dacă este necesar. Pentru a configura un exemplu de integrare IFTTT, creați mai întâi un applet nou. Apoi selectați serviciul webhook care se declanșează la primirea unei cereri.

Apoi, apelați evenimentul „high_temp” și salvați-l. Apoi, selectați serviciul Gmail pentru partea „Acela” și alegeți opțiunea „Trimiteți-mi un e-mail”. În cadrul configurării serviciului, puneți „Temperatura este ridicată!” pentru subiect, apoi am pus „Temperatura măsurată de {{Value1}} la {{OccurredAt}}”, care arată temperatura măsurată și ora când a fost declanșat evenimentul.

După configurare, lipiți pur și simplu URL-ul webhook generat de IFTTT și introduceți „high_temp” în secțiunea eveniment.

Pasul 10: utilizare

Utilizare
Utilizare
Utilizare
Utilizare
Utilizare
Utilizare
Utilizare
Utilizare

Pentru a utiliza Smart Home Hub, pur și simplu apelați orice funcție necesară fie în setare (), fie în buclă (). Am pus deja exemple de apeluri funcționale, cum ar fi tipărirea orei curente și apelarea unui eveniment IFTTT.

Pasul 11: Planuri de viitor

Sistemul Smart Home Hub funcționează foarte bine pentru sarcini simple de automatizare a casei și colectare de date. Poate fi folosit pentru aproape orice, cum ar fi setarea culorii unei benzi cu LED-uri, monitorizarea temperaturii unei camere, verificarea luminii aprinse și o serie întreagă de alte proiecte potențiale. În viitor, aș dori să extind și mai mult funcționalitatea. Aceasta ar putea include adăugarea unui server web mai robust, găzduirea fișierelor locale și chiar Bluetooth sau mqtt.

Recomandat: