Cuprins:

Controler de releu Alexa Raspberry Pi: 6 pași
Controler de releu Alexa Raspberry Pi: 6 pași

Video: Controler de releu Alexa Raspberry Pi: 6 pași

Video: Controler de releu Alexa Raspberry Pi: 6 pași
Video: How to use 2 channel relay to control AC and DC loads in Arduino 2024, Iulie
Anonim
Controler de releu Alexa Raspberry Pi
Controler de releu Alexa Raspberry Pi
Controler de releu Alexa Raspberry Pi
Controler de releu Alexa Raspberry Pi
Controler de releu Alexa Raspberry Pi
Controler de releu Alexa Raspberry Pi

Am creat acest Instructable pentru a împărtăși experiențele mele cu integrarea dispozitivelor IOT cu Alexa Amazon.

Acest proiect permite o placă de releu conectată la un raspberry pi să fie controlată de la controlerul smarthome.

A fost testat cu Alexa, dar pare să funcționeze bine cu Samsung Smartthings și alte interfețe de control, deoarece emulează o serie de prize Belkin Wemo.

Există o mulțime de exemple bazate pe codul FAUXMO excelent, dar acest lucru a însemnat învățarea pythonului și nu mi-a oferit controlul detaliat de care aveam nevoie pentru dispozitivele mele și așa că am decis să recreez unul de la zero folosind C ca limbaj de codare de bază.

De asemenea, nu am vrut să trebuiască să merg la adâncimile codului lambda de pe Amazon.com, așa că l-am păstrat foarte simplu.

Am postat sursa și notele pe Github:

github.com/Switchdoctorstu/StuPiMo

Tutorialul este cu adevărat pentru a acoperi cum să funcționeze și pentru a publica notițele mele în caz că îi ajută pe ceilalți.

Pasul 1: consumabile și conexiuni

Consumabile și conexiuni
Consumabile și conexiuni
Consumabile și conexiuni
Consumabile și conexiuni
Consumabile și conexiuni
Consumabile și conexiuni

Lucrurile de care aveți nevoie sunt disponibile pe Amazon / EBay:

  • Raspberry PI *
  • Alimentare Pi
  • Conectori Dupont
  • Placa de releu
  • Vechi cablu micro USB (pentru a tăia în jumătate pentru alimentarea cardului de releu)

Orice zmeură Pi va funcționa, am testat acest lucru pe un model B și Zero.

* Dacă utilizați Pi Zero, veți avea nevoie de un adaptor de rețea OTG (cu excepția cazului în care cumpărați versiunea „W” cu buit în WiFi)

Va trebui să conectați Pi la rețea.

Utilizați conectorii dupont pentru a conecta cardul de releu la Pi.

Rețineți că cardul de releu ar trebui să utilizeze alimentare externă (eliminați legătura și conectați-vă la 5v extern). Acesta va funcționa alimentat de la PI, dar nu este recomandat pentru rularea producției.

Pentru configurarea mea am folosit un HUB USB alimentat extern. Aceasta oferă puterea PI.

De asemenea, am tăiat capătul unui cablu USB vechi și am alimentat releele de la a doua conexiune USB la hub pentru a rămâne în siguranță. Versiunea mea de „producție” folosește o mică sursă de alimentare cu modul de comutare 5V 5A. Din nou, doar am tăiat un cablu USB în jumătate pentru a alimenta Pi prin Micro-USB și am tăiat doi dintre conectorii dupont pentru a alimenta placa releu. Există 4 fire în cablul USB, majoritatea folosind roșu / negru pentru a indica sursa de 5V, dar dacă aveți dubii, folosiți un contor pentru a vă asigura că obțineți firele corecte.

Pinii releului de pe placă sunt conectați la pinii GPIO relevanți de pe antetul PI.

Codul vă permite să alegeți pinii GPIO, dar valoarea implicită pe care am folosit-o a fost:

  1. Releul Pin 1 - Masă
  2. Releul 2 - Releul 1 - GPIO 0
  3. Releul Pin 3 - Releul 2 - GPIO 1
  4. Releul Pin 4 - Releul 3 - GPIO 2
  5. Releul Pin 5 - Releul 4 - GPIO 3
  6. Releu Pin 6 - Releu 5 - GPIO 4
  7. Releu Pin 7 - Releu 6 - GPIO 5
  8. Releul Pin 8 - Releul 7 - GPIO 6
  9. Releul Pin 9 - Releul 8 - GPIO 7
  10. Releu Pin 10 - + 5v pentru logică

Pasul 2: Configurare PI

Nu am de gând să recreez un tutorial despre cum să îți activezi PI-ul și să te conectezi la rețea.

Există multe ghiduri, inclusiv un instructaj excelent la:

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

Va trebui să ajungeți la punctul în care PI este vizibil în rețea și vă puteți conecta la aceasta.

Nu contează dacă acest lucru este prin Ethernet sau fără fir.

Acest proiect poate fi completat doar cu Raspberry PI folosind Geany Programmers Editor, dar personal îmi este mai ușor să-mi pregătesc codul pe un computer folosind Visual Studio sau Eclipse (sau chiar Notepad ++) și apoi să-l încarc pe PI pentru depanare folosind un Conexiune VNC. Din nou, nu voi acoperi acest lucru aici, deoarece există multe instrumente excelente despre configurarea VNC pe un RPi.

Tot ce aveți nevoie este să ajungeți la punctul în care puteți încărca și compila codul.

O notă importantă este că, deoarece gestionarul UPNP necesită UDP multicast, interfețele utilizate trebuie setate la modul „Promiscuous”.

Acest lucru se poate face pe linia de comandă:

pi @ raspberrypi: ~ $ ifconfig eth0 promisc

și / sau

pi @ raspberrypi: ~ $ ifconfig wlan0 promisc

Acest lucru trebuie făcut permanent, așa că am editat /etc/rc.local

sudo nano / etc / rc.local

pentru a include linia:

sudo ifconfig eth0 promisc

după primul set de linii de banner # pentru a vă asigura că interfețele au fost setate la pornire.

Pasul 3: Descărcarea și compilarea codului

Codul în sine se află în repozitorul meu Github;

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

în timp ce există modalități „corecte” de clonare a depozitului. Mi s-a părut mai ușor să deschid editorul Geany pe desktopul Pi și să lipesc codul.

În mod similar, dacă utilizați linia de comandă;

Creați un director nou

mkdir Stu

Schimbați-l

cd Stu

Creați un fișier text nou

nano StuPiMo.c

Copiați codul din Github brut și lipiți-l în noul fișier

Salvează și ieși.

Odată ce aveți fișierul ca obiect cod sursă C, îl puteți compila folosind

gcc -o StuPiMo StuPiMo.c -l cablarePi

rețineți că "-l wiringPi" este necesar pentru a vă asigura că completatorul se leagă în biblioteca wiringPi necesară.

Codul poate fi apoi rulat folosind

./StuPiMo

Din nou, dacă doriți ca aceasta să ruleze la pornire, utilizați comanda:

sudo nano /etc/rc.local

pentru a adăuga următoarea linie

sudo / home / pi / Stu / StuPiMo &

în fișierul dvs. /etc/rc.local. Nu uitați să salvați fișierul la ieșire.

Rețineți că „&” este esențial pentru a vă asigura că apare un subproces pentru a vă asigura că scriptul nu este blocat în acest moment.

Pasul 4: Folosirea acestuia

Odată ce ai rulat codul, cere-i lui Alexa să „Descopere dispozitive” și ea ar trebui să găsească toate cele 8 dispozitive virtuale Wemo.

Apoi este doar un caz de a spune: „Alexa pornește soclul 1” sau „Alexa oprește soclul 6” etc., iar releul relevant va fi schimbat.

Pasul 5: Cum funcționează codul

Codul funcționează prin emularea unei serii de dispozitive socket Belkin Wemo.

Pentru a realiza acest lucru, trebuie să se ocupe de 2 funcții majore

  • un manager de difuzare a descoperirilor UPNP
  • un „dispozitiv de gestionare” (unul pe dispozitiv virtual) pentru a gestiona comenzile trimise către dispozitiv și răspunsurile necesare.

O caracteristică „bonus” este că publică și o pagină web pentru a permite controlul dispozitivelor.

Handler UPNP

Handler-ul UPNP deschide un soclu pentru a monitoriza pachetele de protocol SSDP pe portul 239.255.255.250 1900.

Răspunde la orice întrebări „M-SEARCH” care vin cu un pachet de răspuns la descoperire care anunță emulatorii individuali de wemo oricui cere.

Handler dispozitiv

Dispozitivele de gestionare a dispozitivelor (câte unul pe dispozitiv virtual) monitorizează o serie de porturi IP și răspund solicitărilor.

Va primi un răspuns setup.xml când vi se va cere

Acesta va furniza un fișier de descriere a evenimentului atunci când vi se solicită

Acesta va răspunde unei solicitări GETBINARYSTATE

Acesta va procesa și răspunde la o cerere SETBINARYSTATE

Server Web

Serverul web este o rutină simplă care creează un formular HTML care conține un buton pe releu.

Acesta va răspunde la apăsarea butoanelor și va comuta starea releului în consecință.

Pasul 6: Personalizare și nume prietenoase

Personalizare și nume prietenoase
Personalizare și nume prietenoase

Nu am înnebunit cu codul pentru a-l păstra simplu și modificabil.

Elementele de bază pot fi personalizate prin definiții la începutul codului:

// definiții globale # define WEBPORT 5353 // port pentru a rula serverul web pe

#define NUMDEVICES 8 // Numărul de dispozitive virtuale de creat

#define PORTBASE 43450 // portul IP de bază pentru a crește din

WEBPORT este numărul de port pe care rulează serverul web încorporat. Acest lucru ar putea fi făcut să stea la 80 de ani pentru a ușura lucrurile, dar am constatat că este în conflict cu Tomcat sau alte servicii care rulează local.

NUMDEVICES definește numărul de emulatori WEMO individuali de lansat. Dacă aveți un card de releu cu 2 porturi, setați-l la 2, 4 porturi = 4 etc.

Numele prietenoase pentru dispozitive sunt setate într-o rutină numită setup_names:

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

// folosiți această buclă

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

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

}

// sau următorul tabel manual pentru a completa numele dispozitivelor

/*

strcpy (prietenos [0], "TV dormitor");

strcpy (prietenos [1], „Pătură electrică”);

strcpy (prietenos [2], „Lampă dormitor”);

strcpy (prietenos [3], „soclul 4”);

strcpy (prietenos [4], „soclul 5”);

strcpy (prietenos [5], „soclul 6”);

strcpy (prietenos [6], „soclu 7”);

strcpy (prietenos [7], „soclu 8”);

*/

retur i;

}

Am folosit o buclă pentru a apela fiecare dispozitiv 'Socket n', dar puteți șterge această buclă și puteți adăuga propriile nume prietenoase (asigurați-vă că adăugați același număr ca NUMDEVICES) dacă ștergeți / * * /

Nu uitați să recompilați codul dacă faceți modificări.

Recomandat: