Turinys:

„Alexa Raspberry Pi“relės valdiklis: 6 žingsniai
„Alexa Raspberry Pi“relės valdiklis: 6 žingsniai

Video: „Alexa Raspberry Pi“relės valdiklis: 6 žingsniai

Video: „Alexa Raspberry Pi“relės valdiklis: 6 žingsniai
Video: ПОЧЕМУ Я ЖДУ L4D3 2024, Liepa
Anonim
„Alexa Raspberry Pi“relės valdiklis
„Alexa Raspberry Pi“relės valdiklis
„Alexa Raspberry Pi“relės valdiklis
„Alexa Raspberry Pi“relės valdiklis
„Alexa Raspberry Pi“relės valdiklis
„Alexa Raspberry Pi“relės valdiklis

Sukūriau šią instrukciją, kad galėčiau pasidalinti savo patirtimi integruojant IOT įrenginius su „Amazon“„Alexa“.

Šis projektas leidžia valdyti relės plokštę, prijungtą prie aviečių pi, naudojant „smarthome“valdiklį.

Jis buvo išbandytas su „Alexa“, bet taip pat atrodo gerai veikiantis su „Samsung Smartthings“ir kitomis valdymo sąsajomis, nes imituoja „Belkin Wemo“lizdų seriją.

Yra daug pavyzdžių, pagrįstų puikiu FAUXMO kodu, tačiau tai reiškė „python“mokymąsi ir nesuteikė man išsamios kontrolės, reikalingos mano įrenginiams, todėl nusprendžiau jį sukurti iš naujo, naudodamas C kaip pagrindinę kodavimo kalbą.

Aš taip pat nenorėjau eiti į „lambda“kodo gelmes „Amazon.com“, todėl laikiau tai tikrai paprasta.

Aš paskelbiau šaltinį ir pastabas „Github“:

github.com/Switchdoctorstu/StuPiMo

Pamoka iš tikrųjų apima tai, kaip tai padaryti, ir paskelbti mano užrašus, jei tai padės kitiems.

1 žingsnis: reikmenys ir jungtys

Priedai ir jungtys
Priedai ir jungtys
Priedai ir jungtys
Priedai ir jungtys
Priedai ir jungtys
Priedai ir jungtys

Reikalingi dalykai yra lengvai prieinami „Amazon“/ „EBay“:

  • Aviečių PI *
  • Pi maitinimo šaltinis
  • Dupont jungtys
  • Estafetės lenta
  • Senas „micro USB“laidas (perpus sumažinti relės kortelės maitinimą)

Bet koks „Raspberry Pi“veiks, aš tai išbandžiau su „B“ir „Zero“modeliais.

*Jei naudojate „Pi Zero“, jums reikės OTG tinklo adapterio (nebent perkate „W“versiją su „WiFi“)

Turėsite prijungti „Pi“prie tinklo.

Norėdami prijungti relės kortelę prie „Pi“, naudokite „dupont connetors“.

Atkreipkite dėmesį, kad relės kortelė turėtų naudoti išorinį maitinimą (nuimkite nuorodą ir prijunkite prie išorinio 5v). Jis veiks iš PI, bet nerekomenduojamas gamybai.

Sąrankai aš naudoju išoriškai maitinamą USB HUB. Tai suteikia galios PI.

Taip pat nukirpiau seno USB kabelio galą ir įjungiau relių maitinimą iš antrojo USB jungties į šakotuvą, kad būčiau saugus. Mano „gamybinėje“versijoje naudojamas mažas 5V 5A jungiklio režimo maitinimo šaltinis. Vėlgi, aš tik perpjoviau USB laidą per pusę, kad galėčiau maitinti „Pi“per „Micro-USB“, ir nutraukiau dvi „dupont“jungtis, kad įjungčiau relės plokštę. USB laide yra 4 laidai, dažniausiai 5V maitinimo šaltiniui žymėti naudojama raudona/juoda spalva, tačiau jei abejojate, naudokite matuoklį, kad įsitikintumėte, jog turite tinkamus laidus.

Lentos relės kaiščiai yra prijungti prie atitinkamų GPIO kaiščių PI antraštėje.

Kodas leidžia pasirinkti GPIO kaiščius, tačiau numatytasis aš naudoju:

  1. Relės kaištis 1 - įžeminimas
  2. 2 relės kaištis - 1 relė - GPIO 0
  3. Relės kaištis 3 - 2 relė - GPIO 1
  4. Relės kaištis 4 - 3 relė - GPIO 2
  5. Relės kaištis 5 - 4 relė - GPIO 3
  6. Relės kaištis 6 - 5 relė - GPIO 4
  7. Relės kaištis 7 - 6 relė - GPIO 5
  8. Relės kaištis 8 - 7 relė - GPIO 6
  9. Relės kaištis 9 - 8 relė - GPIO 7
  10. Relės kaištis 10 - +5v logikai

2 žingsnis: PI sąranka

Aš neketinu iš naujo kurti pamokos, kaip paleisti ir paleisti PI ir prijungti prie tinklo.

Yra daug vadovų, įskaitant puikius nurodymus:

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

Turėsite patekti į tašką, kuriame tinkle matomas PI, ir galėsite prie jo prisijungti.

Nesvarbu, ar tai eternetas, ar belaidis.

Šį projektą galima užbaigti naudojant tik „Raspberry PI“naudojant „Geany“programuotojų redaktorių, tačiau man asmeniškai lengviau paruošti kodą kompiuteryje naudojant „Visual Studio“ar „Eclipse“(ar net „Notepad ++“) ir įkelti jį į PI derinimui naudojant VNC jungtis. Vėlgi, aš to nesakysiu, nes yra daug puikių instrukcijų, kaip nustatyti VNC RPi.

Viskas, ko jums reikia, yra pasiekti, kad galėtumėte įkelti ir surinkti kodą.

Viena svarbi pastaba yra ta, kad kadangi UPNP tvarkytojui reikalingas UDP daugiaadresis ryšys, naudojamos sąsajos turi būti nustatytos į „Promiscuous“režimą.

Tai galima padaryti komandų eilutėje:

pi@raspberrypi: ~ $ ifconfig eth0persc

ir (arba)

pi@raspberrypi: ~ $ ifconfig wlan0 perspc

Tai reikia padaryti nuolatine, todėl redagavau /etc/rc.local

sudo nano / etc / rc.local

įtraukti eilutę:

sudo ifconfig eth0 proc

po pirmojo antraštės # eilučių rinkinio, siekiant užtikrinti, kad sąsajos būtų nustatytos paleidžiant.

3 veiksmas: kodo atsisiuntimas ir sudarymas

Pats kodas yra mano „Github“saugykloje;

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

nors yra „teisingų“būdų saugyklą klonuoti. man buvo lengviau tiesiog atidaryti „Geany“redaktorių „Pi“darbalaukyje ir įklijuoti kodą.

Panašiai, jei naudojate komandinę eilutę;

Sukurkite naują katalogą

mkdir Stu

Pakeiskite jį

cd Stu

Sukurkite naują teksto failą

nano StuPiMo.c

Nukopijuokite kodą iš „Github raw“ir įklijuokite jį į naują failą

Išsaugoti ir išeiti.

Kai turėsite failą kaip C šaltinio kodo objektą, galėsite jį kompiliuoti naudodami

gcc -o StuPiMo StuPiMo.c -l wiringPi

atkreipkite dėmesį, kad „-l wiringPi“reikalingas norint užtikrinti, kad kompiliatorius susietų reikiamą „wiringPi“biblioteką.

Tada kodą galima paleisti naudojant

./StuPiMo

Vėlgi, jei norite, kad tai būtų paleista paleidžiant, naudokite komandą:

sudo nano /etc/rc.local

pridėti šią eilutę

sudo/home/pi/Stu/StuPiMo &

į /etc/rc.local failą. Išeidami nepamirškite išsaugoti failo.

Atminkite, kad „&“yra būtinas siekiant užtikrinti, kad atsirastų papildomas procesas, siekiant užtikrinti, kad scenarijus šiuo metu nebūtų užblokuotas.

4 žingsnis: naudokite

Kai kodas bus paleistas, paprašykite alexos „Atrasti įrenginius“ir ji turėtų rasti visus 8 virtualius „Wemo“įrenginius.

Tada tiesiog sakoma: „Alexa įjunk 1 lizdą“arba „Alexa išjunk 6 lizdą“ir pan. Ir atitinkama relė bus pakeista.

5 veiksmas: kaip veikia kodas

Kodas veikia imituojant „Belkin Wemo“lizdo įrenginių seriją.

Kad tai pasiektų, jis turi atlikti 2 pagrindines funkcijas

  • UPNP atradimų transliacijų tvarkyklė
  • „įrenginio tvarkyklė“(po vieną kiekvienam virtualiam įrenginiui), skirta valdyti į įrenginį siunčiamas komandas ir reikiamus atsakymus.

„Papildoma“funkcija yra ta, kad ji taip pat skelbia tinklalapį, kad būtų galima valdyti įrenginius.

UPNP tvarkytojas

UPNP tvarkytojas atidaro lizdą SSDP protokolo paketams stebėti 239.255.255.250 prievade 1900.

Jis reaguoja į bet kokias „M-SEARCH“užklausas, pateikiamas su atradimo atsakymo paketu, kuris praneša kiekvienam klausiančiam individualius wemo emuliatorius.

Įrenginių tvarkytojas

Įrenginių tvarkytojai (po vieną kiekvienam virtualiam įrenginiui) stebi daugybę IP prievadų ir reaguoja į užklausas.

Kai bus paprašyta, jis pateiks „setup.xml“atsakymą

Kai bus paprašyta, jis pateiks įvykio aprašymo failą

Ji atsakys į GETBINARYSTATE užklausą

Ji apdoros ir atsakys į SETBINARYSTATE užklausą

Tinklapio serveris

Žiniatinklio serveris yra paprasta rutina, kurianti HTML formą, kurioje yra relės mygtukas.

Jis reaguos į paspaudžiamus mygtukus ir atitinkamai pakeis relės būseną.

6 veiksmas: pritaikymas ir draugiški vardai

Tinkinimas ir draugiški vardai
Tinkinimas ir draugiški vardai

Aš nesu pamišęs dėl kodo, kad jis būtų paprastas ir redaguojamas.

Pagrindus galima pritaikyti pagal apibrėžimus kodo pradžioje:

// bendrieji apibrėžimai#define WEBPORT 5353 // prievadas, kuriame bus paleistas žiniatinklio serveris

#define NUMDEVICES 8 // Kuriamų virtualių įrenginių skaičius

#define PORTBASE 43450 // bazinis IP prievadas, kurį reikia padidinti nuo

WEBPORT yra prievado numeris, kuriuo veikia įmontuotas žiniatinklio serveris. Kad būtų lengviau, būtų galima sėdėti 80 metų, bet pastebėjau, kad tai prieštarauja „Tomcat“ar kitoms vietinėms paslaugoms.

NUMDEVICES apibrėžia atskirų WEMO emuliatorių, kuriuos reikia paleisti, skaičių. Jei turite 2 prievadų relės kortelę, nustatykite ją į 2, 4 prievadus = 4 ir tt

Draugiški įrenginių pavadinimai nustatomi įprasta tvarka, vadinama setup_names:

int sąrankos_vardai (draugiškas char [NUMDEVICES] [NAMELEN]) {int i = 0;

// naudoti šią kilpą

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

sprintf (draugiškas , „Socket %d“, i + 1);

}

// arba šią vadovo lentelę, kad užpildytumėte įrenginių pavadinimus

/*

strcpy (draugiškas [0], „Miegamojo televizorius“);

strcpy (draugiškas [1], „Elektrinė antklodė“);

strcpy (draugiškas [2], „Miegamojo lempa“);

strcpy (draugiškas [3], „Socket 4“);

strcpy (draugiškas [4], „Socket 5“);

strcpy (draugiškas [5], „6 lizdas“);

strcpy (draugiškas [6], „Socket 7“);

strcpy (draugiškas [7], „Lizdas 8“);

*/

grąžinti i;

}

Aš naudoju kilpą, kad visus įrenginius pavadinčiau „Socket n“, bet jūs galite ištrinti šią kilpą ir vietoj to pridėti draugiškus vardus (tiesiog įsitikinkite, kad pridėjote tą patį numerį kaip NUMDEVICES), jei ištrinate / * * /

Nepamirškite iš naujo sukompiliuoti kodo, jei atliksite kokių nors pakeitimų.

Rekomenduojamas: