Der ESP8266 als nativer HomeKit Kontaktsensor

von cooper.bin
veröffentlicht am 19.03.2024 aktualisiert am 19.03.2024

Heute habe ich ein natives ESP8266 HomeKit Zubehör für euch - einen Kontaktsensor. Der Kontaktsensor lässt sich direkt und ohne weitere Hardware oder Software in Apples HomeKit integrieren. Umsetzen werden wir den Kontaktsensor in diesem Tutorial mit einem ESP8266 D1 Mini. Aber auch der ESP01s wäre hier eine noch kleinere Option die funktioniert.

Der Kontaktsensor besteht in erster Linie aus einem einzigen Taster. Wie auch in meinen anderen nativen HomeKit Tutorials mit dem ESP8266 lässt sich der Taster durch alles ersetzen was man in der Arduino IDE eben implementieren kann. Euch sind hier wie immer kaum Grenzen gesetzt.

Zum Kapitel springen Kontaktsensor? Was genau?

Der Kontaktsensor, den wir in diesem Tutorial implementieren, kann in HomeKit verschiedene Formen annehmen:

  1. Kontaktsensor
  2. Fenster
  3. Garagentor
  4. Jalousie
  5. Tür

Ein Kontaktsensor kennt nur zwei Zustände: True oder False. Der Sensor repräsentiert mit diesem binären Signal ob eine der von Punkt 1. - 5. genannten Dinge geöffnet oder geschlossen ist. Ich persönlich habe einen solchen Sensor am Schwebetüren-Kleiderschrank. Sobald die Türe aufgeschoben wird, wird durch eine Automation eine Beleuchtung auf den Kleiderschrank gesteuert. Es gibt eine ganze Reihe an nativen HomeKit Kontaktsensoren. Diese beginnen preislich ab ca. 30€. Mit einer DIY Lösungen kommen wir auf rund 6€.

Zum Kapitel springen Hardware

In der Wahl der Hardware seid ihr realtiv freigestellt. Primär braucht man natürlich ein Board, auf welchem die passende Software läuft. Hier mal einige Boards die für dieses Tutorial in Frage kommen würden:

Grundätzlich lässt sich sagen, dass im Grunde genommen jedes ESP8266 basierte Board genutzt werden kann. In diesem Tutorial verwende ich einen ESP8266 D1 Mini.

Dazu braucht man natürlich noch einen Trigger für den Sensor. Dieser kann theoretisch auch 100% softwarebasierz sein. Beispielsweise könnte das Signal des Sensors via GET-Parameter ausgelesen und an HomeKit übertragen werden. Das kann für manche Anwendungen durchaus Sinn machen, jedoch kann man natürlich auch genauso gut einen physischen Sensor verwenden, der am ESP8266 ausgelsen wird und dadruch dann an HomeKit übertragen wird. Auf Youtube findest du ein Video zum Thema ESP8266 einfache Sensoren auslesen.

Im Klartext bedeutet das aber, du kannst die veschiedensten Arten von Sensoren verwenden. Hauptsache am Ende hast du / machst du ein binäres Signal daraus, sodass HomeKit dieses für den Kontaktsensor auswerten kann. Als Sensoren wären hier sinnvoll:

Zum Kapitel springen Bibliotheken installieren

Um den bereitgestellten Programmcode verwenden zu können, muss eine Bibliothek innerhalb der Arduino IDE installiert werden. Diese enthält bereits vordefinierte Funktionen und Methoden, die den Umgang mit HomeKit zu erleichtern. Die Bibliothken kann direkt über die Arduino IDE installiert werden. Navigiert dazu auf folgendes Menü innerhlab der Arduino IDE:

Arduino IDE
    └───Werkzeuge
        └───Bibliotheken verwalten ...

Die Bibliothek trägt den Namen "HomeKit-ESP8266" und ist von Mixiaoxiao auf Github.

Arduino IDE HomeKit-ESP8266 Mixiaoxiao Bibliothek ><

Zum Kapitel springen Verdrahtung

Hier in meinem vorbereiteten Programmcode funktioniert der Kontaktsensor mit nur einem Taster. Der Taster ist mit GPIO0 - also Pin D3 und GND.
Es könnte statt dem Pin D3 auch der Pin D4 verwendet werden. Nur dann leuchtet bei Betätigung auch die blaue LED am D1 Mini ( in meinem Fall ). Das kann je nach verwendetem Board natürlich auch anders sein.

// GPIO 0 = D3
// GPIO 2 = D4
byte inputPin = 0; 

Wichtig zu wissen ist, dass die Kontaktsensoren meistens NC-Schalter sind, also sind sie im Ruhezustand geschlossen und öffnen bei Betätigung. Das ist auch der Grund, warum wir einen GPIO mit Pull-Up Widerstand verwenden. Wenn der Schalter nicht betätigt ist, ist das Signal HIGH - wenn wir den Schalter betätigen ist das Signal LOW.

Zum Kapitel springen Programmcode

Der Code besteht aus drei Dateien, diese drei Dateien habe ich einem ZIP-Archiv gepackt. Das Archiv könnt ihr euch direkt über makesmart downloaden:

Die Dateistruktur innerhalb des Archivs sieht wie folgt aus:

/makesmart-homekit-contact-sensor.zip
├── makesmart_homekit_contact_sensor.ino
├── my_accessory.c
└── wifi_info.h

Ihr müsst lediglich die Datei mit dem Namen makesmart_homekit_contact_sensor.ino mit einem Doppelklick öffnen. Die anderen zwei Dateien werden dann automatisch innerhalb der Arduino IDE geladen.

Zum Kapitel springen makesmart_homekit_contact_sensor.ino

Diese Datei enthält den eigentlichen Code. Was passiert wann? Welches Signal ist das Sensorsignal, welches an HomeKit gesendet wird?

void setup() {
  Serial.begin(115200);
  wifi_connect();
  //homekit_storage_reset();
  my_homekit_setup();
  pinMode(inputPin, INPUT); 
}

Zum Kapitel springen wifi_info.h

Diese Datei enthält die Daten für die WLAN-Verbindung innerhalb eures Netzwerkes. Was ihr auf jeden Fall anpassen müsst, sind die WLAN Daten. Dazu benötigt ihr nur die folgenden beiden Zeilen in der Datei wifi_info.h:

const char *ssid = "SSID";
const char *password = "PSK";

Zum Kapitel springen my_accessory.c

Diese Datei enthält die Definitionen des Kontaktsensors für HomeKit. Solltet ihr genau diesen Kontaktsensor benötigen, müsst ihr in dieser Datei eigentlich nichts anpassen.

Zum Kapitel springen Programm hochladen

Nach diesen Informationen könnt ihr das Programm schon kompilieren und auf den ESP8266 laden. Die einzige Änderung die ihr machen solltet ist, die Taktrate des ESP8266 von 80MHz auf 160MHz zu stellen.

Die Taktrate kann einfach über die Einstellungen geändert werden. Geht dazu innerhalb der Arduino IDE auf den folgenden Pfad und passt die Taktrate dementsprechend an:

Arduino IDE
    └───Werkzeuge
        └───CPU Frequency: 160MHz

Zum Kapitel springen Pairing mit Apple Home

  1. Nach dem erfolgreichen Upload kann der ESP8266 wie gewohnt zu HomeKit hinzugefügt werden. ( Gerät hinzufügen / + oben rechts )
  2. Gehe auf den Punkt Weitere Optionen ... und warte, bis dein ESP8266 gefunden wird
  3. Der Pairing-Code lautet: 123-45-678
  4. Das Pairing wird anschließend durchgeführt

Die Themen smarthome und arduino-ide gibt es auch auf dem makesmart Discord-Server! Trete bei, um dich auszutauschen.

mehr erfahren

Teile diesen Beitrag



Diese Artikel könnten dich auch interessieren

ESP8266 D1 Mini programmieren - Der Start mit der Arduino IDE

Erfahre, wie du den ESP8266 D1 Mini mit der Arduino IDE programmierst. Dank den kostenlosen Entwicklungswerkzeugen und der microUSB-Buchse ist das für jeden ein Kinderspiel.

cooper.bin am 10.02.2024

Der DS18B20 Temperatursensor am ESP8266 D1 Mini - Einfache Temperaturmessung

Lerne, wie du mit der Arduino IDE, dem ESP8266 und einem DS18B20 Temperatursensor einfache und schnelle Temperaturmessungen durchführen kannst.

cooper.bin am 05.03.2024

HC-SR04 und JSN-SR04T - Entfernungen messen mit Ultraschallsensoren am ESP8266

Lerne in diesem Tutorial, wie die Ultraschallsensoren HC-SR04 und JSN-SR04T mit ESP8266 D1 Mini für Distanzmessungen eingesetzt werden, die Grundlagen, Anwendungen und mehr.

cooper.bin am 09.03.2024

Der DHT22 am ESP8266 - Wie man die Temperatur und Luftfeuchtigkeit misst

In diesem Tutorial lernst du, wie du mit einem DHT22 und einem ESP8266 D1 Mini die Luftfeuchtigkeit und die Temperatur einfach messen kannst.

cooper.bin am 12.03.2024

ESP8266 - Ein einfacher Webserver mit mDNS

Während Webserver wie Apache2 oder NGNIX auf Rechnern laufen, kann man auch auf einem ESP8266 einen Webserver verwenden. In diesem Tutorial werden wir ein Grundgerüst implementieren.

cooper.bin am 13.02.2024