INHOUDSOPGAWE:

Alexa Raspberry Pi Relay Controller: 6 stappe
Alexa Raspberry Pi Relay Controller: 6 stappe

Video: Alexa Raspberry Pi Relay Controller: 6 stappe

Video: Alexa Raspberry Pi Relay Controller: 6 stappe
Video: How to use 4 channel Relay to control AC load with Arduino code 2024, Julie
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

Ek het hierdie Instructable geskep om my ervarings met die integrasie van IOT -toestelle met Amazon se Alexa te deel.

Met hierdie projek kan 'n aflosbord wat aan 'n framboospi gekoppel is, beheer word vanaf die smarthome -beheerder.

Dit is met Alexa getoets, maar dit lyk ook asof dit goed werk met Samsung Smartthings en ander bedieningsinterfaces, aangesien dit 'n reeks Belkin Wemo -voetstukke naboots.

Daar is BAIE voorbeelde wat gebaseer is op die uitstekende FAUXMO-kode, maar dit beteken om python te leer en gee my nie die gedetailleerde beheer wat ek nodig het vir my toestelle nie, en daarom het ek besluit om een van nuuts af te skep met C as my basiese koderingstaal.

Ek wou ook nie na die dieptes van lambda -kode op Amazon.com gaan nie, so ek het dit eenvoudig gehou.

Ek het die bron en notas op Github geplaas:

github.com/Switchdoctorstu/StuPiMo

Die tutoriaal gaan eintlik oor hoe om dit te laat werk en om my notas te publiseer as dit ander help.

Stap 1: Benodighede en verbindings

Benodighede en verbindings
Benodighede en verbindings
Benodighede en verbindings
Benodighede en verbindings
Benodighede en verbindings
Benodighede en verbindings

Die dinge wat u benodig, is maklik beskikbaar op Amazon / eBay:

  • Framboos PI *
  • Pi kragbron
  • Dupont -verbindings
  • Relay Board
  • Ou mikro -USB -kabel (om in die helfte te sny vir krag vir die relaiskaart)

Enige framboos Pi sal werk, ek het dit op 'n Model B en Zero getoets.

*As u Pi Zero gebruik, benodig u 'n OTG -netwerkadapter (tensy u die 'W' -weergawe met buit in WiFi koop)

U moet die Pi aan die netwerk koppel.

Gebruik die dupont -konnetors om die relaiskaart aan die Pi te koppel.

Let daarop dat die relaiskaart eksterne krag moet gebruik (verwyder die skakel en koppel aan eksterne 5v). Dit werk op die PI, maar word nie aanbeveel vir produksie nie.

Vir my opstelling gebruik ek 'n ekstern aangedrewe USB HUB. Dit bied die PI krag.

Ek het ook die einde van 'n ou USB -kabel gesny en die relais van 'n 2de USB -verbinding na die hub gevoer om veilig te bly. My 'produksie' -weergawe gebruik 'n klein 5V 5A skakelaar -kragbron. Ek sny weer 'n USB-kabel in die helfte om die Pi via mikro-USB aan te dryf en sny twee van die dupont-aansluitings af om die relaisbord aan te dryf. Daar is 4 drade in die USB -kabel, die meeste gebruik rooi/swart om die 5V -toevoer aan te dui, maar as u twyfel, gebruik 'n meter om seker te maak dat u die korrekte drade kry.

Die aflospenne op die bord is gekoppel aan die relevante GPIO -penne op die PI -kop.

Met die kode kan u die GPIO -penne kies, maar die standaard wat ek gebruik het, was:

  1. Relay Pin 1 - Grond
  2. Relay Pin 2 - Relay 1 - GPIO 0
  3. Relay Pin 3 - Relay 2 - GPIO 1
  4. Relay Pin 4 - Relay 3 - GPIO 2
  5. Relay Pin 5 - Relay 4 - GPIO 3
  6. Relay Pin 6 - Relay 5 - GPIO 4
  7. Relay Pin 7 - Relay 6 - GPIO 5
  8. Relay Pin 8 - Relay 7 - GPIO 6
  9. Relay Pin 9 - Relay 8 - GPIO 7
  10. Relay Pin 10 - +5v vir logika

Stap 2: PI -opstelling

Ek gaan nie weer 'n handleiding skep oor hoe u u PI aan die gang kan kry en aan die netwerk kan koppel nie.

Daar is baie gidse, waaronder 'n uitstekende instruksie by:

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

U moet uself bereik tot die punt waar die PI op die netwerk sigbaar is en u kan daaraan koppel.

Dit maak nie saak of dit via Ethernet of draadloos is nie.

Hierdie projek kan voltooi word met slegs die Raspberry PI met behulp van die Geany Programmers Editor, maar ek vind dit persoonlik makliker om my kodevoorbereiding op 'n rekenaar te doen met Visual Studio of Eclipse (of selfs Notepad ++) en dit dan op te laai na die PI vir ontfouting met 'n VNC -verbinding. Weereens gaan ek dit nie hier bespreek nie, want daar is baie uitstekende instruksies oor die opstel van VNC op 'n RPi.

Al wat u nodig het, is om die punt te bereik waar u die kode kan oplaai en saamstel.

'N Belangrike opmerking is dat aangesien die UPNP -hanteerder UDP -multicast benodig, die gebruikte koppelvlakke in die' Promiscuous' -modus gestel moet word.

Dit kan op die opdragreël gedoen word:

pi@raspberrypi: ~ $ ifconfig eth0 promisc

en / of

pi@raspberrypi: ~ $ ifconfig wlan0 promisc

Dit moet permanent gemaak word, so ek het die /etc/rc.local geredigeer

sudo nano / etc / rc.local

om die reël in te sluit:

sudo ifconfig eth0 promisc

na die eerste stel banner # -reëls om te verseker dat die koppelvlakke ingestel is by die aanvang.

Stap 3: Laai die kode af en stel dit op

Die kode self sit in my Github -repsitorium;

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

terwyl daar 'korrekte' maniere is om die bewaarplek te kloon. Ek het dit makliker gevind om die Geany -redakteur op die Pi -lessenaar oop te maak en die kode in te plak.

Net so, as u die opdragreël gebruik;

Skep 'n nuwe gids

mkdir Stu

Verander dit

cd Stu

Maak 'n nuwe tekslêer

nano StuPiMo.c

Kopieer die kode van die Github raw en plak dit in die nuwe lêer

Stoor en verlaat.

Sodra u die lêer as 'n C -bronkode -voorwerp het, kan u dit saamstel met behulp van

gcc -o StuPiMo StuPiMo.c -l bedradingPi

let op die "-l wiringPi" is nodig om te verseker dat die kompliseerder in die vereiste wiringPi-biblioteek skakel.

Die kode kan dan met behulp van

./StuPiMo

Weereens, as u wil hê dat dit tydens die opstart moet begin, gebruik die opdrag:

sudo nano /etc/rc.local

om die volgende reël by te voeg

sudo/home/pi/Stu/StuPiMo &

na u /etc/rc.local lêer. Moenie vergeet om u lêer by die uitgang te stoor nie.

Let op die '&' is noodsaaklik om te verseker dat 'n subproses ontstaan om te verseker dat die script nie op hierdie stadium geblokkeer word nie.

Stap 4: Gebruik dit

Sodra u die kode aan die gang het, vra alexa 'Ontdek toestelle' en sy moet al 8 die virtuele Wemo -toestelle vind.

Dan is dit net 'n geval om te sê: "Alexa skakel aansluiting 1 aan" of "Alexa skakel aansluiting 6" ens uit, en die relevante aflos sal verander word.

Stap 5: Hoe die kode werk

Die kode werk deur 'n reeks Belkin Wemo -sokapparate na te boots.

Om dit te bereik, moet dit twee hooffunksies hanteer

  • 'n UPNP -ontdekkingsuitsending hanteerder
  • 'n 'apparaat hanteerder' (een per virtuele toestel) om die opdragte wat na die toestel gestuur is, te bestuur en die nodige antwoorde.

'N' Bonus' -kenmerk is dat dit ook 'n webbladsy publiseer om toestelle te beheer.

UPNP -verwerker

Die UPNP -hanteerder maak 'n sok oop om SSDP -protokolpakkies op 239.255.255.250 poort 1900 te monitor.

Dit reageer op enige 'M-SEARCH'-navrae wat kom met 'n ontdekkingsreaksie-pakket wat die individuele wemo-emulators aankondig vir almal wat dit vra.

Toestelhanteerder

Die apparaathanteerders (een per virtuele toestel) monitor 'n reeks IP -poorte en reageer op versoeke.

Dit sal 'n setup.xml -antwoord gee wanneer dit gevra word

Dit sal 'n gebeurtenisbeskrywingslêer bedien wanneer dit gevra word

Dit sal reageer op 'n GETBINARYSTATE -versoek

Dit sal 'n SETBINARYSTATE -versoek verwerk en daarop reageer

Webbediener

Die webbediener is 'n eenvoudige roetine wat 'n HTML -vorm bou wat 'n knoppie per aflos bevat.

Dit sal reageer op die knoppies wat gedruk word en die toestand van die aflos dienooreenkomstig verander.

Stap 6: Aanpassing en vriendelike name

Aanpassing en vriendelike name
Aanpassing en vriendelike name

Ek is nie mal oor die kode om dit eenvoudig en redigeerbaar te hou nie.

Die basiese beginsels kan aangepas word deur definisies aan die begin van die kode:

// globale definisies#definieer WEBPORT 5353 // poort waarop die webbediener uitgevoer kan word

#define NUMDEVICES 8 // Aantal virtuele toestelle om te skep

#define PORTBASE 43450 // basis IP -poort om van te verhoog

WEBPORT is die poortnommer waarop die ingeboude webbediener werk. Dit kan op 80 sit om dinge makliker te maak, maar ek het gevind dat dit in stryd is met tomcat of ander dienste wat plaaslik uitgevoer word.

NUMDEVICES definieer die aantal individuele WEMO -emulators wat begin moet word. As u 'n relaiskaart met 2 poort het, stel dit dan op 2, 4 poort = 4, ens.

Die vriendelike name vir die toestelle word opgestel in 'n roetine met die naam setup_names:

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

// gebruik hierdie lus

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

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

}

// of die volgende handleidingstabel om toestelname te vul

/*

strcpy (vriendelik [0], "Slaapkamer -TV");

strcpy (vriendelik [1], "Elektriese kombers");

strcpy (vriendelik [2], "Slaapkamerlamp");

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

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

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

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

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

*/

terugkeer i;

}

Ek het 'n lus gebruik om elk van die toestelle 'Socket n' te noem, maar u kan hierdie lus verwyder en u eie vriendelike name byvoeg (maak seker dat u dieselfde nommer as NUMDEVICES byvoeg) as u die / * * /

Onthou om die kode weer saam te stel as u veranderings aanbring.

Aanbeveel: