Inhaltsverzeichnis:
- Lieferungen
- Schritt 1: Funktionen
- Schritt 2: PCB
- Schritt 3: Montage
- Schritt 4: Programmierübersicht
- Schritt 5: Eingänge
- Schritt 6: Ausgänge
- Schritt 7: Protokollieren
- Schritt 8: Summer
- Schritt 9: Externe IoT-Integrationen
- Schritt 10: Verwendung
- Schritt 11: Zukunftspläne
Video: ESP32 Smart Home Hub - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
Ein System zu erstellen, das große Mengen an Sensordaten verarbeiten kann, mehrere Ausgänge hat und eine Verbindung zum Internet oder einem lokalen Netzwerk herstellt, erfordert viel Zeit und viel Aufwand. Allzu oft haben Menschen, die ihr eigenes Smart-Home-Netzwerk aufbauen möchten, Schwierigkeiten damit, benutzerdefinierte Komponenten zu finden und zu einem größeren System zusammenzubauen. Aus diesem Grund wollte ich eine modulare und funktionsreiche Plattform entwickeln, die es einfach macht, IoT-verbundene Sensoren und Ausgänge zu konstruieren.
Danke an DFRobot und PCBGOGO.com für das Sponsoring dieses Projekts!
Ausführlichere Informationen finden Sie im Github-Repository:
Lieferungen
-
DFRobot ESP32 FireBeetle
www.dfrobot.com/product-1590.html
-
DHT22-Sensor
www.dfrobot.com/product-1102.html
-
APDS9960 Licht- und Gestensensor
www.dfrobot.com/product-1361.html
-
I2C 20x4 LCD-Modul
www.dfrobot.com/product-590.html
-
Analoger RGB-LED-Streifen
www.dfrobot.com/product-1829.html
- DRV8825 Schrittmotortreiber
- SD-Kartenleser
- NEMA17 Schrittmotoren
Schritt 1: Funktionen
Das Hauptmerkmal dieses Boards ist ein ESP32 FireBeetle Development Board, das die gesamte Kommunikation, Sensormesswerte und Ausgaben verarbeitet. Es gibt zwei Schrittmotortreiber, die zwei bipolare Schrittmotoren steuern.
Der I2C-Bus ist auch für die Verwendung mit Komponenten wie dem APDS9960 oder einem LCD ausgebrochen. Zum Ablesen der Temperatur gibt es unterbrochene Pins zum Anschluss an einen DHT22-Sensor sowie einen Fotowiderstand zum Ablesen der Umgebungslichtstärke.
Auf der Platine wird ein analoger Lichtstreifen unterstützt, auf dem drei MOSFETs zum Ansteuern der LED-Leuchten vorhanden sind.
Schritt 2: PCB
Ich begann den PCB-Designprozess, indem ich zuerst einen Schaltplan in Eagle erstellte. Da ich keine ESP32 FireBeetle-Bibliothek finden konnte, habe ich stattdessen einfach zwei Pin 1x18-Pin-Header verwendet. Dann habe ich eine Energieverwaltungsschaltung erstellt, die 12 V über eine DC-Barrel-Buchse aufnehmen und in 5 V umwandeln kann, um die Sensoren und ESP32 mit Strom zu versorgen.
Nachdem der Schaltplan fertig war, ging ich zum Design der Platine selbst über.
Ich wusste, dass sich der DC-Fassstecker in der Nähe der Vorderseite der Platine befinden musste und die 100uF-Stromversorgungs-Glättungskondensatoren in der Nähe der Stromeingänge des Schrittmotortreibers sein mussten. Nachdem alles angelegt war, begann ich, Spuren zu routen.
Obwohl Oshpark hochwertige Leiterplatten herstellt, sind ihre Preise recht hoch. Glücklicherweise stellt PCBGOGO.com auch großartige PCBs zu einem erschwinglichen Preis her. Ich konnte zehn Leiterplatten für nur 5 US-Dollar kaufen, anstatt 52 US-Dollar für nur drei Platinen von Oshpark.com zu bezahlen.
Schritt 3: Montage
Insgesamt war der Zusammenbau des Boards recht einfach. Ich begann mit dem Löten der oberflächenmontierten Komponenten und dem Anbringen des Barrel-Klinkensteckers und des Reglers. Als nächstes lötete ich die Stiftleisten für Komponenten wie die Motortreiber und den FireBeetle ein.
Nachdem das Löten abgeschlossen war, testete ich die Platine auf Kurzschluss, indem ich ein Multimeter in den Widerstandsmessmodus versetzte und sah, ob der Widerstand über einem bestimmten Betrag lag. Die Platine hat bestanden, sodass ich dann jede Komponente einstecken konnte.
Schritt 4: Programmierübersicht
Ich wollte, dass der Code für dieses Board modular und einfach zu verwenden ist. Dies bedeutete, dass es mehrere Klassen gab, die bestimmte Funktionen handhaben, zusammen mit einer größeren Wrapper-Klasse, die die kleineren kombiniert.
Schritt 5: Eingänge
Für die Handhabung von Eingaben habe ich eine Klasse namens „Hub_Inputs“erstellt, die es dem Home-Hub ermöglicht, mit dem APDS9960 zu kommunizieren, sowie Schaltflächen und kapazitive Touch-Schnittstellen zu erstellen und zu verwalten. Es enthält folgende Funktionen:
Schaltfläche erstellen
Holen Sie sich, wenn die Taste gedrückt wird
Holen Sie sich die Anzahl der Tastendrücke
Holen Sie sich die neueste Geste
Holen Sie sich kapazitiven Touch-Wert
Die Schaltflächen werden als Struktur mit drei Attributen gespeichert: is_pressed, numberPresses und pin. Jede Schaltfläche wird, wenn sie erstellt wird, an einen Interrupt angehängt. Wenn dieser Interrupt ausgelöst wird, wird der Interrupt Service Routine (ISR) der Zeiger dieser Schaltfläche übergeben (als dessen Speicheradresse im Schaltflächen-Array angegeben) und erhöht die Anzahl der Tastendrücke zusammen mit dem Aktualisieren des booleschen is_pressed-Werts.
Kapazitive Touch-Werte sind viel einfacher. Sie werden abgerufen, indem der Touch-Pin an die Funktion touchRead() übergeben wird.
Die neueste Geste wird aktualisiert, indem der APDS9960 abgefragt wird und überprüft wird, ob eine neue Geste erkannt wurde. Wenn eine neue Geste erkannt wurde, setzen Sie die private Gestenvariable auf diese Geste.
Schritt 6: Ausgänge
Der Smart Home Hub bietet mehrere Möglichkeiten, Informationen auszugeben und Lichter zu ändern. Es gibt Pins, die den I2C-Bus durchbrechen, sodass Benutzer ein LCD anschließen können. Bisher wird nur eine LCD-Größe unterstützt: 20 x 4. Mit der Funktion „hub.display_message()“können Benutzer Meldungen auf dem LCD anzeigen, indem sie ein String-Objekt übergeben.
Es gibt auch eine Stiftleiste zum Anschließen einer Reihe von analogen LEDs. Der Aufruf der Funktion „hub.set_led_strip(r, g, b)“setzt die Farbe des Streifens.
Die beiden Schrittmotoren werden über ein Paar DRV8825-Treiberplatinen angetrieben. Ich entschied mich, die BasicStepper-Bibliothek zu verwenden, um die Motorsteuerung zu handhaben. Beim Hochfahren des Boards werden zwei Stepper-Objekte erstellt und beide Motoren werden aktiviert. Um jeden Motor zu schalten, wird die Funktion „hub.step_motor(motor_id, steps)“verwendet, wobei die Motor-ID entweder 0 oder 1 ist.
Schritt 7: Protokollieren
Da das Board über mehrere Sensoren verfügt, wollte ich die Möglichkeit haben, Daten lokal zu sammeln und zu protokollieren.
Um die Protokollierung zu starten, wird eine neue Datei mit „hub.create_log(filename, header)“erstellt, wobei header verwendet wird, um eine CSV-Dateizeile zu erstellen, die Spalten bezeichnet. Die erste Spalte ist immer ein Zeitstempel im Format Jahr Monat Tag Stunde:Min:Sek. Um die Zeit abzurufen, ruft die Funktion hub.log_to_file() die Zeit mit der Funktion basic_functions.get_time() ab. Die tm time-Struktur wird dann zusammen mit den Daten und dem Dateinamen als Referenz an die Protokollierungsfunktion übergeben.
Schritt 8: Summer
Was nützt ein IoT-Board, wenn Sie keine Musik abspielen können? Deshalb habe ich einen Summer mit einer Funktion zum Abspielen von Tönen eingebaut. Der Aufruf von „hub.play_sounds(melodie, Dauer, Länge)“beginnt mit der Wiedergabe eines Songs, wobei Melodie ein Array von Notenfrequenzen, Dauer als Array von Notendauern und Länge als Anzahl der Noten ist.
Schritt 9: Externe IoT-Integrationen
Der Hub unterstützt derzeit IFTTT-Webhooks. Sie können durch Aufrufen der Funktion Hub_IoT.publish_webhook(url, data, event, key) oder Hub_IoT.publish_webhook(url, data) ausgelöst werden. Dadurch wird eine POST-Anfrage an die angegebene URL gesendet, an die diese Daten angehängt sind, zusammen mit einem Ereignisnamen, falls erforderlich. Um eine IFTTT-Beispielintegration einzurichten, erstellen Sie zunächst ein neues Applet. Wählen Sie dann den Webhook-Dienst aus, der ausgelöst wird, wenn eine Anfrage empfangen wird.
Rufen Sie als nächstes das Ereignis „high_temp“auf und speichern Sie es. Wählen Sie dann den Gmail-Dienst für den Teil "Das" aus und wählen Sie die Option "E-Mail an mich selbst senden". Geben Sie im Setup für den Dienst „Die Temperatur ist hoch!“ein. für das Thema, und dann setze ich „Measured temperature of {{Value1}} at {{OccurredAt}}“, was die gemessene Temperatur und den Zeitpunkt des Auslösens des Ereignisses anzeigt.
Fügen Sie nach der Einrichtung einfach die von IFTTT generierte Webhook-URL ein und geben Sie "high_temp" in den Ereignisabschnitt ein.
Schritt 10: Verwendung
Um den Smart Home Hub zu verwenden, rufen Sie einfach alle benötigten Funktionen in setup() oder loop() auf. Ich habe bereits Beispielfunktionsaufrufe gesetzt, wie das Drucken der aktuellen Uhrzeit und das Aufrufen eines IFTTT-Ereignisses.
Schritt 11: Zukunftspläne
Das Smart Home Hub-System eignet sich sehr gut für einfache Heimautomatisierungs- und Datenerfassungsaufgaben. Es kann für fast alles verwendet werden, z. B. zum Einstellen der Farbe eines LED-Streifens, zum Überwachen der Temperatur eines Raums, zum Überprüfen, ob ein Licht an ist, und für eine ganze Reihe anderer potenzieller Projekte. In Zukunft möchte ich die Funktionalität noch weiter ausbauen. Dies könnte das Hinzufügen eines robusteren Webservers, lokales Dateihosting und sogar Bluetooth oder mqtt umfassen.
Empfohlen:
Smart Home mit Arduino MKR1000 und M.I.T. Android-App: 4 Schritte
Smart Home mit Arduino MKR1000 und M.I.T. Android App: In diesem Tutorial beschreibe ich, wie Sie mit wenigen Komponenten Ihr Smart Home verbessern können. (Massachusetts Institu
Home-Erinnerung: 5 Schritte
Heimerinnerung: Dieses Projekt kann Ihre Familie daran erinnern, dass Sie zu Hause sind, wenn sie mit Hausarbeit oder anderen Dingen beschäftigt ist. Der Grund, warum ich diese Erinnerung erstelle, ist, dass meine Mutter jeden Tag, wenn ich von der Schule nach Hause komme, normalerweise kocht und sie nicht hören konnte, dass ich b
Smart Home: 10 Schritte
Smart Home: Diese Smart Home-Anwendung schaltet das Licht ein, in diesem Fall die LED, wenn es dunkel ist und eine Bewegung erkannt wird. Es hilft, wenn der Bereich dunkel ist, sodass Benutzer den Schalter für die Lichter nicht finden müssen, was im Dunkeln schwierig sein kann. Außerdem ist dies ein
RockBand Hub für PC-Nutzung nachrüsten (ohne externe Stromversorgung): 4 Schritte
RockBand Hub für PC-Nutzung nachrüsten (ohne externe Stromversorgung): Okay, auf der Suche nach einem preiswerten USB-Gamepad bin ich in einen GameStop gewandert Hub mit Netzteil für 2 Dollar. Nun, das gibt mir tatsächlich zwei
So erstellen Sie einen USB-Hub-Kabel-Organizer – wikiHow
Wie man einen USB-Hub-Kabel-Organizer herstellt: Ich bin ein totaler Gadgetophiler und in letzter Zeit sind die Kabel um meinen Computer ein wenig außer Kontrolle geraten. Außerdem habe ich festgestellt, dass sechs USB-Ports einfach nicht ausreichen! In dem Bemühen, das Durcheinander zu reduzieren und den alten Computertisch aufzupeppen, habe ich