Inhaltsverzeichnis:

ESP32 Smart Home Hub - Gunook
ESP32 Smart Home Hub - Gunook

Video: ESP32 Smart Home Hub - Gunook

Video: ESP32 Smart Home Hub - Gunook
Video: ESP32 HomeKit Tutorial | HomeSpan 2024, November
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

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

Merkmale
Merkmale
Merkmale
Merkmale
Merkmale
Merkmale

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

PCB
PCB
PCB
PCB
PCB
PCB
PCB
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

Montage
Montage
Montage
Montage
Montage
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

Eingänge
Eingänge
Eingänge
Eingänge
Eingänge
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

Ausgänge
Ausgänge
Ausgänge
Ausgänge
Ausgänge
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

Protokollierung
Protokollierung
Protokollierung
Protokollierung
Protokollierung
Protokollierung

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

Summer
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

Externe IoT-Integrationen
Externe IoT-Integrationen
Externe IoT-Integrationen
Externe IoT-Integrationen
Externe IoT-Integrationen
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

Verwendungszweck
Verwendungszweck
Verwendungszweck
Verwendungszweck
Verwendungszweck
Verwendungszweck
Verwendungszweck
Verwendungszweck

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: