Satura rādītājs:

Alexa Raspberry Pi releja kontrolieris: 6 soļi
Alexa Raspberry Pi releja kontrolieris: 6 soļi

Video: Alexa Raspberry Pi releja kontrolieris: 6 soļi

Video: Alexa Raspberry Pi releja kontrolieris: 6 soļi
Video: Умный выключатель в круглый подрозетник с радио повторителем, легкая и быстрая установка 2024, Jūlijs
Anonim
Alexa Raspberry Pi releja kontrolieris
Alexa Raspberry Pi releja kontrolieris
Alexa Raspberry Pi releja kontrolieris
Alexa Raspberry Pi releja kontrolieris
Alexa Raspberry Pi releja kontrolieris
Alexa Raspberry Pi releja kontrolieris

Es izveidoju šo pamācību, lai dalītos savā pieredzē par IOT ierīču integrēšanu ar Amazon Alexa.

Šis projekts ļauj kontrolēt releja dēli, kas savienots ar aveņu pi, no smarthome kontroliera.

Tas ir pārbaudīts ar Alexa, bet, šķiet, darbojas arī ar Samsung Smartthings un citām vadības saskarnēm, jo tas atdarina virkni Belkin Wemo kontaktligzdu.

Ir daudz piemēru, kuru pamatā ir izcilais FAUXMO kods, taču tas nozīmēja python apguvi un nedeva man detalizētu kontroli, kas man bija nepieciešama manām ierīcēm, un tāpēc es nolēmu to izveidot no jauna, izmantojot C kā galveno kodēšanas valodu.

Es arī negribēju, lai man būtu jādodas uz lambda koda dziļumiem vietnē Amazon.com, tāpēc esmu to saglabājis patiešām vienkāršu.

Esmu ievietojis avotu un piezīmes vietnē Github:

github.com/Switchdoctorstu/StuPiMo

Apmācība patiešām aptver, kā to panākt, un publicē manas piezīmes, ja tā palīdz citiem.

1. darbība: Piegādes un savienojumi

Piegādes un savienojumi
Piegādes un savienojumi
Piegādes un savienojumi
Piegādes un savienojumi
Piegādes un savienojumi
Piegādes un savienojumi

Nepieciešamās lietas ir viegli pieejamas vietnē Amazon / EBay:

  • Aveņu PI *
  • Pi barošanas avots
  • Dupont savienotāji
  • Stafetes dēlis
  • Vecs mikro USB vads (uz pusi samazināt releja kartes jaudu)

Jebkurš aveņu Pi derēs, es to pārbaudīju modelī B un nulle.

*Ja izmantojat Pi Zero, jums būs nepieciešams OTG tīkla adapteris (ja vien neiegādājaties “W” versiju ar buit WiFi)

Jums būs jāpievieno Pi tīklam.

Izmantojiet dupont connetors, lai savienotu releja karti ar Pi.

Ņemiet vērā, ka releja kartei jāizmanto ārēja barošana (noņemiet saiti un pievienojiet ārējam 5v). Tas darbosies no PI, bet nav ieteicams ražošanai.

Iestatīšanai es izmantoju ārēji darbināmu USB HUB. Tas nodrošina jaudu PI.

Es arī nogriezu vecā USB kabeļa galu un darbināju relejus no otrā USB savienojuma ar centrmezglu, lai paliktu drošībā. Mana “ražošanas” versija izmanto nelielu 5V 5A slēdža režīma barošanas avotu. Atkal es vienkārši pārgriezu USB vadu uz pusi, lai darbinātu Pi, izmantojot Micro-USB, un samazināju divus no dupont savienotājiem, lai barotu releja plati. USB vadā ir 4 vadi, lielākā daļa no tiem izmanto sarkano/melno, lai apzīmētu 5v barošanu, bet, ja rodas šaubas, izmantojiet skaitītāju, lai pārliecinātos, ka esat ieguvis pareizos vadus.

Plāksnes releja tapas ir savienotas ar attiecīgajām GPIO tapām PI galvenē.

Kods ļauj jums izvēlēties GPIO tapas, bet noklusējuma es izmantoju:

  1. 1. releja tapa - zemējums
  2. 2. releja tapa - 1. relejs - GPIO 0
  3. 3. releja tapa - 2. relejs - GPIO 1
  4. 4. releja tapa - 3. relejs - GPIO 2
  5. 5. releja tapa - 4. relejs - GPIO 3
  6. 6. releja tapa - 5. relejs - GPIO 4
  7. Releja tapa 7 - Relejs 6 - GPIO 5
  8. Releja tapa 8 - Relejs 7 - GPIO 6
  9. Releja tapa 9 - Relejs 8 - GPIO 7
  10. Releja tapa 10 - +5v loģikai

2. darbība: PI iestatīšana

Es netaisos atkārtoti izveidot pamācību par to, kā sākt darboties un izveidot savienojumu ar tīklu.

Ir daudz ceļvežu, tostarp lieliska pamācība:

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

Jums vajadzēs nokļūt līdz vietai, kur PI ir redzams tīklā, un jūs varat izveidot savienojumu ar to.

Nav svarīgi, vai tas notiek caur Ethernet vai bezvadu.

Šo projektu var pabeigt, izmantojot tikai Raspberry PI, izmantojot Geany programmētāju redaktoru, bet man personīgi ir vieglāk sagatavot kodu, izmantojot datoru, izmantojot Visual Studio vai Eclipse (vai pat Notepad ++), un pēc tam augšupielādēt to PI atkļūdošanai, izmantojot VNC savienojums. Atkal es to neaplūkošu, jo ir daudz lielisku pamācību par VNC iestatīšanu RPi.

Viss, kas jums nepieciešams, ir nokļūt līdz vietai, kur varat augšupielādēt un apkopot kodu.

Viena piezīme, kas ir svarīga, ir tā, ka, tā kā UPNP apstrādātājam ir nepieciešama UDP multicast, izmantotajām saskarnēm jābūt iestatītām “Promiscuous” režīmā.

To var izdarīt komandrindā:

pi@raspberrypi: ~ $ ifconfig eth0persc

un / vai

pi@raspberrypi: ~ $ ifconfig wlan0 perspektc

Tas ir jāpadara pastāvīgs, tāpēc es rediģēju /etc/rc.local

sudo nano / etc / rc.local

iekļaut rindu:

sudo ifconfig eth0 perspektc

pēc pirmā reklāmkaroga # rindu komplekta, lai pārliecinātos, ka saskarnes tika iestatītas startēšanas laikā.

3. darbība: koda lejupielāde un apkopošana

Kods pats atrodas manā Github krātuvē;

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

lai gan ir “pareizi” veidi, kā klonēt repozitoriju. man bija vieglāk vienkārši atvērt Geany redaktoru Pi darbvirsmā un ielīmēt kodu.

Līdzīgi, ja izmantojat komandrindu;

Izveidojiet jaunu direktoriju

mkdir Stu

Mainīt uz to

cd Stu

Izveidojiet jaunu teksta failu

nano StuPiMo.c

Nokopējiet kodu no neapstrādātas Github un ielīmējiet to jaunajā failā

Saglabāt un iziet.

Kad fails ir C avota koda objekts, varat to apkopot, izmantojot

gcc -o StuPiMo StuPiMo.c -l wiringPi

ņemiet vērā, ka "-l wiringPi" ir nepieciešams, lai nodrošinātu, ka apkopotājs saista nepieciešamo wiringPi bibliotēku.

Pēc tam kodu var palaist, izmantojot

./StuPiMo

Atkal, ja vēlaties, lai tas darbotos startēšanas laikā, izmantojiet komandu:

sudo nano /etc/rc.local

lai pievienotu šādu rindu

sudo/home/pi/Stu/StuPiMo &

uz /etc/rc.local failu. Neaizmirstiet saglabāt failu, izejot.

Ņemiet vērā, ka & ir būtisks, lai nodrošinātu apakšprocesa izveidi, lai nodrošinātu, ka skripts šajā brīdī netiek bloķēts.

4. solis: tā izmantošana

Kad esat palaidis kodu, palūdziet alexai "Atklāt ierīces", un viņai jāatrod visas 8 virtuālās Wemo ierīces.

Tad vienkārši jāsaka: "Alexa ieslēdz ligzdu 1" vai "Alexa izslēdz ligzdu 6" utt., Un attiecīgais relejs tiks mainīts.

5. darbība. Kā darbojas kods

Kods darbojas, emulējot vairākas Belkin Wemo ligzdas ierīces.

Lai to panāktu, tai ir jāpilda 2 galvenās funkcijas

  • UPNP atklāšanas apraides apstrādātājs
  • “ierīces apstrādātājs” (viens katrai virtuālajai ierīcei), lai pārvaldītu uz ierīci nosūtītās komandas un nepieciešamās atbildes.

Papildu funkcija ir tā, ka tā arī publicē tīmekļa lapu, lai ļautu kontrolēt ierīces.

UPNP apstrādātājs

UPNP apstrādātājs atver ligzdu, lai uzraudzītu SSDP protokola paketes 239.255.255.250 portā 1900.

Tas atbild uz visiem “M-SEARCH” vaicājumiem, kas tiek saņemti, izmantojot atklāšanas atbilžu paketi, kas izsludina individuālos wemo emulatorus ikvienam, kas jautā.

Ierīču apstrādātājs

Ierīču apstrādātāji (viens katrai virtuālajai ierīcei) pārrauga virkni IP portu un atbild uz pieprasījumiem.

Kad tas tiks prasīts, tas sniegs atbildi setup.xml

Pēc pieprasījuma tas kalpos notikuma apraksta failam

Tā atbildēs uz GETBINARYSTATE pieprasījumu

Tā apstrādās un atbildēs uz SETBINARYSTATE pieprasījumu

Tīmekļa serveris

Tīmekļa serveris ir vienkārša rutīna, kas izveido HTML veidlapu, kurā ir viena releja poga.

Tas reaģēs uz nospiestajām pogām un attiecīgi pārslēgs releja stāvokli.

6. darbība. Pielāgošana un draudzīgi vārdi

Pielāgošana un draudzīgi vārdi
Pielāgošana un draudzīgi vārdi

Es neesmu sajukusi prātā ar kodu, lai tas būtu vienkāršs un rediģējams.

Pamatus var pielāgot pēc definīcijām koda sākumā:

// globālās definīcijas#define WEBPORT 5353 // ports, kurā palaist tīmekļa serveri

#define NUMDEVICES 8 // Izveidojamo virtuālo ierīču skaits

#define PORTBASE 43450 // bāzes IP ports, lai palielinātu no

WEBPORT ir porta numurs, kurā darbojas iebūvētais tīmekļa serveris. To varētu likt sēdēt 80 gadu vecumā, lai atvieglotu lietas, taču es atklāju, ka tas ir pretrunā ar runci vai citiem pakalpojumiem, kas darbojas lokāli.

NUMDEVICES nosaka palaižamo atsevišķo WEMO emulatoru skaitu. Ja jums ir 2 portu releja karte, iestatiet to uz 2, 4 porti = 4 utt.

Ierīču draudzīgie nosaukumi ir iestatīti rutīnā ar nosaukumu setup_names:

int setup_names (simbolam draudzīgs [NUMDEVICES] [NAMELEN]) {int i = 0;

// izmantot šo cilpu

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

sprintf (draudzīgs , "Socket %d", i + 1);

}

// vai šo rokasgrāmatas tabulu, lai aizpildītu ierīču nosaukumus

/*

strcpy (draudzīgi [0], "Guļamistabas TV");

strcpy (draudzīgs [1], "Elektriskā sega");

strcpy (draudzīgs [2], "Guļamistabas lampa");

strcpy (draudzīgs [3], "Socket 4");

strcpy (draudzīgs [4], "Socket 5");

strcpy (draudzīgs [5], "ligzda 6");

strcpy (draudzīgs [6], "Socket 7");

strcpy (draudzīgs [7], "Socket 8");

*/

atgriezties i;

}

Es izmantoju cilpu, lai izsauktu katru ierīci “Socket n”, bet jūs varat izdzēst šo cilpu un pievienot savus draudzīgos vārdus (vienkārši pārliecinieties, vai pievienojat tādu pašu numuru kā NUMDEVICES), ja izdzēšat / * * /

Neaizmirstiet atkārtoti apkopot kodu, ja veicat izmaiņas.

Ieteicams: