Sisällysluettelo:

Alexa Raspberry Pi -releohjain: 6 vaihetta
Alexa Raspberry Pi -releohjain: 6 vaihetta

Video: Alexa Raspberry Pi -releohjain: 6 vaihetta

Video: Alexa Raspberry Pi -releohjain: 6 vaihetta
Video: How to create wifi password for each different person 2024, Marraskuu
Anonim
Alexa Raspberry Pi -releohjain
Alexa Raspberry Pi -releohjain
Alexa Raspberry Pi -releohjain
Alexa Raspberry Pi -releohjain
Alexa Raspberry Pi -releohjain
Alexa Raspberry Pi -releohjain

Luin tämän Instructable -ohjelman jakaakseni kokemuksiani IOT -laitteiden integroinnista Amazonin Alexan kanssa.

Tämän projektin avulla vadelmapi: hen liitettyä relelevyä voidaan ohjata Smarthome -ohjaimella.

Se on testattu Alexan kanssa, mutta näyttää myös toimivan hyvin Samsung Smartthings -laitteiden ja muiden ohjausliitäntöjen kanssa, koska se emuloi useita Belkin Wemo -liitäntöjä.

On olemassa paljon esimerkkejä, jotka perustuvat erinomaiseen FAUXMO-koodiin, mutta tämä tarkoitti pythonin oppimista eikä antanut minulle yksityiskohtaista ohjausta, jota tarvitsin laitteilleni, ja siksi päätin luoda uuden tyhjästä käyttäen C: tä peruskoodauskieleni.

En myöskään halunnut mennä Amazon.comin lambda -koodin syvyyksiin, joten olen pitänyt sen todella yksinkertaisena.

Olen lähettänyt lähteen ja muistiinpanot Githubiin:

github.com/Switchdoctorstu/StuPiMo

Opetusohjelman tarkoituksena on todella kattaa sen saaminen toimimaan ja julkaista muistiinpanoni siltä varalta, että se auttaa muita.

Vaihe 1: Tarvikkeet ja liitännät

Tarvikkeet ja liitännät
Tarvikkeet ja liitännät
Tarvikkeet ja liitännät
Tarvikkeet ja liitännät
Tarvikkeet ja liitännät
Tarvikkeet ja liitännät

Tarvitsemasi asiat ovat helposti saatavilla Amazon / EBay:

  • Vadelma PI *
  • Pi virtalähde
  • Dupont -liittimet
  • Rele Board
  • Vanha mikro -USB -johto (puolittaa relekortin virran)

Mikä tahansa vadelma Pi toimii, olen testannut tämän mallilla B ja Zero.

*Jos käytät Pi Zeroa, tarvitset OTG -verkkosovittimen (ellet osta W -versiota, jossa on WiFi -yhteys)

Sinun on yhdistettävä Pi verkkoon.

Liitä relekortti Pi -laitteeseen dupont -liitäntöjen avulla.

Huomaa, että relekortin tulee käyttää ulkoista virtalähdettä (poista linkki ja kytke ulkoinen 5v). Se toimii PI: n virtalähteenä, mutta sitä ei suositella tuotannossa.

Asetuksissani käytin ulkoisesti toimivaa USB -HUBia. Tämä antaa virtaa PI: lle.

Katkaisin myös vanhan USB -kaapelin pään ja toimitin releet toisesta USB -liitännästä keskittimeen pysyäkseni turvassa. "Tuotanto" -versiossani on pieni 5V 5A -kytkentävirtalähde. Jälleen leikkasin USB-johdon puoliksi virtalähteeksi Pi Micro-USB: n kautta ja katkaisin kaksi dupont-liitintä relelevyn virtalähteeksi. USB -johdossa on 4 johtoa, joista useimmat käyttävät punaista/mustaa 5V -jännitteen syöttämiseen, mutta jos olet epävarma, käytä mittaria varmistaaksesi, että saat oikeat johdot.

Kortin releen nastat on kytketty PI -otsikon vastaaviin GPIO -nastoihin.

Koodin avulla voit valita GPIO -nastat, mutta käyttämäni oletusarvo oli:

  1. Releen nasta 1 - Maadoitus
  2. Releen nasta 2 - Rele 1 - GPIO 0
  3. Releen nasta 3 - Rele 2 - GPIO 1
  4. Releen nasta 4 - Rele 3 - GPIO 2
  5. Releen nasta 5 - Rele 4 - GPIO 3
  6. Releen nasta 6 - Rele 5 - GPIO 4
  7. Releen nasta 7 - Rele 6 - GPIO 5
  8. Releen nasta 8 - Rele 7 - GPIO 6
  9. Releen nasta 9 - Rele 8 - GPIO 7
  10. Releen nasta 10 - +5v logiikkaa varten

Vaihe 2: PI -asetukset

En aio luoda uudelleen opetusohjelmaa PI: n käynnistämisestä ja kytkemisestä verkkoon.

On olemassa monia oppaita, mukaan lukien erinomainen opettavainen osoitteessa:

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

Sinun on saatava itsesi siihen pisteeseen, jossa PI näkyy verkossa ja voit muodostaa yhteyden siihen.

Ei ole väliä onko tämä Ethernetin vai langattoman yhteyden kautta.

Tämä projekti voidaan suorittaa loppuun vain Raspberry PI: llä Geany Programmers Editor -ohjelman avulla, mutta minusta on henkilökohtaisesti helpompaa tehdä koodin valmistelu tietokoneella Visual Studion tai Eclipsen (tai jopa Notepad ++: n) avulla ja ladata se sitten PI: hen virheenkorjausta varten VNC -liitäntä. Jälleen en aio käsitellä tätä täällä, koska VNC: n asettaminen RPi: lle on monia erinomaisia ohjeita.

Tarvitset vain päästä pisteeseen, jossa voit ladata ja koota koodin.

Yksi tärkeä huomautus on, että koska UPNP -käsittelijä vaatii UDP -monilähetystä, käytetyt rajapinnat on asetettava 'Promiscuous' -tilaan.

Tämä voidaan tehdä komentoriviltä:

pi@raspberrypi: ~ $ ifconfig eth0persc

ja tai

pi@raspberrypi: ~ $ ifconfig wlan0persc

Tämä on tehtävä pysyväksi, joten muokkasin /etc/rc.local

sudo nano / etc / rc.local

sisällyttää rivi:

sudo ifconfig eth0 procc

ensimmäisen bannerin # rivin jälkeen varmistaaksesi, että rajapinnat on asetettu käynnistyksen yhteydessä.

Vaihe 3: Koodin lataaminen ja kääntäminen

Koodi itse istuu Github -arkistossani;

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

kun on olemassa "oikeita" tapoja kloonata arkisto. Minusta oli helpompaa vain avata Geany -editori Pi -työpöydällä ja liittää koodi sisään.

Samoin, jos käytät komentoriviä;

Luo uusi hakemisto

mkdir Stu

Vaihda siihen

cd Stu

Luo uusi tekstitiedosto

nano StuPiMo.c

Kopioi koodi Github -raaka -aineesta ja liitä se uuteen tiedostoon

Tallenna ja poistu.

Kun tiedosto on C -lähdekoodiobjekti, voit kääntää sen käyttämällä

gcc -o StuPiMo StuPiMo.c -l johdotusPi

Huomaa, että "-l wiringPi" tarvitaan sen varmistamiseksi, että kääntäjä linkittää vaadittuun wiringPi-kirjastoon.

Koodi voidaan sitten suorittaa käyttämällä

./StuPiMo

Jälleen, jos haluat tämän toimivan käynnistyksen yhteydessä, käytä komentoa:

sudo nano /etc/rc.local

lisätäksesi seuraavan rivin

sudo/home/pi/Stu/StuPiMo &

/etc/rc.local -tiedostoosi. Älä unohda tallentaa tiedostoa poistuttaessa.

Huomaa, että & on välttämätön osaprosessin syntymisen varmistamiseksi, jotta komentosarja ei esty tässä vaiheessa.

Vaihe 4: Käytä sitä

Kun olet saanut koodin toimimaan, pyydä Alexaa etsimään laitteita ja hänen pitäisi löytää kaikki 8 virtuaalista Wemo -laitetta.

Sitten vain sanotaan: "Alexa kytke pistorasia 1" tai "Alexa sammuta pistorasia 6" jne. Ja asiaankuuluva rele vaihdetaan.

Vaihe 5: Kuinka koodi toimii

Koodi toimii emuloimalla useita Belkin Wemo -liitäntälaitteita.

Tämän saavuttamiseksi sen on käsiteltävä 2 päätoimintoa

  • UPNP -etsintälähetyskäsittelijä
  • 'laitteenkäsittelijä' (yksi per virtuaalilaite) hallitsemaan laitteelle lähetettyjä komentoja ja tarvittavia vastauksia.

Bonusominaisuus on, että se julkaisee myös verkkosivun laitteiden hallinnan mahdollistamiseksi.

UPNP -käsittelijä

UPNP -käsittelijä avaa pistorasian SSDP -protokollapakettien valvontaan 239.255.255.250 -portissa 1900.

Se vastaa kaikkiin M-SEARCH-kyselyihin, jotka tulevat löytövastauspaketilla, joka ilmoittaa yksittäiset wemo-emulaattorit jokaiselle, joka pyytää.

Laitteenkäsittelijä

Laitteenkäsittelijät (yksi per virtuaalilaite) valvovat useita IP -portteja ja vastaavat pyyntöihin.

Se palvelee setup.xml -vastausta pyydettäessä

Se palvelee tapahtuman kuvaustiedostoa pyydettäessä

Se vastaa GETBINARYSTATE -pyyntöön

Se käsittelee SETBINARYSTATE -pyynnön ja vastaa siihen

Verkkopalvelin

Verkkopalvelin on yksinkertainen rutiini, joka luo HTML -lomakkeen, joka sisältää painikkeen per rele.

Se reagoi painikkeisiin ja vaihtaa releen tilan vastaavasti.

Vaihe 6: Mukauttaminen ja ystävälliset nimet

Räätälöinti ja ystävälliset nimet
Räätälöinti ja ystävälliset nimet

En ole tullut hulluksi koodista pitämään se yksinkertaisena ja muokattavana.

Perusasiat voidaan mukauttaa määritteillä koodin alussa:

// globaalit määritelmät#define WEBPORT 5353 // portti, jolla web -palvelin ajetaan

#define NUMDEVICES 8 // Luodavien virtuaalilaitteiden määrä

#define PORTBASE 43450 // perus IP -portti, josta sitä lisätään

WEBPORT on portin numero, jolla sisäänrakennettu verkkopalvelin toimii. Tämä voitaisiin asettaa istumaan 80 -paikalle helpottaakseen asioita, mutta huomasin, että se oli ristiriidassa tomcatin tai muiden paikallisesti toimivien palveluiden kanssa.

NUMDEVICES määrittää lanseerattavien yksittäisten WEMO -emulaattorien lukumäärän. Jos sinulla on 2 -porttinen relekortti, aseta tämä arvoksi 2, 4 portti = 4 jne.

Laitteiden ystävälliset nimet asetetaan rutiinille nimeltä setup_names:

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

// käytä tätä silmukkaa

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

sprintf (ystävällinen , "Socket %d", i + 1);

}

// tai seuraava manuaalinen taulukko laitenimien täyttämiseksi

/*

strcpy (ystävällinen [0], "Makuuhuone TV");

strcpy (ystävällinen [1], "Electric Blanket");

strcpy (ystävällinen [2], "Makuuhuoneen lamppu");

strcpy (ystävällinen [3], "Socket 4");

strcpy (ystävällinen [4], "Socket 5");

strcpy (ystävällinen [5], "Socket 6");

strcpy (ystävällinen [6], "Socket 7");

strcpy (ystävällinen [7], "Socket 8");

*/

palauta i;

}

Käytin silmukkaa soittamaan jokaiselle laitteelle 'Socket n', mutta voit poistaa tämän silmukan ja lisätä omia ystävällisiä nimiäsi (varmista, että lisäät saman numeron kuin NUMDEVICES), jos poistat / * * /

Muista kääntää koodi uudelleen, jos teet muutoksia.

Suositeltava: