Inhaltsverzeichnis:

Alexa Raspberry Pi Relay Controller - Gunook
Alexa Raspberry Pi Relay Controller - Gunook

Video: Alexa Raspberry Pi Relay Controller - Gunook

Video: Alexa Raspberry Pi Relay Controller - Gunook
Video: Raspberry Pi Zero, 4 Channel relay + Amazon Echo with fauxmo 2024, Juli
Anonim
Alexa Raspberry Pi-Relais-Controller
Alexa Raspberry Pi-Relais-Controller
Alexa Raspberry Pi-Relais-Controller
Alexa Raspberry Pi-Relais-Controller
Alexa Raspberry Pi-Relais-Controller
Alexa Raspberry Pi-Relais-Controller

Ich habe dieses Instructable erstellt, um meine Erfahrungen mit der Integration von IOT-Geräten mit Amazons Alexa zu teilen.

Dieses Projekt ermöglicht die Steuerung einer mit einem Himbeer-Pi verbundenen Relaisplatine vom Smarthome-Controller.

Es wurde mit Alexa getestet, scheint aber auch mit Samsung Smartthings und anderen Steuerschnittstellen gut zu funktionieren, da es eine Reihe von Belkin Wemo-Steckdosen emuliert.

Es gibt viele Beispiele, die auf dem ausgezeichneten FAUXMO-Code basieren, aber dies bedeutete, Python zu lernen und gab mir nicht die detaillierte Kontrolle, die ich für meine Geräte brauchte.

Ich wollte auch nicht in die Tiefen des Lambda-Codes auf Amazon.com gehen müssen, also habe ich es wirklich einfach gehalten.

Ich habe die Quelle und Notizen auf Github gepostet:

github.com/Switchdoctorstu/StuPiMo

Das Tutorial soll wirklich behandeln, wie man es zum Laufen bringt und meine Notizen veröffentlicht, falls es anderen hilft.

Schritt 1: Verbrauchsmaterialien und Anschlüsse

Verbrauchsmaterialien und Anschlüsse
Verbrauchsmaterialien und Anschlüsse
Verbrauchsmaterialien und Anschlüsse
Verbrauchsmaterialien und Anschlüsse
Verbrauchsmaterialien und Anschlüsse
Verbrauchsmaterialien und Anschlüsse

Die Dinge, die Sie brauchen, sind bei Amazon / EBay leicht verfügbar:

  • Himbeer-PI *
  • Pi-Netzteil
  • Dupont-Anschlüsse
  • Relaisplatine
  • Altes Micro-USB-Kabel (zum Halbieren für die Stromversorgung der Relaiskarte)

Jeder Raspberry Pi wird funktionieren, ich habe dies auf einem Model B und Zero getestet.

*Wenn Sie Pi Zero verwenden, benötigen Sie einen OTG-Netzwerkadapter (es sei denn, Sie kaufen die 'W'-Version mit eingebautem WiFi)

Sie müssen den Pi mit dem Netzwerk verbinden.

Verwenden Sie die Dupont-Anschlüsse, um die Relaiskarte mit dem Pi zu verbinden.

Beachten Sie, dass die Relaiskarte eine externe Stromversorgung verwenden sollte (entfernen Sie die Verbindung und schließen Sie sie an externe 5 V an). Es funktioniert mit Strom vom PI, wird aber nicht für den Produktionsbetrieb empfohlen.

Für mein Setup habe ich einen extern betriebenen USB-HUB verwendet. Dies liefert die Leistung an den PI.

Ich habe auch das Ende eines alten USB-Kabels abgeschnitten und die Relais von einer zweiten USB-Verbindung zum Hub mit Strom versorgt, um sicher zu bleiben. Meine 'Produktions'-Version verwendet ein kleines 5V 5A Schaltnetzteil. Wieder schneide ich einfach ein USB-Kabel in zwei Hälften, um den Pi über Micro-USB mit Strom zu versorgen, und schneide zwei der Dupont-Anschlüsse ab, um die Relaisplatine mit Strom zu versorgen. Es gibt 4 Drähte im USB-Kabel, die meisten verwenden rot / schwarz, um die 5-V-Versorgung anzuzeigen, aber im Zweifelsfall verwenden Sie ein Messgerät, um sicherzustellen, dass Sie die richtigen Drähte erhalten.

Die Relaispins auf der Platine sind mit den entsprechenden GPIO-Pins des PI-Headers verbunden.

Der Code ermöglicht es Ihnen, die GPIO-Pins auszuwählen, aber der Standard, den ich verwendet habe, war:

  1. Relais Pin 1 - Masse
  2. Relais Pin 2 - Relais 1 - GPIO 0
  3. Relais Pin 3 - Relais 2 - GPIO 1
  4. Relais Pin 4 - Relais 3 - GPIO 2
  5. Relais Pin 5 - Relais 4 - GPIO 3
  6. Relais Pin 6 - Relais 5 - GPIO 4
  7. Relais Pin 7 - Relais 6 - GPIO 5
  8. Relais Pin 8 - Relais 7 - GPIO 6
  9. Relais Pin 9 - Relais 8 - GPIO 7
  10. Relais Pin 10 - +5V für Logik

Schritt 2: PI-Setup

Ich werde kein Tutorial erstellen, wie Sie Ihren PI zum Laufen bringen und mit dem Netzwerk verbinden.

Es gibt viele Führer, darunter ein ausgezeichnetes anweisbares bei:

www.instructables.com/id/Ultimate-Raspberr…

Sie müssen sich an den Punkt bringen, an dem der PI im Netzwerk sichtbar ist und Sie eine Verbindung herstellen können.

Dabei spielt es keine Rolle, ob dies über Ethernet oder Wireless erfolgt.

Dieses Projekt kann nur mit dem Raspberry PI mit dem Geany Programmers Editor abgeschlossen werden, aber ich persönlich finde es einfacher, meine Codevorbereitung auf einem PC mit Visual Studio oder Eclipse (oder sogar Notepad ++) durchzuführen und sie dann zum Debuggen mit a auf den PI hochzuladen VNC-Verbindung. Wieder werde ich das hier nicht behandeln, da es viele ausgezeichnete Anleitungen zum Einrichten von VNC auf einem RPi gibt.

Sie müssen lediglich an den Punkt gelangen, an dem Sie den Code hochladen und kompilieren können.

Wichtig ist, dass, da der UPNP-Handler UDP-Multicast erfordert, die verwendeten Schnittstellen auf den 'Promiscuous'-Modus gesetzt werden müssen.

Dies kann in der Befehlszeile erfolgen:

pi@raspberrypi:~ $ ifconfig eth0 promisc

und / oder

pi@raspberrypi:~ $ ifconfig wlan0 promisc

Dies muss dauerhaft gemacht werden, also habe ich die /etc/rc.local. bearbeitet

sudo nano \etc\rc.local

um die Zeile einzuschließen:

sudo ifconfig eth0 promisc

nach dem ersten Satz von # Bannerzeilen, um sicherzustellen, dass die Schnittstellen beim Start festgelegt wurden.

Schritt 3: Herunterladen und Kompilieren des Codes

Der Code selbst befindet sich in meinem Github-Repository;

github.com/Switchdoctorstu/StuPiMo/blob/ma…

während es "richtige" Möglichkeiten gibt, das Repository zu klonen. Ich fand es einfacher, den Geany-Editor auf dem Pi-Desktop zu öffnen und den Code einzufügen.

Ebenso, wenn Sie die Befehlszeile verwenden;

Erstellen Sie ein neues Verzeichnis

mkdir Stu

Wechseln Sie dazu

CD Stu

Erstellen Sie eine neue Textdatei

nano StuPiMo.c

Kopiere den Code aus dem Github Raw und füge ihn in die neue Datei ein

Speichern und schließen.

Sobald Sie die Datei als C-Quellcodeobjekt haben, können Sie sie mit kompilieren

gcc -o StuPiMo StuPiMo.c -l wiringPi

Beachten Sie, dass das "-l wiringPi" benötigt wird, um sicherzustellen, dass der Compiler in der erforderlichen wiringPi-Bibliothek verlinkt.

Der Code kann dann ausgeführt werden mit

./StuPiMo

Auch hier, wenn Sie möchten, dass dies beim Start ausgeführt wird, verwenden Sie den Befehl:

sudo nano /etc/rc.local

um die folgende Zeile hinzuzufügen

sudo /home/pi/Stu/StuPiMo &

in Ihre /etc/rc.local-Datei. Vergessen Sie nicht, Ihre Datei beim Beenden zu speichern.

Beachten Sie, dass das '&' unbedingt erforderlich ist, um sicherzustellen, dass ein Unterprozess gestartet wird, um sicherzustellen, dass das Skript an dieser Stelle nicht blockiert wird.

Schritt 4: Verwenden Sie es

Sobald Sie den Code ausgeführt haben, bitten Sie Alexa, „Geräte zu entdecken“und sie sollte alle 8 virtuellen Wemo-Geräte finden.

Dann heißt es nur noch: „Alexa schalte Buchse 1 ein“oder „Alexa schalte Buchse 6 aus“usw. und das entsprechende Relais wird getauscht.

Schritt 5: So funktioniert der Code

Der Code emuliert eine Reihe von Belkin Wemo-Socket-Geräten.

Um dies zu erreichen, muss es 2 Hauptfunktionen erfüllen

  • ein UPNP-Discovery-Broadcast-Handler
  • einen „Gerätehandler“(einer pro virtuellem Gerät), um die an das Gerät gesendeten Befehle und die erforderlichen Antworten zu verwalten.

Ein "Bonus"-Feature ist, dass es auch eine Webseite veröffentlicht, um die Steuerung der Geräte zu ermöglichen.

UPNP-Handler

Der UPNP-Handler öffnet einen Socket, um SSDP-Protokollpakete auf Port 1900 239.255.255.250 zu überwachen.

Es antwortet auf alle eingehenden 'M-SEARCH'-Anfragen mit einem Discovery-Antwortpaket, das jedem, der fragt, die einzelnen wemo-Emulatoren mitteilt.

Gerätehandler

Die Gerätehandler (einer pro virtuellem Gerät) überwachen eine Reihe von IP-Ports und antworten auf Anfragen.

Es wird eine setup.xml-Antwort liefern, wenn Sie gefragt werden

Auf Nachfrage wird eine Ereignisbeschreibungsdatei bereitgestellt

Es wird auf eine GETBINARYSTATE-Anfrage antworten

Es verarbeitet und antwortet auf eine SETBINARYSTATE-Anfrage

Webserver

Der Webserver ist eine einfache Routine, die ein HTML-Formular erstellt, das eine Schaltfläche pro Relais enthält.

Es reagiert auf das Drücken der Tasten und schaltet den Status des Relais entsprechend um.

Schritt 6: Anpassung und Anzeigenamen

Anpassung und Anzeigenamen
Anpassung und Anzeigenamen

Ich bin nicht verrückt geworden mit dem Code, um ihn einfach und bearbeitbar zu halten.

Die Grundlagen können durch Definitionen am Anfang des Codes angepasst werden:

// globale Definitionen#define WEBPORT 5353 // Port zum Ausführen des Webservers

#define NUMDEVICES 8 // Anzahl der zu erstellenden virtuellen Geräte

#define PORTBASE 43450 // Basis-IP-Port zum Hochzählen von

WEBPORT ist die Portnummer, auf der der integrierte Webserver läuft. Dies könnte auf 80 eingestellt werden, um die Dinge zu vereinfachen, aber ich fand, dass es mit Tomcat oder anderen lokal ausgeführten Diensten in Konflikt stand.

NUMDEVICES definiert die Anzahl der einzelnen zu startenden WEMO-Emulatoren. Wenn Sie eine 2-Port-Relaiskarte haben, setzen Sie diese auf 2, 4 Port = 4 usw.

Die Anzeigenamen für die Geräte werden in einer Routine namens setup_names festgelegt:

int setup_names(char friendly[NUMDEVICES][NAMELEN]) { int i = 0;

// benutze diese Schleife

für (i = 0; i < NUMDEVICES; i++) {

sprintf(friendly, "Socket %d", i + 1);

}

// oder die folgende manuelle Tabelle zum Auffüllen von Gerätenamen

/*

strcpy(friendly[0], "Schlafzimmer-TV");

strcpy(freundlich[1], "Elektrische Decke");

strcpy(freundlich[2], "Schlafzimmerlampe");

strcpy(freundlich[3], "Socket 4");

strcpy(freundlich[4], "Socket 5");

strcpy(freundlich[5], "Socket 6");

strcpy(freundlich[6], "Socket 7");

strcpy(freundlich[7], "Socket 8");

*/

Rückkehr ich;

}

Ich habe eine Schleife verwendet, um jedes der Geräte 'Socket n' aufzurufen, aber Sie können diese Schleife löschen und stattdessen Ihre eigenen Anzeigenamen hinzufügen (stellen Sie nur sicher, dass Sie dieselbe Nummer wie NUMDEVICES hinzufügen), wenn Sie /* */ löschen

Denken Sie daran, den Code neu zu kompilieren, wenn Sie Änderungen vornehmen.

Empfohlen: