Innholdsfortegnelse:

Alexa Raspberry Pi Relay Controller: 6 trinn
Alexa Raspberry Pi Relay Controller: 6 trinn

Video: Alexa Raspberry Pi Relay Controller: 6 trinn

Video: Alexa Raspberry Pi Relay Controller: 6 trinn
Video: Как собрать ПЛК Raspberry Pi Pico || Редактор OpenPLC 2024, September
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 opprettet denne Instructable for å dele mine erfaringer med å integrere IOT -enheter med Amazons Alexa.

Dette prosjektet gjør at et relékort som er koblet til en bringebærpi kan styres fra smarthome -kontrolleren.

Den er testet med Alexa, men ser også ut til å fungere fint med Samsung Smartthings og andre kontrollgrensesnitt, ettersom den etterligner en serie Belkin Wemo -kontakter.

Det er MASSE eksempler basert på den utmerkede FAUXMO-koden, men dette betydde å lære python og ga meg ikke den detaljerte kontrollen jeg trengte for enhetene mine, og derfor bestemte jeg meg for å lage en på nytt fra grunnen av ved å bruke C som mitt grunnleggende kodingsspråk.

Jeg ville heller ikke måtte gå til dybden på lambda -koden på Amazon.com, så jeg har holdt det veldig enkelt.

Jeg har lagt ut kilden og notatene på Github:

github.com/Switchdoctorstu/StuPiMo

Opplæringen er egentlig for å dekke hvordan du får det til å fungere og for å publisere notatene mine i tilfelle det hjelper andre.

Trinn 1: Rekvisita og tilkoblinger

Rekvisita og tilkoblinger
Rekvisita og tilkoblinger
Rekvisita og tilkoblinger
Rekvisita og tilkoblinger
Rekvisita og tilkoblinger
Rekvisita og tilkoblinger

Tingene du trenger er lett tilgjengelige på Amazon / EBay:

  • Bringebær PI *
  • Pi strømforsyning
  • Dupont -kontakter
  • Stafett
  • Gammel mikro -USB -ledning (kuttes i to for strøm til relékortet)

Enhver bringebær Pi vil fungere, jeg har testet dette på en modell B og null.

*Hvis du bruker Pi Zero trenger du en OTG -nettverkskort (med mindre du kjøper 'W' -versjonen med buit i WiFi)

Du må koble Pi til nettverket.

Bruk dupont -konnektorene for å koble relékortet til Pi.

Vær oppmerksom på at relékortet skal bruke ekstern strøm (fjern koblingen og koble til ekstern 5v). Det vil fungere drevet fra PI, men det anbefales ikke for produksjon som kjører.

For oppsettet mitt brukte jeg en eksternt drevet USB -HUB. Dette gir strøm til PI.

Jeg kuttet også enden av en gammel USB -kabel og drev reléene fra en andre USB -tilkobling til huben for å være trygg. Min 'produksjons' versjon bruker en liten 5V 5A brytermodus strømforsyning. Igjen kuttet jeg bare en USB-ledning i to for å drive Pi via Micro-USB og kutte ned to av dupont-kontaktene for å drive relékortet. Det er 4 ledninger i USB -kabelen, de fleste bruker rødt/svart for å betegne 5v -forsyningen, men hvis du er i tvil, bruk en måler for å sikre at du får de riktige ledningene.

Relépinnene på brettet er koblet til de relevante GPIO -pinnene på PI -hodet.

Koden lar deg velge GPIO -pinnene, men standarden jeg brukte var:

  1. Relépinne 1 - Jord
  2. Relépinne 2 - Relé 1 - GPIO 0
  3. Relépinne 3 - Relé 2 - GPIO 1
  4. Relépinne 4 - Relé 3 - GPIO 2
  5. Relépinne 5 - Relé 4 - GPIO 3
  6. Relépinne 6 - Relé 5 - GPIO 4
  7. Relépinne 7 - Relé 6 - GPIO 5
  8. Relépinne 8 - Relé 7 - GPIO 6
  9. Relépinne 9 - Relé 8 - GPIO 7
  10. Relépinne 10 - +5v for logikk

Trinn 2: PI -oppsett

Jeg kommer ikke til å lage en opplæring om hvordan du får PI-en din i gang og koblet til nettverket.

Det er mange guider, inkludert en utmerket instruerbar på:

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

Du må komme deg til det punktet der PI er synlig på nettverket, og du kan koble deg til det.

Det spiller ingen rolle om dette er via Ethernet eller Wireless.

Dette prosjektet kan fullføres med bare Raspberry PI ved hjelp av Geany Programmerers Editor, men jeg synes det er lettere å gjøre kodeforberedelsen min på en PC ved hjelp av Visual Studio eller Eclipse (eller til og med Notisblokk ++) og deretter laste den opp til PI for feilsøking ved hjelp av en VNC -tilkobling. Igjen kommer jeg ikke til å dekke det her, siden det er mange gode instrukser om hvordan du konfigurerer VNC på en RPi.

Alt du trenger er å komme til det punktet hvor du kan laste opp og kompilere koden.

En merknad som er viktig er at siden UPNP -behandleren krever UDP multicast, må grensesnittene som brukes, settes til "Promiskuøs" modus.

Dette kan gjøres på kommandolinjen:

pi@raspberrypi: ~ $ ifconfig eth0 promisc

og / eller

pi@raspberrypi: ~ $ ifconfig wlan0 promisc

Dette må gjøres permanent, så jeg redigerte /etc/rc.local

sudo nano / etc / rc.local

for å inkludere linjen:

sudo ifconfig eth0 promisc

etter det første settet med banner # -linjer for å sikre at grensesnittene ble satt ved oppstart.

Trinn 3: Last ned og kompiler koden

Selve koden sitter i mitt Github -repsitorium;

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

mens det er 'riktige' måter å klone depotet på. Jeg fant det lettere å bare åpne Geany -editoren på Pi -skrivebordet og lime inn koden.

På samme måte, hvis du bruker kommandolinjen;

Lag en ny katalog

mkdir Stu

Bytt til det

cd Stu

Lag en ny tekstfil

nano StuPiMo.c

Kopier koden fra Github raw og lim den inn i den nye filen

Lagre og lukk.

Når du har filen som et C -kildekodeobjekt, kan du kompilere den ved hjelp av

gcc -o StuPiMo StuPiMo.c -l wiringPi

Vær oppmerksom på at "-l wiringPi" er nødvendig for å sikre at kompilatoren lenker til det nødvendige wiringPi-biblioteket.

Koden kan deretter kjøres med

./StuPiMo

Igjen, hvis du vil at dette skal kjøre ved oppstart, bruker du kommandoen:

sudo nano /etc/rc.local

for å legge til følgende linje

sudo/home/pi/Stu/StuPiMo &

til din /etc/rc.local -fil. Ikke glem å lagre filen ved avslutning.

Vær oppmerksom på at '&' er avgjørende for å sikre at en delprosess oppstår for å sikre at skriptet ikke blir blokkert på dette tidspunktet.

Trinn 4: Bruk den

Når du har kjørt koden, spør alexa om 'Discover Devices', og hun bør finne alle 8 av de virtuelle Wemo -enhetene.

Da er det bare å si: "Alexa turn on socket 1" eller "Alexa turn off socket 6" etc. og det aktuelle reléet vil bli endret.

Trinn 5: Hvordan koden fungerer

Koden fungerer ved å etterligne en serie Belkin Wemo -sokkelenheter.

For å oppnå dette må den håndtere 2 hovedfunksjoner

  • en UPNP discovery -kringkastingsbehandler
  • en 'enhetsbehandler' (en per virtuell enhet) for å administrere kommandoene som sendes til enheten og de nødvendige svarene.

En "bonus" -funksjon er at den også publiserer en webside for å tillate kontroll av enhetene.

UPNP -håndterer

UPNP -behandleren åpner en sokkel for å overvåke SSDP -protokollpakker på 239.255.255.250 port 1900.

Den svarer på alle 'M-SEARCH' forespørsler som kommer med en oppdagelsesresponspakke som kunngjør de enkelte wemo-emulatorene for alle som spør.

Enhetshåndterer

Enhetsbehandlerne (én per virtuell enhet) overvåker en rekke IP -porter og svarer på forespørsler.

Det vil vise et setup.xml -svar når du blir spurt

Den vil vise en hendelsesbeskrivelsesfil når du blir spurt

Den vil svare på en GETBINARYSTATE -forespørsel

Den vil behandle og svare på en SETBINARYSTATE -forespørsel

Internett server

Webserveren er en enkel rutine som bygger et HTML -skjema som inneholder en knapp per relé.

Den reagerer på knappene som trykkes og veksler reléets tilstand tilsvarende.

Trinn 6: Tilpasning og vennlige navn

Tilpasning og vennlige navn
Tilpasning og vennlige navn

Jeg har ikke blitt gal med koden for å holde den enkel og redigerbar.

Det grunnleggende kan tilpasses etter definisjoner i begynnelsen av koden:

// globale definisjoner#definere WEBPORT 5353 // port for å kjøre webserveren på

#define NUMDEVICES 8 // Antall virtuelle enheter som skal opprettes

#define PORTBASE 43450 // base IP -port for å øke opp fra

WEBPORT er portnummeret som den innebygde webserveren kjører på. Dette kan gjøres til å sitte på 80 for å gjøre ting enkelt, men jeg fant ut at det var i konflikt med tomcat eller andre tjenester som kjører lokalt.

NUMDEVICES definerer antall individuelle WEMO -emulatorer som skal startes. Hvis du har et 2 -port relékort, sett dette til 2, 4 port = 4 osv.

De vennlige navnene på enhetene er angitt i en rutine som heter setup_names:

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

// bruk denne sløyfen

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

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

}

// eller følgende manuelle tabell for å fylle enhetsnavn

/*

strcpy (vennlig [0], "Soverom -TV");

strcpy (vennlig [1], "elektrisk teppe");

strcpy (friendly [2], "Bedroom Lamp");

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

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

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

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

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

*/

returnere i;

}

Jeg brukte en sløyfe for å kalle hver av enhetene 'Socket n', men du kan slette denne løkken og legge til dine egne vennlige navn i stedet (bare sørg for at du legger til det samme nummeret som NUMDEVICES) hvis du sletter / * * /

Husk å kompilere koden på nytt hvis du gjør noen endringer.

Anbefalt: