Innehållsförteckning:
- Steg 1: Tillbehör och anslutningar
- Steg 2: PI -inställning
- Steg 3: Ladda ner och kompilera koden
- Steg 4: Använda den
- Steg 5: Hur koden fungerar
- Steg 6: Anpassning och vänliga namn
Video: Alexa Raspberry Pi Relay Controller: 6 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
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
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:
- Relästift 1 - Jord
- Relästift 2 - Relä 1 - GPIO 0
- Relästift 3 - Relä 2 - GPIO 1
- Relästift 4 - Relä 3 - GPIO 2
- Relästift 5 - Relä 4 - GPIO 3
- Relästift 6 - Relä 5 - GPIO 4
- Relästift 7 - Relä 6 - GPIO 5
- Relästift 8 - Relä 7 - GPIO 6
- Relästift 9 - Relä 8 - GPIO 7
- 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
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:
I2C Relay Met Arduino IDE: 5 Steg
I2C Relay Met Arduino IDE: Jag beställer en trevlig relayboard men det fanns ingen ArduinoIDE -instruktion, bara Raspberry Pi e.o. Jag får reda på hur jag använder det med Arduino och vill dela det så att du kan spara den tiden. Ursprungligt RaspberryPi -exempel: wiki.52pi.com/index.php/DockerPi_4_Channel_R
Alexa IoT TV-Controller ESP8266: 10 steg (med bilder)
Alexa IoT TV-Controller ESP8266: Nyligen köpte jag en Amazon Echo Dot under Amazon Prime-dagen för ~ 20 €. Dessa små röstassistenter är billiga och bra för DIY Home Automation om du vet vad som är möjligt och hur man bygger smarta enheter. Jag har en Samsung Smart TV men jag ville
Lora Arduino Control Relay Module Circuit: 12 Steg
Lora Arduino Control Relay Module Circuit: I detta Lora -projekt kommer vi att se hur man styr högspänningsenheter med LoRa Arduino relay control circuit. I detta Arduino Lora -projekt kommer vi att använda Reyax RYLR896 Lora -modul, Arduino och 12v relämodul för att styra 5 hushållsapparater med
Raspberry Pi DIY Relay Board: 3 steg (med bilder)
Raspberry Pi DIY Relay Board: För vissa projekt med hallon och de mindre arduinoerna måste jag byta några reläer. På grund av GPIO -utgångsnivån (3,3V) är det svårt att hitta några reläer som kan växla större belastningar och kan användas direkt med de angivna 3,3 volt.Så jag
NES Controller Shuffle (Nintendo Controller MP3, V3.0): 5 steg (med bilder)
NES Controller Shuffle (Nintendo Controller MP3, V3.0): Jag slog helt bort ryan97128 på hans design för Nintendo Controller MP3, version 2.0 och jag hör att han fick idén från den kloka Morte_Moya, så jag kan inte ta åt mig äran för allt deras geni. Jag ville bara lägga till bekvämligheten och ladda