Indholdsfortegnelse:

Alexa Raspberry Pi Relay Controller: 6 trin
Alexa Raspberry Pi Relay Controller: 6 trin

Video: Alexa Raspberry Pi Relay Controller: 6 trin

Video: Alexa Raspberry Pi Relay Controller: 6 trin
Video: Make "Alexa" Control ANYTHING! 2024, November
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

Jeg skabte denne Instructable for at dele mine oplevelser med at integrere IOT -enheder med Amazons Alexa.

Dette projekt gør det muligt at styre et relækort, der er forbundet til en hindbær pi, fra smarthome controller.

Det er blevet testet med Alexa, men ser også ud til at fungere fint med Samsung Smartthings og andre kontrolgrænseflader, da det efterligner en række Belkin Wemo -stik.

Der er Masser af eksempler baseret på den fremragende FAUXMO-kode, men det betød, at jeg lærte python og gav mig ikke den detaljerede kontrol, jeg havde brug for til mine enheder, og derfor besluttede jeg mig for at genskabe en fra bunden ved hjælp af C som mit basiskodningssprog.

Jeg ønskede heller ikke at skulle gå til dybden af lambda -kode på Amazon.com, så jeg har holdt det virkelig simpelt.

Jeg har postet kilden og noterne på Github:

github.com/Switchdoctorstu/StuPiMo

Tutorialen er virkelig til at dække hvordan man får det til at fungere og til at offentliggøre mine noter, hvis det hjælper andre.

Trin 1: Forbrugsvarer og forbindelser

Forbrugsvarer og forbindelser
Forbrugsvarer og forbindelser
Forbrugsvarer og forbindelser
Forbrugsvarer og forbindelser
Forbrugsvarer og forbindelser
Forbrugsvarer og forbindelser

De ting, du har brug for, er let tilgængelige på Amazon / EBay:

  • Hindbær PI *
  • Pi strømforsyning
  • Dupont -stik
  • Stafetavle
  • Gammelt mikro -USB -kabel (skæres i halve for strøm til relækortet)

Enhver hindbær Pi vil fungere, jeg har testet dette på en Model B og Zero.

*Hvis du bruger Pi Zero, skal du bruge en OTG -netværksadapter (medmindre du køber 'W' -versionen med buit i WiFi)

Du skal forbinde Pi til netværket.

Brug dupont -konnektorerne til at slutte relækortet til Pi.

Bemærk, at relækortet skal bruge ekstern strøm (fjern linket og tilslut til ekstern 5v). Det fungerer fra PI'en, men det anbefales ikke til produktionskørsel.

Til min opsætning brugte jeg en eksternt drevet USB HUB. Dette giver strøm til PI.

Jeg skar også enden af et gammelt USB -kabel og drev relæerne fra en 2. USB -forbindelse til hubben for at være sikker. Min 'produktion' version bruger en lille 5V 5A switch mode strømforsyning. Igen skar jeg bare en USB-ledning i halve for at drive Pi via Micro-USB og skære to af dupont-stikene ned for at drive relækortet. Der er 4 ledninger i USB -kablet, de fleste bruger rød/sort til at betegne 5v -forsyningen, men hvis du er i tvivl, skal du bruge en måler for at sikre, at du får de korrekte ledninger.

Relæstifterne på kortet er forbundet med de relevante GPIO -ben på PI -headeren.

Koden giver dig mulighed for at vælge GPIO -benene, men den standard, jeg brugte, var:

  1. Relæ Pin 1 - Jord
  2. Relæ Pin 2 - Relæ 1 - GPIO 0
  3. Relæ Pin 3 - Relæ 2 - GPIO 1
  4. Relæstift 4 - Relæ 3 - GPIO 2
  5. Relæ Pin 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 til logik

Trin 2: PI -opsætning

Jeg vil ikke genskabe en tutorial om, hvordan du får din PI til at køre og er forbundet til netværket.

Der er mange guider, herunder en fremragende instruerbar på:

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

Du skal komme til det punkt, hvor PI'en er synlig på netværket, og du kan oprette forbindelse til det.

Det er ligegyldigt om dette er via Ethernet eller Trådløs.

Dette projekt kan afsluttes med bare Raspberry PI ved hjælp af Geany Programmers Editor, men jeg synes personligt, at det er lettere at forberede min kode på en pc ved hjælp af Visual Studio eller Eclipse (eller endda Notepad ++) og derefter uploade det til PI'en til fejlfinding ved hjælp af en VNC -forbindelse. Igen vil jeg ikke dække det her, da der er mange fremragende instruktioner om opsætning af VNC på en RPi.

Alt du behøver er at komme til det punkt, hvor du kan uploade og kompilere koden.

En bemærkning, der er vigtig, er, at da UPNP -håndtereren kræver UDP -multicast, skal de anvendte grænseflader indstilles til 'Promiskuøs' tilstand.

Dette kan gøres på kommandolinjen:

pi@raspberrypi: ~ $ ifconfig eth0 promisc

og / eller

pi@raspberrypi: ~ $ ifconfig wlan0 promisc

