Sisukord:

Alexa Raspberry Pi releekontroller: 6 sammu
Alexa Raspberry Pi releekontroller: 6 sammu

Video: Alexa Raspberry Pi releekontroller: 6 sammu

Video: Alexa Raspberry Pi releekontroller: 6 sammu
Video: Dave Mustaine sneaks into seats behind fans secretly handing kids guitar picks 2024, Juuli
Anonim
Alexa Raspberry Pi releekontroller
Alexa Raspberry Pi releekontroller
Alexa Raspberry Pi releekontroller
Alexa Raspberry Pi releekontroller
Alexa Raspberry Pi releekontroller
Alexa Raspberry Pi releekontroller

Lõin selle juhendi, et jagada oma kogemusi IOT -seadmete integreerimisel Amazoni Alexaga.

See projekt võimaldab vaarika pi -ga ühendatud releeplaati juhtida nutikodu kontrollerist.

Seda on testitud Alexaga, kuid tundub, et see töötab hästi ka Samsung Smartthingsi ja muude juhtimisliidestega, kuna see jäljendab Belkin Wemo pistikupesade seeriat.

Suurepärase FAUXMO-koodi põhjal on PALJU näiteid, kuid see tähendas pythoni õppimist ega andnud mulle üksikasjalikku kontrolli, mida ma oma seadmete jaoks vajasin, ja seega otsustasin selle nullist uuesti luua, kasutades baaskodeerimiskeelena C.

Samuti ei tahtnud ma Amazon.com lambda koodi sügavustesse minna, nii et olen selle tõesti lihtsaks teinud.

Olen postitanud allika ja märkmed Githubisse:

github.com/Switchdoctorstu/StuPiMo

Õpetus hõlmab tõesti selle toimimise saavutamist ja minu märkmete avaldamist juhuks, kui see teisi aitab.

Samm: tarvikud ja ühendused

Tarvikud ja ühendused
Tarvikud ja ühendused
Tarvikud ja ühendused
Tarvikud ja ühendused
Tarvikud ja ühendused
Tarvikud ja ühendused

Vajalikud asjad on Amazonist / EBayst hõlpsasti saadaval:

  • Vaarika PI *
  • Pi toiteallikas
  • Duponti pistikud
  • Teatelaud
  • Vana mikro -USB -juhe (releekaardi toite pooleks vähendamiseks)

Iga vaarika Pi töötab, olen seda testinud mudelitel B ja Zero.

*Kui kasutate Pi Zero, on teil vaja OTG -võrguadapterit (kui te ei osta W -versiooni, mille WiFi -ühendus on buit)

Peate Pi võrguga ühendama.

Releekaardi ühendamiseks Pi -ga kasutage dupont -konnetoreid.

Pange tähele, et releekaart peaks kasutama välist toiteallikat (eemaldage link ja ühendage väline 5v). See töötab PI toitega, kuid seda ei soovitata tootmiseks käitada.

Seadistamiseks kasutasin välise toitega USB HUB -i. See annab PI -le toite.

Lõikasin ära ka vana USB -kaabli otsa ja toitsin releed teise USB -ühenduse kaudu jaoturile, et see oleks ohutu. Minu "tootmis" versioon kasutab väikest 5V 5A lülitusrežiimi toiteallikat. Jällegi lõikasin lihtsalt USB-juhtme pooleks, et toita Pi mikro-USB kaudu, ja katkestasin kaks duponti pistikut releeplaadi toiteks. USB -juhtmes on 4 juhet, enamik kasutab 5v toite tähistamiseks punast/musta, kuid kahtluse korral kasutage õigete juhtmete hankimiseks mõõturit.

Tahvlil olevad releenõelad on ühendatud PI päises olevate GPIO tihvtidega.

Kood võimaldab teil valida GPIO tihvte, kuid vaikimisi kasutasin järgmist:

  1. Relee tihvt 1 - maandus
  2. Relee tihvt 2 - relee 1 - GPIO 0
  3. Relee tihvt 3 - relee 2 - GPIO 1
  4. Relee tihvt 4 - relee 3 - GPIO 2
  5. Relee tihvt 5 - relee 4 - GPIO 3
  6. Relee tihvt 6 - relee 5 - GPIO 4
  7. Relee tihvt 7 - relee 6 - GPIO 5
  8. Relee tihvt 8 - relee 7 - GPIO 6
  9. Relee tihvt 9 - relee 8 - GPIO 7
  10. Relee pin 10 - +5v loogika jaoks

Samm: PI seadistamine

Ma ei hakka uuesti koostama õpetust selle kohta, kuidas oma PI käivitada ja võrku ühendada.

Seal on palju juhendeid, sealhulgas suurepärane juhendatav:

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

Peate jõudma punkti, kus PI on võrgus nähtav, ja saate sellega ühenduse luua.

Pole tähtis, kas see on Etherneti või traadita ühenduse kaudu.

Selle projekti saab lõpule viia ainult Raspberry PI -ga, kasutades Geany programmeerijate redigeerijat, kuid mul on isiklikult lihtsam koodi ette valmistada arvutis Visual Studio või Eclipse'i (või isegi Notepad ++) abil ja seejärel laadida see silumiseks PI -sse VNC ühendus. Jällegi, ma ei kavatse seda siin käsitleda, kuna RPI -le VNC seadistamiseks on palju suurepäraseid juhiseid.

Kõik, mida vajate, on jõuda punkti, kus saate koodi üles laadida ja kompileerida.

Üks oluline märkus on see, et kuna UPNP -käitleja nõuab UDP multisaadet, tuleb kasutatavad liidesed seada režiimile Promiscuous.

Seda saab teha käsurealt:

pi@raspberrypi: ~ $ ifconfig eth0persc

ja / või

pi@raspberrypi: ~ $ ifconfig wlan0 perspektc

See tuleb muuta püsivaks, nii et muutsin /etc/rc.local

sudo nano / etc / rc.local

lisada rida:

sudo ifconfig eth0 perspektc

pärast esimest ribareklaami # rida, et tagada liideste seadistamine käivitamisel.

Samm: koodi allalaadimine ja koostamine

Kood ise asub minu Githubi hoidlas;

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

samas on hoidla kloonimiseks „õigeid” viise. Leidsin, et on lihtsam avada Pi töölaual Geany redaktor ja kleepida kood sisse.

Samamoodi, kui kasutate käsurea;

Looge uus kataloog

mkdir Stu

Muutke seda

cd Stu

Tehke uus tekstifail

nano StuPiMo.c

Kopeerige kood toorelt Githubist ja kleepige see uude faili

Salvesta ja välju.

Kui olete faili C lähtekoodi objektina saanud, saate selle kompileerida

gcc -o StuPiMo StuPiMo.c -l juhtmestikPi

pange tähele, et "-l wiringPi" on vajalik tagamaks, et kompilaator lingib nõutud wiringPi teegis.

Seejärel saab koodi käivitada, kasutades

./StuPiMo

Jällegi, kui soovite, et see käivitumisel käivituks, kasutage käsku:

sudo nano /etc/rc.local

järgmise rea lisamiseks

sudo/home/pi/Stu/StuPiMo &

oma /etc/rc.local faili. Ärge unustage väljumisel oma faili salvestada.

Pange tähele, et „&” on hädavajalik, et tagada alamprotsessi sünd, tagamaks, et skript pole praegu blokeeritud.

4. samm: selle kasutamine

Kui olete koodi käivitanud, paluge alexal seadmeid avastada ja ta peaks leidma kõik 8 virtuaalset Wemo seadet.

Siis tuleb lihtsalt öelda: "Alexa lülitage pesa 1 sisse" või "Alexa lülitage pesa 6 välja" jne ja vastavat releed muudetakse.

Samm: kuidas kood töötab

Kood toimib Belkin Wemo pistikupesaseadmete seeria jäljendamisel.

Selle saavutamiseks peab ta täitma 2 peamist funktsiooni

  • UPNP avastusülekande käitleja
  • „seadme käitleja” (üks virtuaalse seadme kohta) seadmesse saadetud käskude ja nõutavate vastuste haldamiseks.

Boonusfunktsioon on see, et see avaldab ka veebilehe, et võimaldada seadmete juhtimist.

UPNP -käitleja

UPNP -käitleja avab pesa SSDP -protokollipakettide jälgimiseks 239.255.255.250 pordil 1900.

See vastab kõigile M-SEARCH päringutele, mis tulevad koos avastusvastuste paketiga, mis teatab individuaalsetest emulooride emulaatoritest kõigile, kes seda küsivad.

Seadme käitleja

Seadmetöötlejad (üks virtuaalseadme kohta) jälgivad mitmeid IP -porte ja vastavad päringutele.

See küsib setup.xml vastust, kui seda küsitakse

See esitab sündmuse kirjelduse faili, kui seda küsitakse

See vastab GETBINARYSTATE päringule

See töötleb SETBINARYSTATE taotlust ja vastab sellele

Veebiserver

Veebiserver on lihtne rutiin, mis loob relee kohta nuppu sisaldava HTML -vormi.

See reageerib nuppude vajutamisele ja muudab vastavalt relee olekut.

6. samm: kohandamine ja sõbralikud nimed

Kohandamine ja sõbralikud nimed
Kohandamine ja sõbralikud nimed

Ma pole hulluks läinud, et kood oleks lihtne ja muudetav.

Põhitõdesid saab koodi alguses määratluste järgi kohandada:

// globaalsed definitsioonid#define WEBPORT 5353 // port, kus veebiserverit käitada

#define NUMDEVICES 8 // Loodavate virtuaalsete seadmete arv

#define PORTBASE 43450 // baas -IP -port, mida suurendada

WEBPORT on pordi number, millel sisseehitatud veebiserver töötab. Asja hõlbustamiseks võiks selle istuda 80 -ni, kuid leidsin, et see on vastuolus tomcati või muude kohapeal töötavate teenustega.

NUMDEVICES määratleb käivitatavate üksikute WEMO -emulaatorite arvu. Kui teil on 2 -portiline releekaart, määrake see väärtuseks 2, 4 port = 4 jne.

Seadmete sõbralikud nimed määratakse rutiinis nimega setup_names:

int setup_names (sümbolisõbralik [NUMDEVICES] [NAMELEN]) {int i = 0;

// kasuta seda tsüklit

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

sprintf (sõbralik , "Pesa %d", i + 1);

}

// või järgnev manuaalne tabel seadmete nimede sisestamiseks

/*

strcpy (sõbralik [0], "Magamistuba TV");

strcpy (sõbralik [1], "Elektritekk");

strcpy (sõbralik [2], "Magamistoa lamp");

strcpy (sõbralik [3], "Pesa 4");

strcpy (sõbralik [4], "Pesa 5");

strcpy (sõbralik [5], "Pesa 6");

strcpy (sõbralik [6], "Pesa 7");

strcpy (sõbralik [7], "Pesa 8");

*/

tagasta i;

}

Kasutasin silmust, et helistada igale seadmele „Socket n”, kuid saate selle silmuse kustutada ja selle asemel lisada oma sõbralikud nimed (veenduge, et lisate sama numbri kui NUMDEVICES), kui kustutate / * * /

Ärge unustage muudatuste tegemisel koodi uuesti kompileerida.

Soovitan: