Inhoudsopgave:
- Benodigdheden
- Stap 1: Functies:
- Stap 2: PCB
- Stap 3: Montage
- Stap 4: Programmeeroverzicht
- Stap 5: Ingangen
- Stap 6: Uitgangen
- Stap 7: Loggen
- Stap 8: Zoemer
- Stap 9: Externe IoT-integraties
- Stap 10: Gebruik
- Stap 11: Toekomstplannen
Video: ESP32 Smart Home Hub: 11 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
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:
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
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
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
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
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
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
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
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
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:
Smart Home van Raspberry Pi: 5 stappen (met afbeeldingen)
Smart Home van Raspberry Pi: er zijn al verschillende producten die uw flat slimmer maken, maar de meeste zijn eigen oplossingen. Maar waarom heb je een internetverbinding nodig om een lamp te schakelen met je smartphone? Dat was voor mij een reden om mijn eigen Smar te bouwen
Smart Home op afstand: 5 stappen
Remote Smart Home: Materiaal: dunne gelamineerde hout platen. 1 x grondplaat met een diameter van 1 cmkleine nagels2 x breadbords plakbandveel kabels met diameter 0.3 cmveel jumper kabels gereedschap:boormachinelijmpistoolsoldeerboutschroevendra
Smart Home maken met behulp van Arduino-besturingsrelaismodule - Ideeën voor domotica: 15 stappen (met afbeeldingen)
Smart Home maken met behulp van Arduino-besturingsrelaismodule | Ideeën voor domotica: in dit domotica-project zullen we een smart home-relaismodule ontwerpen die 5 huishoudelijke apparaten kan bedienen. Deze relaismodule kan worden bediend vanaf mobiel of smartphone, IR-afstandsbediening of tv-afstandsbediening, handmatige schakelaar. Dit slimme relais kan ook de r
Smart Home met Arduino: 11 stappen (met afbeeldingen)
Smart Home met Arduino: Hallo. Ik zal je laten zien hoe je je eigen slimme huis kunt bouwen. Het toont de temperatuur zowel binnen als buiten, of het raam open of gesloten is, toont wanneer het regent en alarmeert wanneer de PIR-sensor beweging detecteert. Ik heb de applicatie op Android gemaakt om
Aan de slag met ESP32 - ESP32-kaarten installeren in Arduino IDE - ESP32-knippercode: 3 stappen
Aan de slag met ESP32 | ESP32-kaarten installeren in Arduino IDE | ESP32-knippercode: in deze instructie zullen we zien hoe we met esp32 kunnen werken en hoe we esp32-kaarten in Arduino IDE kunnen installeren en we zullen esp 32 programmeren om knippercode uit te voeren met behulp van arduino ide