Dette skal gøres permanent, så jeg redigerede /etc/rc.local

sudo nano / etc / rc.local

at inkludere linjen:

sudo ifconfig eth0 promisc

efter det første sæt banner # linjer for at sikre, at grænsefladerne blev sat ved opstart.

Trin 3: Download og kompilering af koden

Selve koden sidder i mit Github repsoitory;

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

mens der er 'korrekte' måder at klone depotet på. jeg fandt det lettere bare at åbne Geany -editoren på Pi -skrivebordet og indsætte koden.

På samme måde, hvis du bruger kommandolinjen;

Opret et nyt bibliotek

mkdir Stu

Skift til det

cd Stu

Opret en ny tekstfil

nano StuPiMo.c

Kopiér koden fra Github raw og indsæt den i den nye fil

Gem og luk.

Når du har filen som et C -kildekodeobjekt, kan du kompilere den ved hjælp af

gcc -o StuPiMo StuPiMo.c -l wiringPi

Bemærk, at "-l wiringPi" er nødvendig for at sikre, at komplimeren linker i det nødvendige wiringPi-bibliotek.

Koden kan derefter køres vha

./StuPiMo

Igen, hvis du vil have dette til at køre ved opstart, skal du bruge kommandoen:

sudo nano /etc/rc.local

for at tilføje følgende linje

sudo/home/pi/Stu/StuPiMo &

til din /etc/rc.local -fil. Glem ikke at gemme din fil ved afslutning.

Bemærk, at '&' er afgørende for at sikre, at en underproces er affødt for at sikre, at scriptet ikke blokeres på dette tidspunkt.

Trin 4: Brug det

Når du har koden kørende, skal du bede alexa om 'Discover Devices', og hun skal finde alle 8 af de virtuelle Wemo -enheder.

Så er det bare et tilfælde at sige: "Alexa tænd stik 1" eller "Alexa sluk stik 6" osv., Og det relevante relæ ændres.

Trin 5: Sådan fungerer koden

Koden fungerer ved at efterligne en række Belkin Wemo -sokkelenheder.

For at opnå dette skal den håndtere 2 hovedfunktioner

  • en UPNP discovery broadcast -handler
  • en 'enhedsbehandler' (en pr. virtuel enhed) til at styre de kommandoer, der sendes til enheden, og de nødvendige svar.

En 'bonus' -funktion er, at den også udgiver en webside for at tillade kontrol af enhederne.

UPNP Handler

UPNP -handler åbner en sokkel til overvågning af SSDP -protokolpakker på 239.255.255.250 port 1900.

Den reagerer på enhver 'M-SEARCH' forespørgsel, der kommer med en opdagelsesresponspakke, der annoncerer de enkelte wemo-emulatorer til alle, der spørger.

Enhedshåndterer

Enhedshåndtererne (en pr. Virtuel enhed) overvåger en række IP -porte og reagerer på anmodninger.

Det tjener et setup.xml -svar, når du bliver spurgt

Det vil vise en begivenhedsbeskrivelsesfil, når du bliver spurgt

Det vil besvare en GETBINARYSTATE -anmodning

Det behandler og reagerer på en anmodning fra SETBINARYSTATE

Webserver

Webserveren er en enkel rutine, der bygger en HTML -formular, der indeholder en knap pr. Relæ.

Den reagerer på, at der trykkes på knapperne og skifter relæets tilstand i overensstemmelse hermed.

Trin 6: Tilpasning og venlige navne

Tilpasning og venlige navne
Tilpasning og venlige navne

Jeg er ikke blevet gal med koden for at holde den enkel og redigerbar.

Det grundlæggende kan tilpasses efter definitioner i starten af koden:

// globale definitioner#definere WEBPORT 5353 // port til at køre webserveren på

#define NUMDEVICES 8 // Antal virtuelle enheder, der skal oprettes

#define PORTBASE 43450 // base IP -port til stigning fra

WEBPORT er det portnummer, som den indbyggede webserver kører på. Dette kunne gøres til at sidde på 80 for at gøre tingene lette, men jeg fandt ud af, at det var i konflikt med tomcat eller andre tjenester, der kører lokalt.

NUMDEVICES definerer antallet af individuelle WEMO -emulatorer, der skal startes. Hvis du har et 2 -port relækort, skal du indstille dette til 2, 4 port = 4 osv.

De venlige navne til enhederne er angivet i en rutine kaldet setup_names:

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

// brug denne loop

for (i = 0; i <NUMDEVICES; i ++) {

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

}

// eller den følgende manuelle tabel for at udfylde enhedsnavne

/*

strcpy (venlig [0], "Soveværelse TV");

strcpy (venlig [1], "elektrisk tæppe");

strcpy (venlig [2], "Soveværelseslampe");

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

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

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

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

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

*/

returnere i;

}

Jeg brugte en loop til at kalde hver af enhederne 'Socket n', men du kan slette denne loop og tilføje dine egne venlige navne i stedet (bare sørg for at tilføje det samme nummer som NUMDEVICES), hvis du sletter / * * /

Husk at kompilere koden igen, hvis du foretager ændringer.

Anbefalede: