Innholdsfortegnelse:

ESP32 Smart Home Hub: 11 trinn
ESP32 Smart Home Hub: 11 trinn

Video: ESP32 Smart Home Hub: 11 trinn

Video: ESP32 Smart Home Hub: 11 trinn
Video: Программирование МК ESP32 Урок 11 SPI Дисплей TFT 240×320 Часть 1 2024, Juni
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

Å lage et system som kan håndtere store mengder sensordata, ha flere utganger og koble til internett eller et lokalt nettverk tar lang tid og store anstrengelser. Altfor ofte sliter folk som ønsker å lage sine egne smarte hjemmenettverk med å kunne finne og sette sammen tilpassede komponenter til et større system. Derfor ønsket jeg å lage en modulær og funksjonsrik plattform som ville gjøre det enkelt å konstruere IoT-tilkoblede sensorer og utganger.

Takk til DFRobot og PCBGOGO.com for sponsing av dette prosjektet!

For mer grundig informasjon, besøk Github-repoen:

Rekvisita

  • DFRobot ESP32 FireBeetle

    www.dfrobot.com/product-1590.html

  • DHT22 sensor

    www.dfrobot.com/product-1102.html

  • APDS9960 lys- og bevegelsessensor

    www.dfrobot.com/product-1361.html

  • I2C 20x4 LCD -modul

    www.dfrobot.com/product-590.html

  • Analog RGB LED -stripe

    www.dfrobot.com/product-1829.html

  • DRV8825 trinnmotordrivere
  • SD -kortleser
  • NEMA17 Stepper Motors

Trinn 1: Funksjoner

Funksjoner
Funksjoner
Funksjoner
Funksjoner
Funksjoner
Funksjoner

Hovedtrekk ved dette kortet er et ESP32 FireBeetle Development Board som håndterer all kommunikasjon, sensoravlesninger og utganger. Det er to trinnmotordrivere som styrer to bipolare trinnmotorer.

I2C -bussen er også brutt ut for bruk med komponenter som APDS9960 eller en LCD. For å lese temperaturen, er det pinner ødelagt for å koble til en DHT22 -sensor, samt en fotoresistor for å lese omgivelseslysnivåer.

Det er støtte for en analog lysstrimmel på brettet, som har tre MOSFET -er på for å drive LED -lysene.

Trinn 2: PCB

PCB
PCB
PCB
PCB
PCB
PCB
PCB
PCB

Jeg begynte PCB -designprosessen ved først å lage en skjema i Eagle. Siden jeg ikke klarte å finne et ESP32 FireBeetle -bibliotek, brukte jeg bare to pinners 1x18 pinnehoder i stedet. Deretter opprettet jeg en strømstyringskrets som kunne godta 12v gjennom en DC fatkontakt og konvertere den til 5v for å drive sensorene og ESP32.

Etter at skjematikken var fullført, gikk jeg over til å designe selve kretskortet.

Jeg visste at DC -fatpluggen måtte være nær fronten av brettet, og 100uF strømforsyningens utjevningskondensatorer måtte være i nærheten av trinnmotorens driverinnganger. Etter at alt var lagt ut begynte jeg å rute spor.

Selv om Oshpark lager PCB av høy kvalitet, er prisene ganske høye. Heldigvis lager PCBGOGO.com også gode PCB -er til en rimelig pris. Jeg klarte å kjøpe ti PCB for bare $ 5, i stedet for å betale $ 52 for bare tre brett fra Oshpark.com.

Trinn 3: Montering

montering
montering
montering
montering
montering
montering

Totalt sett var det ganske enkelt å montere brettet. Jeg begynte med å lodde de overflatemonterte komponentene og deretter feste fatkontakten og regulatoren. Deretter loddet jeg inn pinnehodene for komponenter som motordrivere og FireBeetle.

Etter at lodding var fullført, testet jeg brettet for kortslutning ved å sette et multimeter i motstandsmåling og se om motstanden var over en viss mengde. Brettet passerte, så jeg kunne deretter koble til hver komponent.

Trinn 4: Oversikt over programmering

Jeg ønsket at koden for dette kortet skulle være modulær og enkel å bruke. Dette betydde å ha flere klasser som håndterer spesifikke funksjoner, sammen med en større innpakningsklasse som kombinerer de mindre.

Trinn 5: Innganger

Innganger
Innganger
Innganger
Innganger
Innganger
Innganger

For håndtering av innganger opprettet jeg en klasse kalt "Hub_Inputs", som lar hjemmeknutepunktet kommunisere med APDS9960, sammen med å lage og administrere knapper og kapasitive berøringsgrensesnitt. Den inneholder følgende funksjoner:

Opprett -knapp

Få hvis du trykker på knappen

Få antall knappetrykk

Få siste gest

Få kapasitiv berøringsverdi

Knappene lagres som en struktur, med tre attributter: is_pressed, numberPresses og pin. Hver knapp, når den er opprettet, er knyttet til et avbrudd. Når det avbruddet utløses, blir Interrupt Service Routine (ISR) passert denne knappens peker (gitt som minneadressen til det i knappearrayet) og øker antallet knappetrykk, sammen med oppdatering av is_pressed boolsk verdi.

Kapasitive berøringsverdier er mye enklere. De hentes ved å føre berøringsnålen til touchRead () -funksjonen.

Den siste gesten oppdateres ved å avstemme APDS9960 og kontrollere om noen ny gest er blitt oppdaget, og hvis en har blitt oppdaget, setter du den private gestvariabelen til den bevegelsen.

Trinn 6: Utganger

Utganger
Utganger
Utganger
Utganger
Utganger
Utganger

Smart hjemme -huben har flere måter å sende informasjon og bytte lys på. Det er pinner som bryter ut I2C -bussen, slik at brukerne kan koble til en LCD. Hittil støttes bare én størrelse på LCD -skjermen: 20 x 4. Ved å bruke funksjonen “hub.display_message ()” kan brukere vise meldinger på LCD -skjermen ved å sende inn et strengobjekt.

Det er også en pin header for å koble en streng med analoge lysdioder. Ved å kalle funksjonen “hub.set_led_strip (r, g, b)”, angir fargen på stripen.

De to trinnmotorene drives med et par DRV8825 -driverkort. Jeg bestemte meg for å bruke BasicStepper -biblioteket til å håndtere motorstyring. Når brettet startes opp, opprettes to trinnobjekter, og begge motorene aktiveres. For å trinnvise hver motor brukes funksjonen “hub.step_motor (motor_id, trinn)”, der motor -ID er enten 0 eller 1.

Trinn 7: Logging

Hogst
Hogst
Hogst
Hogst
Hogst
Hogst

Fordi brettet har flere sensorer, ønsket jeg muligheten til lokalt å samle inn og logge data.

For å begynne å logge, opprettes en ny fil med “hub.create_log (filnavn, topptekst)”, der header brukes til å lage en CSV -filrad som angir kolonner. Den første kolonnen er alltid et tidsstempel i År Måned Dagtime: Min: Sek -format. For å få tid, får hub.log_to_file () -funksjonen tiden med funksjonen basic_functions.get_time (). Tm -tidsstrukturen sendes deretter ved referanse til loggfunksjonen, sammen med data og filnavn.

Trinn 8: summer

Summer
Summer

Hva nytter et IoT -bord hvis du ikke kan spille musikk? Derfor inkluderte jeg en summer med en funksjon for å spille lyder. Å kalle “hub.play_sounds (melodi, varighet, lengde)” begynner å spille en sang, med melodi som en rekke notefrekvenser, varighet som en rekke notenes varighet og lengde som antall notater.

Trinn 9: Eksterne IoT -integrasjoner

Eksterne IoT -integrasjoner
Eksterne IoT -integrasjoner
Eksterne IoT -integrasjoner
Eksterne IoT -integrasjoner
Eksterne IoT -integrasjoner
Eksterne IoT -integrasjoner

Navet støtter for tiden IFTTT webhooks. De kan utløses ved å ringe funksjonen Hub_IoT.publish_webhook (url, data, hendelse, nøkkel) eller Hub_IoT.publish_webhook (url, data). Dette sender en POST -forespørsel til den gitte URL -en med dataene vedlagt, sammen med et hendelsesnavn om nødvendig. For å sette opp et eksempel på IFTTT -integrasjon, må du først opprette en ny applet. Velg deretter webhook -tjenesten som utløses når en forespørsel mottas.

Deretter kaller du hendelsen "høy_temp" og lagrer den. Velg deretter Gmail -tjenesten for delen "Den", og velg "Send en e -post til meg selv". I oppsettet for tjenesten, sett "Temperaturen er høy!" for motivet, og deretter satte jeg "Målt temperatur på {{Value1}} på {{OccuredAt}}", som viser den målte temperaturen og tidspunktet da hendelsen ble utløst.

Etter at du har konfigurert det, limer du bare inn webhook -URL -en som er generert av IFTTT, og setter "high_temp" i hendelsesdelen.

Trinn 10: Bruk

Bruk
Bruk
Bruk
Bruk
Bruk
Bruk
Bruk
Bruk

For å bruke Smart Home Hub, bare ring de nødvendige funksjonene i enten setup () eller loop (). Jeg har allerede lagt eksempel på funksjonsanrop, for eksempel å skrive ut nåværende tidspunkt og ringe en IFTTT -hendelse.

Trinn 11: Fremtidsplaner

Smart Home Hub -systemet fungerer veldig bra for enkle hjemmeautomatisering og datainnsamling. Den kan brukes til nesten alt, for eksempel å sette fargen på en LED -stripe, overvåke temperaturen i et rom, kontrollere om et lys tennes og en rekke andre potensielle prosjekter. I fremtiden vil jeg utvide funksjonaliteten enda mer. Dette kan inkludere å legge til en mer robust webserver, lokal filvert og til og med Bluetooth eller mqtt.

Anbefalt: