Inhoudsopgave:

ESP32 Smart Home Hub: 11 stappen
ESP32 Smart Home Hub: 11 stappen

Video: ESP32 Smart Home Hub: 11 stappen

Video: ESP32 Smart Home Hub: 11 stappen
Video: Делаем терминал умного дома из планшета 2024, September
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

Het creëren van een systeem dat grote hoeveelheden sensordata aankan, meerdere uitgangen heeft en verbinding maakt met internet of een lokaal netwerk kost veel tijd en moeite. Maar al te vaak worstelen mensen die hun eigen slimme thuisnetwerken willen maken met het vinden en samenstellen van aangepaste componenten tot een groter systeem. Daarom wilde ik een modulair en feature-rijk platform maken dat het gemakkelijk zou maken om IoT-verbonden sensoren en uitgangen te bouwen.

Dank aan DFRobot en PCBGOGO.com voor het sponsoren van dit project!

Ga voor meer diepgaande informatie naar de Github-repo:

Benodigdheden

  • DFRobot ESP32 FireBeetle

    www.dfrobot.com/product-1590.html

  • DHT22-sensor

    www.dfrobot.com/product-1102.html

  • APDS9960 Licht- en bewegingssensor

    www.dfrobot.com/product-1361.html

  • I2C 20x4 LCD-module

    www.dfrobot.com/product-590.html

  • Analoge RGB LED-strip

    www.dfrobot.com/product-1829.html

  • DRV8825 Stappenmotorstuurprogramma's
  • SD-kaartlezer
  • NEMA17 stappenmotoren

Stap 1: Functies:

Functies
Functies
Functies
Functies
Functies
Functies

Het belangrijkste kenmerk van dit bord is een ESP32 FireBeetle Development Board dat alle communicatie, sensormetingen en uitgangen afhandelt. Er zijn twee stappenmotordrivers die twee bipolaire stappenmotoren aansturen.

De I2C-bus is ook uitgebroken voor gebruik met componenten zoals de APDS9960 of een LCD. Voor het lezen van de temperatuur zijn er pinnen gebroken om verbinding te maken met een DHT22-sensor, evenals een fotoresistor voor het lezen van omgevingslichtniveaus.

Er is ondersteuning voor een analoge lichtstrip op het bord, die drie MOSFET's heeft om de LED-verlichting aan te sturen.

Stap 2: PCB

PCB
PCB
PCB
PCB
PCB
PCB
PCB
PCB

Ik begon het PCB-ontwerpproces door eerst een schema te maken in Eagle. Omdat ik geen ESP32 FireBeetle-bibliotheek kon vinden, heb ik in plaats daarvan twee pin 1x18 pin headers gebruikt. Vervolgens heb ik een stroombeheercircuit gemaakt dat 12v kan accepteren via een DC-cilinderaansluiting en dit kan converteren naar 5v voor het voeden van de sensoren en ESP32.

Nadat het schema was voltooid, ging ik verder met het ontwerpen van de PCB zelf.

Ik wist dat de DC-cilinderplug zich dicht bij de voorkant van het bord moest bevinden en dat de 100uF-stroomafvlakcondensatoren dicht bij de stroomingangen van de stappenmotorbesturing moesten zijn. Nadat alles was aangelegd, begon ik sporen te routeren.

Hoewel Oshpark PCB's van hoge kwaliteit maakt, zijn hun prijzen vrij hoog. Gelukkig maakt PCBGOGO.com ook geweldige PCB's tegen een betaalbare prijs. Ik kon tien PCB's kopen voor slechts $ 5, in plaats van $ 52 te betalen voor slechts drie borden van Oshpark.com.

Stap 3: Montage

samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst

Over het algemeen was het monteren van het bord vrij eenvoudig. Ik begon met het solderen van de op het oppervlak gemonteerde componenten en vervolgens het bevestigen van de barrel jack-connector en de regelaar. Vervolgens heb ik de pin-headers gesoldeerd voor componenten zoals de motordrivers en de FireBeetle.

Nadat het solderen was voltooid, testte ik het bord op kortsluiting door een multimeter in de weerstandsmeetmodus te zetten en te kijken of de weerstand een bepaald bedrag overschreed. Het bord is geslaagd, dus ik kon vervolgens elk onderdeel aansluiten.

Stap 4: Programmeeroverzicht

Ik wilde dat de code voor dit bord modulair en gebruiksvriendelijk zou zijn. Dit betekende dat er verschillende klassen waren die specifieke functies afhandelen, samen met een grotere wrapper-klasse die de kleinere combineert.

Stap 5: Ingangen

Ingangen
Ingangen
Ingangen
Ingangen
Ingangen
Ingangen

Voor het verwerken van invoer heb ik een klasse gemaakt met de naam "Hub_Inputs", waarmee de thuishub kan communiceren met de APDS9960, samen met het maken en beheren van knoppen en capacitieve aanraakinterfaces. Het bevat de volgende functies:

Knop maken

Krijgen als de knop wordt ingedrukt

Aantal keer drukken op de knop ophalen

Laatste gebaar ophalen

Capacitieve aanraakwaarde verkrijgen

De knoppen worden opgeslagen als een struct, met drie attributen: is_pressed, numberPresses en pin. Elke knop, wanneer deze is gemaakt, is gekoppeld aan een interrupt. Wanneer die onderbreking wordt geactiveerd, wordt de Interrupt Service Routine (ISR) doorgegeven aan de aanwijzer van die knop (gegeven als het geheugenadres ervan in de knoppenreeks) en verhoogt het aantal keer dat op de knop wordt gedrukt, samen met het bijwerken van de is_pressed Booleaanse waarde.

Capacitieve aanraakwaarden zijn veel eenvoudiger. Ze worden opgehaald door de touch-pin door te geven aan de touchRead()-functie.

Het laatste gebaar wordt bijgewerkt door de APDS9960 te pollen en te controleren of er een nieuw gebaar is gedetecteerd, en als er een is gedetecteerd, stelt u de privé-gebaarvariabele in op dat gebaar.

Stap 6: Uitgangen

Uitgangen
Uitgangen
Uitgangen
Uitgangen
Uitgangen
Uitgangen

De slimme thuishub biedt verschillende manieren om informatie uit te voeren en lichten te veranderen. Er zijn pinnen die de I2C-bus uitbreken, zodat gebruikers een LCD kunnen aansluiten. Tot nu toe wordt slechts één formaat LCD ondersteund: 20 x 4. Door de functie "hub.display_message()" te gebruiken, kunnen gebruikers berichten op het LCD-scherm weergeven door een stringobject door te geven.

Er is ook een pin-header om een reeks analoge LED's aan te sluiten. Door de functie "hub.set_led_strip(r, g, b)" aan te roepen, wordt de kleur van de strip ingesteld.

De twee stappenmotoren worden aangedreven met behulp van een paar DRV8825-driverkaarten. Ik besloot om de BasicStepper-bibliotheek te gebruiken om motorbesturing te regelen. Wanneer het bord wordt opgestart, worden twee stappenobjecten gemaakt en worden beide motoren ingeschakeld. Om elke motor te laten stappen, wordt de functie "hub.step_motor(motor_id, steps)" gebruikt, waarbij motor-id 0 of 1 is.

Stap 7: Loggen

Loggen
Loggen
Loggen
Loggen
Loggen
Loggen

Omdat het bord meerdere sensoren heeft, wilde ik de mogelijkheid hebben om lokaal gegevens te verzamelen en te loggen.

Om te beginnen met loggen, wordt een nieuw bestand gemaakt met "hub.create_log(filename, header)", waarbij de header wordt gebruikt om een CSV-bestandsrij te maken die kolommen aangeeft. De eerste kolom is altijd een tijdstempel in de indeling Jaar Maand Dag Uur:Min:Sec. Om de tijd te krijgen, haalt de functie hub.log_to_file() de tijd op met de functie basic_functions.get_time(). De tm-tijdstruct wordt vervolgens door verwijzing doorgegeven aan de logfunctie, samen met de gegevens en bestandsnaam.

Stap 8: Zoemer

Zoemer
Zoemer

Wat heb je aan een IoT-bord als je geen muziek kunt afspelen? Daarom heb ik een zoemer meegeleverd met een functie om geluiden af te spelen. Door "hub.play_sounds(melody, duration, length)" aan te roepen, wordt een nummer afgespeeld, waarbij de melodie een reeks nootfrequenties is, duur als een reeks nootduur en lengte als het aantal noten.

Stap 9: Externe IoT-integraties

Externe IoT-integraties
Externe IoT-integraties
Externe IoT-integraties
Externe IoT-integraties
Externe IoT-integraties
Externe IoT-integraties

De hub ondersteunt momenteel IFTTT-webhooks. Ze kunnen worden geactiveerd door de functie Hub_IoT.publish_webhook(url, data, event, key) of Hub_IoT.publish_webhook(url, data) aan te roepen. Dit stuurt een POST-verzoek naar de opgegeven URL met die gegevens als bijlage, samen met een gebeurtenisnaam indien nodig. Om een voorbeeld IFTTT-integratie in te stellen, maakt u eerst een nieuwe applet. Selecteer vervolgens de webhook-service die wordt geactiveerd wanneer een verzoek wordt ontvangen.

Roep vervolgens het evenement "high_temp" aan en sla het op. Selecteer vervolgens de Gmail-service voor het gedeelte "Dat" en kies de optie "Stuur een e-mail naar mezelf". Zet in de instellingen voor de service "De temperatuur is hoog!" voor het onderwerp, en vervolgens plaatste ik "Gemeten temperatuur van {{Value1}} op {{OccurredAt}}", die de gemeten temperatuur en het tijdstip waarop de gebeurtenis werd geactiveerd, toont.

Nadat u het hebt ingesteld, plakt u eenvoudig de webhook-URL die is gegenereerd door IFTTT en plaatst u "high_temp" in het evenementgedeelte.

Stap 10: Gebruik

Gebruik
Gebruik
Gebruik
Gebruik
Gebruik
Gebruik
Gebruik
Gebruik

Om de Smart Home Hub te gebruiken, roept u eenvoudig alle benodigde functies aan in setup() of loop(). Ik heb al voorbeeldfunctie-aanroepen geplaatst, zoals het afdrukken van de huidige tijd en het aanroepen van een IFTTT-gebeurtenis.

Stap 11: Toekomstplannen

Het Smart Home Hub-systeem werkt heel goed voor eenvoudige domotica- en gegevensverzamelingstaken. Het kan voor bijna alles worden gebruikt, zoals het instellen van de kleur van een LED-strip, het bewaken van de temperatuur van een kamer, controleren of er een licht aan is en tal van andere potentiële projecten. In de toekomst wil ik de functionaliteit nog verder uitbreiden. Dit kan het toevoegen van een robuustere webserver, lokale bestandshosting en zelfs Bluetooth of mqtt omvatten.

Aanbevolen: