Kazalo:

Relejni krmilnik Alexa Raspberry Pi: 6 korakov
Relejni krmilnik Alexa Raspberry Pi: 6 korakov

Video: Relejni krmilnik Alexa Raspberry Pi: 6 korakov

Video: Relejni krmilnik Alexa Raspberry Pi: 6 korakov
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Julij
Anonim
Relejni krmilnik Alexa Raspberry Pi
Relejni krmilnik Alexa Raspberry Pi
Relejni krmilnik Alexa Raspberry Pi
Relejni krmilnik Alexa Raspberry Pi
Relejni krmilnik Alexa Raspberry Pi
Relejni krmilnik Alexa Raspberry Pi

Ustvaril sem ta Instructable, da bi delil svoje izkušnje z integracijo naprav IOT z Amazonovo Alexa.

Ta projekt omogoča krmiljenje relejne plošče, povezane z malinovim pi, s krmilnikom pametnega doma.

Preizkušeno je bilo z Alexa, vendar se zdi, da deluje tudi s Samsung Smartthings in drugimi nadzornimi vmesniki, saj posnema vrsto vtičnic Belkin Wemo.

Obstaja veliko primerov, ki temeljijo na odlični kodi FAUXMO, vendar je to pomenilo učenje pythona in mi ni dalo podrobnega nadzora, ki sem ga potreboval za svoje naprave, zato sem se odločil, da ga znova ustvarim iz nič z uporabo C kot osnovnega kodirajočega jezika.

Prav tako mi ni bilo treba iti v globino lambda kode na Amazon.com, zato sem ostal zelo preprost.

Vir in opombe sem objavil na Githubu:

github.com/Switchdoctorstu/StuPiMo

Vadnica res zajema, kako naj deluje, in objaviti svoje zapiske, če to pomaga drugim.

1. korak: Zaloge in povezave

Pribor in priključki
Pribor in priključki
Pribor in priključki
Pribor in priključki
Pribor in priključki
Pribor in priključki

Stvari, ki jih potrebujete, so na voljo na Amazon / EBay:

  • Malina PI *
  • Napajanje Pi
  • Priključki Dupont
  • Relejna plošča
  • Stari mikro USB kabel (za prepolovitev napajanja relejne kartice)

Vsak malin Pi bo deloval, to sem preizkusil na modelih B in Zero.

*Če uporabljate Pi Zero, boste potrebovali omrežni adapter OTG (razen če kupite različico 'W' z vmesnikom WiFi)

Pi morate povezati z omrežjem.

S priključki dupont priključite relejno kartico na Pi.

Upoštevajte, da mora relejna kartica uporabljati zunanje napajanje (odstranite povezavo in se povežite z zunanjim 5V). Deloval bo z napajalnikom PI, vendar ni priporočljivo za proizvodnjo.

Za namestitev sem uporabil zunanje napajalno zvezdišče USB. To zagotavlja moč PI.

Odrezal sem tudi konec starega kabla USB in releje napajal iz druge povezave USB na pesto, da sem ostal varen. Moja "produkcijska" različica uporablja majhen 5V 5A stikalni napajalnik. Spet sem prepolovil USB kabel za napajanje Pi prek Micro-USB in odrezal dva priključka dupont za napajanje relejne plošče. V USB kabel so 4 žice, večina uporablja rdeče/črno za označevanje 5 -voltnega napajanja, če pa ste v dvomih, uporabite merilnik, da zagotovite, da dobite pravilne žice.

Relejski zatiči na plošči so povezani z ustreznimi zatiči GPIO na glavi PI.

Koda vam omogoča, da izberete zatiče GPIO, vendar sem privzeto uporabil:

  1. Rele rele 1 - ozemljitev
  2. Rele rele 2 - Rele 1 - GPIO 0
  3. Rele rele 3 - Rele 2 - GPIO 1
  4. Relejni pin 4 - Rele 3 - GPIO 2
  5. Rele rele Pin 5 - Rele 4 - GPIO 3
  6. Rele rele 6 - Rele 5 - GPIO 4
  7. Relejni pin 7 - Rele 6 - GPIO 5
  8. Rele rele 8 - Rele 7 - GPIO 6
  9. Relejni pin 9 - Rele 8 - GPIO 7
  10. Relejni pin 10 - +5v za logiko

Korak: Nastavitev PI

Ne bom ponovno ustvaril vadnice o tem, kako vzpostaviti in zagnati vaš PI ter ga povezati z omrežjem.

Obstaja veliko vodnikov, vključno z odličnimi navodili na:

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

Morali boste priti do točke, kjer je PI viden v omrežju in se lahko povežete z njim.

Ni pomembno, ali gre za Ethernet ali Wireless.

Ta projekt je mogoče dokončati samo z Raspberry PI z urejevalnikom programov Geany, vendar meni osebno lažje pripravi kodo v računalniku z uporabo Visual Studio ali Eclipse (ali celo Notepad ++) in ga nato naložim v PI za odpravljanje napak z uporabo VNC povezava. Spet tega ne bom obravnaval, saj obstaja veliko odličnih navodil za nastavitev VNC na RPi.

Vse, kar potrebujete, je, da pridete do točke, kjer lahko naložite in sestavite kodo.

Pomembno je le, da mora upravljavec UPNP za večpredstavnost UDP uporabiti uporabljene vmesnike na način "Promiscuous".

To lahko storite v ukazni vrstici:

pi@raspberrypi: ~ $ ifconfig eth0 promisc

in / ali

pi@raspberrypi: ~ $ ifconfig wlan0 promisc

To mora biti trajno, zato sem uredil /etc/rc.local

sudo nano / etc / rc.local

vključiti vrstico:

sudo ifconfig eth0 promisc

po prvem nizu pasic # vrstic, da zagotovite, da so bili vmesniki nastavljeni ob zagonu.

3. korak: Prenos in sestavljanje kode

Koda sama sedi v mojem Github -u;

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

čeprav obstajajo "pravilni" načini za kloniranje skladišča. lažje mi je bilo odpreti urejevalnik Geany na namizju Pi in vnesti kodo.

Podobno, če uporabljate ukazno vrstico;

Ustvarite nov imenik

mkdir Stu

Spremenite ga

cd Stu

Ustvarite novo besedilno datoteko

nano StuPiMo.c

Kopirajte kodo iz Github raw in jo prilepite v novo datoteko

Shrani in zapri.

Ko imate datoteko kot objekt izvorne kode C, jo lahko sestavite z uporabo

gcc -o StuPiMo StuPiMo.c -l ožičenjePi

upoštevajte, da je "-l wiringPi" potreben za zagotovitev, da se prevajalnik poveže v zahtevano knjižnico wiringPi.

Kodo lahko nato zaženete z uporabo

./StuPiMo

Še enkrat, če želite, da se to zažene ob zagonu, uporabite ukaz:

sudo nano /etc/rc.local

da dodate naslednjo vrstico

sudo/home/pi/Stu/StuPiMo &

v datoteko /etc/rc.local. Ne pozabite shraniti datoteke ob izhodu.

Upoštevajte, da sta '&' bistvena za zagotovitev, da se podproces sproži, da se zagotovi, da skript na tej točki ni blokiran.

4. korak: Uporabite ga

Ko zaženete kodo, prosite alexa, da odkrije odkrivanje naprav, naj najde vseh 8 virtualnih naprav Wemo.

Potem je samo primer reči: "Alexa vklopi vtičnico 1" ali "Alexa izklopi vtičnico 6" itd. In ustrezni rele se bo spremenil.

5. korak: Kako deluje koda

Koda deluje tako, da posnema vrsto vtičnih naprav Belkin Wemo.

Če želite to doseči, mora opraviti 2 glavni funkciji

  • upravljavec oddajanja odkrivanja UPNP
  • "upravljavec naprav" (en na virtualno napravo) za upravljanje ukazov, poslanih v napravo, in zahtevanih odzivov.

Bonusna funkcija je, da objavi tudi spletno stran, ki omogoča nadzor naprav.

Upravljavec UPNP

Upravljavec UPNP odpre vtičnico za spremljanje paketov protokola SSDP na vratih 239.255.255.250 1900.

Odzove se na vsa poizvedba 'M-SEARCH', ki prihaja z odzivnim paketom odkritja, ki vsakega prosilca obvesti posamezne emulatorje wemo.

Obdelovalec naprav

Obdelovalci naprav (eno na virtualno napravo) spremljajo vrsto vrat IP in se odzivajo na zahteve.

Na zahtevo bo poslal odgovor setup.xml

Na zahtevo bo služil datoteki z opisom dogodka

Odgovoril bo na zahtevo GETBINARYSTATE

Obdelal bo in odgovoril na zahtevo SETBINARYSTATE

Spletni strežnik

Spletni strežnik je preprosta rutina, ki ustvari obrazec HTML, ki vsebuje gumb na rele.

Odzval se bo na pritisnjene gumbe in ustrezno preklopil stanje releja.

6. korak: prilagajanje in prijazna imena

Prilagodljiva in prijazna imena
Prilagodljiva in prijazna imena

Nisem nor, da je koda preprosta in urejena.

Osnove lahko prilagodite z definicijami na začetku kode:

// globalne definicije#definiraj WEBPORT 5353 // vrata za izvajanje spletnega strežnika

#define NUMDEVICES 8 // Število navideznih naprav za ustvarjanje

#define PORTBASE 43450 // osnovna vrata IP za povečanje od

WEBPORT je številka vrat, na katerih deluje vgrajen spletni strežnik. To bi lahko postavili na 80, da bi olajšali stvari, vendar sem ugotovil, da je v nasprotju s tomcat ali drugimi lokalnimi storitvami.

NUMDEVICES določa število posameznih emulatorjev WEMO za zagon. Če imate 2 -portno relejsko kartico, nastavite to na 2, 4 vrata = 4 itd.

Prijazna imena naprav so nastavljena v rutini, imenovani setup_names:

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

// uporabite to zanko

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

sprintf (prijazno , "Vtičnica %d", i + 1);

}

// ali naslednjo ročno tabelo za vnos imen naprav

/*

strcpy (prijazno [0], "TV v spalnici");

strcpy (prijazno [1], "Električna odeja");

strcpy (prijazno [2], "Svetilka za spalnico");

strcpy (prijazno [3], "Vtičnica 4");

strcpy (prijazno [4], "Vtičnica 5");

strcpy (prijazno [5], "Vtičnica 6");

strcpy (prijazno [6], "Vtičnica 7");

strcpy (prijazno [7], "Vtičnica 8");

*/

vrniti i;

}

Uporabil sem zanko, da sem vsako napravo poklical 'Socket n', vendar lahko to zanko izbrišete in namesto tega dodate svoja prijazna imena (samo poskrbite, da dodate isto številko kot NUMDEVICES), če izbrišete / * * /

Če naredite kakršne koli spremembe, kodo znova sestavite.

Priporočena: