Innehållsförteckning:

Alexa Raspberry Pi Relay Controller: 6 steg
Alexa Raspberry Pi Relay Controller: 6 steg

Video: Alexa Raspberry Pi Relay Controller: 6 steg

Video: Alexa Raspberry Pi Relay Controller: 6 steg
Video: Alexa controlled 6-way distribution board with SonOff WiFi relay 2024, Juli
Anonim
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller

Jag skapade denna Instructable för att dela mina erfarenheter av att integrera IOT -enheter med Amazons Alexa.

Detta projekt gör det möjligt att styra ett reläkort anslutet till ett hallon pi från smarthome -styrenheten.

Det har testats med Alexa men verkar också fungera bra med Samsung Smartthings och andra kontrollgränssnitt eftersom det emulerar en serie Belkin Wemo -uttag.

Det finns MASSOR av exempel baserade på den utmärkta FAUXMO-koden, men detta innebar att jag lärde mig python och gav mig inte den detaljerade kontrollen jag behövde för mina enheter och så bestämde jag mig för att återskapa en från grunden med C som mitt grundkodningsspråk.

Jag ville inte behöva gå till djupet av lambda -koden på Amazon.com så jag har hållit det väldigt enkelt.

Jag har lagt upp källan och anteckningarna på Github:

github.com/Switchdoctorstu/StuPiMo

Handledningen är verkligen för att täcka hur man får det att fungera och att publicera mina anteckningar om det hjälper andra.

Steg 1: Tillbehör och anslutningar

Tillbehör och anslutningar
Tillbehör och anslutningar
Tillbehör och anslutningar
Tillbehör och anslutningar
Tillbehör och anslutningar
Tillbehör och anslutningar

De saker du behöver är lätt tillgängliga på Amazon / EBay:

  • Raspberry Pi *
  • Pi strömförsörjning
  • Dupont -kontakter
  • Relä styrelse
  • Gammal mikro -USB -kabel (för att halvera för ström till reläkortet)

Alla hallon Pi kommer att fungera, jag har testat detta på en modell B och noll.

*Om du använder Pi Zero behöver du en OTG -nätverksadapter (om du inte köper W -versionen med buit i WiFi)

Du måste ansluta Pi till nätverket.

Använd dupont -konnetorerna för att ansluta reläkortet till Pi.

Observera att reläkortet ska använda extern ström (ta bort länken och anslut till extern 5v). Det fungerar med PI men det rekommenderas inte för produktionskörning.

För min installation använde jag en externt driven USB -HUB. Detta ger kraften till PI: n.

Jag klippte också slutet av en gammal USB -kabel och drev reläerna från en andra USB -anslutning till navet för att vara säker. Min "produktion" -version använder en liten 5V 5A switch mode -strömförsörjning. Återigen skär jag bara en USB-kabel till hälften för att driva Pi via Micro-USB och klippa ner två av dupont-kontakterna för att driva reläkortet. Det finns 4 ledningar i USB -kabeln, de flesta använder rött/svart för att beteckna 5v -strömförsörjningen, men om du är osäker använder du en mätare för att se till att du får rätt ledningar.

Reläpinnarna på kortet är anslutna till de relevanta GPIO -stiften på PI -huvudet.

Koden låter dig välja GPIO -stiften men standarden jag använde var:

  1. Relästift 1 - Jord
  2. Relästift 2 - Relä 1 - GPIO 0
  3. Relästift 3 - Relä 2 - GPIO 1
  4. Relästift 4 - Relä 3 - GPIO 2
  5. Relästift 5 - Relä 4 - GPIO 3
  6. Relästift 6 - Relä 5 - GPIO 4
  7. Relästift 7 - Relä 6 - GPIO 5
  8. Relästift 8 - Relä 7 - GPIO 6
  9. Relästift 9 - Relä 8 - GPIO 7
  10. Relä Pin 10 - +5v för logik

Steg 2: PI -inställning

Jag kommer inte att återskapa en handledning om hur du får igång din PI och är ansluten till nätverket.

Det finns många guider inklusive en utmärkt instruerbar på:

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

Du måste komma dig till den punkt där PI är synligt i nätverket och du kan ansluta till det.

Det spelar ingen roll om detta är via Ethernet eller trådlöst.

Detta projekt kan slutföras med bara Raspberry PI med Geany Programmers Editor men jag personligen tycker att det är lättare att göra min kodförberedelse på en dator med Visual Studio eller Eclipse (eller till och med Notepad ++) och sedan ladda upp den till PI för felsökning med en VNC -anslutning. Återigen kommer jag inte att täcka det här eftersom det finns många utmärkta instruktioner om hur man konfigurerar VNC på en RPi.

Allt du behöver är att komma till den punkt där du kan ladda upp och kompilera koden.

En anmärkning som är viktig är att eftersom UPNP -hanteraren kräver UDP -multicast måste de gränssnitt som används vara inställt på "Promiscuous" -läge.

Detta kan göras på kommandoraden:

pi@raspberrypi: ~ $ ifconfig eth0 promisc

och / eller

pi@raspberrypi: ~ $ ifconfig wlan0 promisc

Detta måste göras permanent så jag redigerade /etc/rc.local

sudo nano / etc / rc.local

att inkludera raden:

sudo ifconfig eth0 promisc

efter den första uppsättningen banner # -rader för att säkerställa att gränssnitten inställdes vid start.

Steg 3: Ladda ner och kompilera koden

Själva koden sitter i mitt Github -repsitorium;

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

medan det finns "korrekta" sätt att klona förvaret. Jag tyckte att det var lättare att bara öppna Geany -redigeraren på Pi -skrivbordet och klistra in koden.

På samma sätt, om du använder kommandoraden;

Skapa en ny katalog

mkdir Stu

Ändra på det

cd Stu

Skapa en ny textfil

nano StuPiMo.c

Kopiera koden från Github raw och klistra in den i den nya filen

Spara och avsluta.

När du väl har filen som ett C -källkodobjekt kan du kompilera den med

gcc -o StuPiMo StuPiMo.c -l wiringPi

Observera att "-l wiringPi" behövs för att säkerställa att kompletteraren länkar till det obligatoriska wiringPi-biblioteket.

Koden kan sedan köras med

./StuPiMo

Återigen, om du vill att detta ska köras vid start, använd kommandot:

sudo nano /etc/rc.local

för att lägga till följande rad

sudo/home/pi/Stu/StuPiMo &

till din /etc/rc.local -fil. Glöm inte att spara din fil vid avslutning.

Observera att '&' är viktigt för att säkerställa att en delprocess skapas för att säkerställa att manuset inte blockeras vid denna tidpunkt.

Steg 4: Använda den

När du har koden igång, be alexa att "Upptäck enheter" och hon borde hitta alla åtta virtuella Wemo -enheter.

Då är det bara att säga: "Alexa slå på uttag 1" eller "Alexa stäng av uttag 6" etc. och det relevanta reläet kommer att ändras.

Steg 5: Hur koden fungerar

Koden fungerar genom att emulera en serie Belkin Wemo -uttagsenheter.

För att uppnå detta måste den hantera två huvudfunktioner

  • en UPNP discovery broadcast -hanterare
  • en "enhetshanterare" (en per virtuell enhet) för att hantera kommandona som skickas till enheten och de nödvändiga svaren.

En "bonus" -funktion är att den också publicerar en webbsida för att tillåta kontroll av enheterna.

UPNP -hanterare

UPNP -hanteraren öppnar ett uttag för att övervaka SSDP -protokollpaket på 239.255.255.250 port 1900.

Den svarar på alla "M-SÖKNING" -frågor som kommer in med ett upptäcktssvarspaket som tillkännager de enskilda wemoemulatorerna för alla som frågar.

Enhetshanterare

Enhetshanterarna (en per virtuell enhet) övervakar en serie IP -portar och svarar på förfrågningar.

Det kommer att visa ett setup.xml -svar när du tillfrågas

Den kommer att visa en händelsebeskrivningsfil när du blir ombedd

Den kommer att svara på en förfrågan från GETBINARYSTATE

Den kommer att behandla och svara på en SETBINARYSTATE -begäran

Webbserver

Webbservern är en enkel rutin som bygger ett HTML -formulär som innehåller en knapp per relä.

Den reagerar på att knapparna trycks in och växlar reläets läge i enlighet därmed.

Steg 6: Anpassning och vänliga namn

Anpassning och vänliga namn
Anpassning och vänliga namn

Jag har inte blivit tokig med koden för att hålla den enkel och redigerbar.

Grunderna kan anpassas med definitioner i början av koden:

// globala definitioner#definiera WEBPORT 5353 // port för att köra webbservern på

#define NUMDEVICES 8 // Antal virtuella enheter som ska skapas

#define PORTBASE 43450 // bas -IP -port att öka från

WEBPORT är portnumret som den inbyggda webbservern körs på. Detta kan göras att sitta vid 80 för att göra det enkelt men jag fann att det var i konflikt med tomcat eller andra tjänster som körs lokalt.

NUMDEVICES definierar antalet enskilda WEMO -emulatorer som ska startas. Om du har ett reläkort med 2 portar ställer du in detta på 2, 4 portar = 4 etc.

De vänliga namnen på enheterna anges i en rutin som kallas setup_names:

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

// använd denna loop

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

sprintf (vänlig , "Socket %d", i + 1);

}

// eller följande manuella tabell för att fylla i enhetsnamn

/*

strcpy (vänlig [0], "Sovrum -TV");

strcpy (vänlig [1], "elektrisk filt");

strcpy (vänlig [2], "Sovrumslampa");

strcpy (vänlig [3], "Socket 4");

strcpy (vänlig [4], "Socket 5");

strcpy (vänlig [5], "Socket 6");

strcpy (vänlig [6], "Socket 7");

strcpy (vänlig [7], "Socket 8");

*/

återvända i;

}

Jag använde en loop för att kalla var och en av enheterna 'Socket n' men du kan ta bort denna loop och lägga till dina egna vänliga namn istället (se bara till att du lägger till samma nummer som NUMDEVICES) om du tar bort / * * /

Kom ihåg att kompilera om koden om du gör några ändringar.

Rekommenderad: