Sadržaj:

Relejni kontroler Alexa Raspberry Pi: 6 koraka
Relejni kontroler Alexa Raspberry Pi: 6 koraka

Video: Relejni kontroler Alexa Raspberry Pi: 6 koraka

Video: Relejni kontroler Alexa Raspberry Pi: 6 koraka
Video: Уроки Arduino #8 - управление реле 2024, Srpanj
Anonim
Relejni kontroler Alexa Raspberry Pi
Relejni kontroler Alexa Raspberry Pi
Relejni kontroler Alexa Raspberry Pi
Relejni kontroler Alexa Raspberry Pi
Relejni kontroler Alexa Raspberry Pi
Relejni kontroler Alexa Raspberry Pi

Napravio sam ovaj Instructable kako bih podijelio svoja iskustva s integracijom IOT uređaja s Amazonovom Alexa.

Ovaj projekt omogućuje upravljanje relejnom pločom spojenom na malinovo pi s kontrolera pametnog doma.

Testirano je s Alexa, ali čini se i da radi dobro sa Samsung Smartthings i drugim upravljačkim sučeljima jer oponaša niz Belkin Wemo utičnica.

Postoji mnogo primjera temeljenih na izvrsnom FAUXMO kodu, ali to je značilo učenje pythona i nije mi dalo detaljnu kontrolu koja mi je potrebna za moje uređaje, pa sam odlučio ponovno stvoriti jedan od nule koristeći C kao svoj osnovni jezik kodiranja.

Također nisam želio ići u dubinu lambda koda na Amazon.com pa sam to držao vrlo jednostavnim.

Objavio sam izvor i bilješke na Githubu:

github.com/Switchdoctorstu/StuPiMo

Vodič doista pokriva kako to funkcionirati i objaviti moje bilješke u slučaju da drugima pomogne.

Korak 1: Potrošni materijal i veze

Potrošni materijal i priključci
Potrošni materijal i priključci
Potrošni materijal i priključci
Potrošni materijal i priključci
Potrošni materijal i priključci
Potrošni materijal i priključci

Stvari koje trebate su dostupne na Amazonu / EBayu:

  • PI maline *
  • Pi napajanje
  • Dupont konektori
  • Relejna ploča
  • Stari mikro USB kabel (za prepolovljenje radi napajanja relejne kartice)

Bilo koji malina Pi će raditi, ovo sam testirao na modelima B i Zero.

*Ako koristite Pi Zero, trebat će vam OTG mrežni adapter (osim ako ne kupite "W" verziju s ugrađenim WiFi -om)

Morat ćete povezati Pi na mrežu.

Pomoću dupont konektora spojite relejnu karticu na Pi.

Imajte na umu da bi relejna kartica trebala koristiti vanjsko napajanje (uklonite vezu i spojite se na vanjski 5v). Radit će s PI -jem, ali se ne preporučuje za proizvodnju.

Za svoje postavljanje koristio sam USB HUB s vanjskim napajanjem. To daje snagu PI -u.

Također sam odrezao kraj starog USB kabela i napajao releje s druge USB veze na čvorište kako bih ostao siguran. Moja 'proizvodna' verzija koristi malo napajanje s 5V 5A sklopkom. Opet sam samo prepolovio USB kabel za napajanje Pi preko Micro-USB-a i presjekao dva dupont konektora za napajanje relejne ploče. U USB vodiču postoje 4 žice, većina koristi crvenu/crnu za označavanje napajanja od 5 V, ali ako ste u nedoumici, upotrijebite mjerač kako biste bili sigurni da ste dobili ispravne žice.

Igle releja na ploči spojene su na odgovarajuće GPIO pinove na PI zaglavlju.

Kôd vam omogućuje odabir GPIO pinova, ali zadana vrijednost koju sam koristio bila je:

  1. Relej Pin 1 - Uzemljenje
  2. Relej Pin 2 - Relej 1 - GPIO 0
  3. Relejni pin 3 - Relej 2 - GPIO 1
  4. Relejni pin 4 - Relej 3 - GPIO 2
  5. Relej Pin 5 - Relej 4 - GPIO 3
  6. Relejni pin 6 - Relej 5 - GPIO 4
  7. Relejni pin 7 - Relej 6 - GPIO 5
  8. Relejni pin 8 - Relej 7 - GPIO 6
  9. Relejni pin 9 - Relej 8 - GPIO 7
  10. Relejni pin 10 - +5v za logiku

Korak 2: PI postavljanje

Neću ponovno stvarati vodič o tome kako svoj PI pokrenuti i povezati s mrežom.

Postoji mnogo vodiča, uključujući izvrsne instruktore na:

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

Morat ćete doći do točke gdje je PI vidljiv na mreži i možete se povezati s njim.

Nije važno radi li se o Ethernetu ili bežičnoj mreži.

Ovaj se projekt može dovršiti samo pomoću Raspberry PI -a pomoću Geany Programmers Editor -a, ali meni je osobno lakše pripremiti kod na računalu koristeći Visual Studio ili Eclipse (ili čak Notepad ++), a zatim ga prenijeti u PI radi otklanjanja pogrešaka pomoću VNC veza. Opet to neću pokrivati ovdje jer postoji mnogo izvrsnih uputa o postavljanju VNC -a na RPi.

Sve što trebate je doći do točke gdje možete učitati i sastaviti kôd.

Jedna napomena koja je važna je da budući da UPNP rukovatelj zahtijeva UDP multicast, sučelja koja se koriste moraju biti postavljena na 'Promiscuous' način.

To se može učiniti u naredbenom retku:

pi@raspberrypi: ~ $ ifconfig eth0 promisc

i / ili

pi@raspberrypi: ~ $ ifconfig wlan0 promisc

To treba učiniti trajnim pa sam uredio /etc/rc.local

sudo nano / etc / rc.local

uključiti redak:

sudo ifconfig eth0 promisc

nakon prvog skupa banner # linija kako biste bili sigurni da su sučelja postavljena pri pokretanju.

Korak 3: Preuzimanje i sastavljanje koda

Kôd se nalazi u mojem Github -ovom repsoitoriju;

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

iako postoje "ispravni" načini kloniranja spremišta. Bilo mi je lakše samo otvoriti uređivač Geany na Pi radnoj površini i zalijepiti kôd.

Slično, ako koristite naredbeni redak;

Izradite novi direktorij

mkdir Stu

Promijenite ga

cd Stu

Napravite novu tekstualnu datoteku

nano StuPiMo.c

Kopirajte kôd iz Github raw -a i zalijepite ga u novu datoteku

Spremi i izađi.

Nakon što imate datoteku kao objekt izvornog koda C, možete je sastaviti pomoću

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

imajte na umu da je "-l wiringPi" potreban kako bi se osiguralo da se kompajler spoji u potrebnu knjižnicu wiringPi.

Kôd se tada može pokrenuti pomoću

./StuPiMo

Opet, ako želite da se ovo pokreće pri pokretanju, upotrijebite naredbu:

sudo nano /etc/rc.local

da biste dodali sljedeći redak

sudo/home/pi/Stu/StuPiMo &

u vašu /etc/rc.local datoteku. Ne zaboravite spremiti datoteku pri izlazu.

Imajte na umu da su znakovi '&' ključni za osiguravanje pokretanja podprocesa kako biste bili sigurni da skripta u ovom trenutku nije blokirana.

Korak 4: Upotreba

Nakon što pokrenete kôd, zamolite aleksu da "otkrije uređaje" i trebala bi pronaći svih 8 virtualnih Wemo uređaja.

Tada se samo može reći: "Alexa uključi utičnicu 1" ili "Alexa isključi utičnicu 6" itd., A relej će se promijeniti.

Korak 5: Kako kôd radi

Kod funkcionira emulirajući niz Belkin Wemo utičnica.

Da bi to postigao, mora se nositi s 2 glavne funkcije

  • upravljač emitiranja UPNP otkrivanja
  • "rukovatelj uređaja" (jedan po virtualnom uređaju) za upravljanje naredbama poslanim na uređaj i potrebnim odgovorima.

Bonusna značajka je ta što također objavljuje web stranicu kako bi omogućila kontrolu uređaja.

UPNP rukovatelj

UPNP rukovatelj otvara utičnicu za nadgledanje paketa SSDP protokola na 239.255.255.250 portu 1900.

Odgovara na sve upite 'M-SEARCH' koji dolaze s paketom odgovora za otkrivanje koji najavljuje pojedine wemo emulatore svakome tko to zatraži.

Rukovatelj uređaja

Rukovatelji uređaja (po jedan na virtualni uređaj) nadziru niz IP portova i odgovaraju na zahtjeve.

Poslužit će odgovor setup.xml na upit

Poslužit će datoteku opisa događaja kada se to od vas zatraži

Odgovorit će na zahtjev GETBINARYSTATE

Obradit će i odgovoriti na zahtjev SETBINARYSTATE

Web poslužitelj

Web poslužitelj je jednostavna rutina koja gradi HTML obrazac koji sadrži gumb po releju.

On će reagirati na pritisnute gumbe i prema tome promijeniti stanje releja.

Korak 6: Prilagođavanje i prijateljska imena

Prilagođavanje i prijateljska imena
Prilagođavanje i prijateljska imena

Nisam poludio zbog koda kako bi bio jednostavan i uređen.

Osnove se mogu prilagoditi definicijama na početku koda:

// globalne definicije#definiraj WEBPORT 5353 // port za pokretanje web poslužitelja

#define NUMDEVICES 8 // Broj virtualnih uređaja za stvaranje

#define PORTBASE 43450 // osnovni IP port za povećanje s

WEBPORT je broj porta na kojem radi ugrađeni web poslužitelj. Ovo bi se moglo natjerati da sjedne na 80 da olakša stvari, ali otkrio sam da je to u sukobu s tomcat -om ili drugim lokalnim uslugama.

NUMDEVICES definira broj pojedinačnih WEMO emulatora za pokretanje. Ako imate 2 portnu relejnu karticu, postavite je na 2, 4 port = 4 itd.

Prijateljski nazivi uređaja postavljeni su u rutini koja se naziva setup_names:

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

// koristiti ovu petlju

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

sprintf (friendly , "Socket %d", i + 1);

}

// ili sljedeću ručnu tablicu za popunjavanje naziva uređaja

/*

strcpy (prijateljski [0], "TV u spavaćoj sobi");

strcpy (prijateljski [1], "Električna deka");

strcpy (prijateljski [2], "Lampa za spavaću sobu");

strcpy (prijateljski [3], "Utičnica 4");

strcpy (prijateljski [4], "Utičnica 5");

strcpy (prijateljski [5], "Utičnica 6");

strcpy (prijateljski [6], "Utičnica 7");

strcpy (prijateljski [7], "Socket 8");

*/

povratak i;

}

Koristio sam petlju za pozivanje svakog od uređaja 'Socket n', ali možete izbrisati ovu petlju i umjesto toga dodati svoja prijateljska imena (samo pazite da dodate isti broj kao NUMDEVICES) ako izbrišete / * * /

Ne zaboravite ponovno sastaviti kôd ako napravite bilo kakve promjene.

Preporučeni: