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, Novembar
Anonim
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 relejni kontroler

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 malinu pi putem kontrolera smarthome.

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

Postoji mnogo primjera zasnovanih 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 ponovo stvoriti jedan od nule koristeći C kao svoj osnovni jezik kodiranja.

Također nisam želio ići u dubine lambda koda na Amazon.com pa sam to učinio vrlo jednostavnim.

Objavio sam izvor i bilješke na Githubu:

github.com/Switchdoctorstu/StuPiMo

Vodič zaista pokriva kako to funkcionirati i objaviti moje bilješke u slučaju da to 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 (prepoloviti radi napajanja relejne kartice)

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

*Ako koristite Pi Zero, trebat će vam OTG mrežni adapter (osim ako ne kupite 'W' verziju s udjelom u WiFi -u)

Morat ćete povezati Pi na mrežu.

Pomoću dupont konektora spojite relejnu karticu na Pi.

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

Za postavljanje sam koristio USB HUB sa vanjskim napajanjem. Ovo daje snagu PI -u.

Odrezao sam i kraj starog USB kabela i napajao releje s druge USB veze na čvorište kako bih ostao siguran. Moja 'proizvodna' verzija koristi malo napajanje sa 5V 5A prekidačem. 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 kablu postoje 4 žice, većina koristi crvenu/crnu oznaku za napajanje od 5 V, ali ako ste u nedoumici, upotrijebite mjerač kako biste bili sigurni da ste dobili ispravne žice.

Igle releja na ploči povezane su sa odgovarajućim GPIO pinovima na PI zaglavlju.

Kôd vam omogućava da odaberete GPIO pinove, ali zadana vrijednost koju sam koristio je:

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

Korak 2: PI podešavanje

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

Postoji mnogo vodiča, uključujući odlične instrukcije 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 projekt se može dovršiti samo pomoću Raspberry PI -a pomoću uređivača programa Geany Programmers Editor, ali meni je lično lakše pripremiti kod na računaru koristeći Visual Studio ili Eclipse (ili čak Notepad ++), a zatim ga prenijeti u PI radi otklanjanja grešaka pomoću VNC veza. Opet neću to pokrivati ovdje jer postoji mnogo izvrsnih uputstava o postavljanju VNC -a na RPi.

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

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

To se može učiniti u komandnoj liniji:

pi@raspberrypi: ~ $ ifconfig eth0 promisc

i / ili

pi@raspberrypi: ~ $ ifconfig wlan0 promisc

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

sudo nano / etc / rc.local

uključiti red:

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

Sam kôd se nalazi u mom Github -u;

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

dok postoje 'ispravni' načini za kloniranje 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 komandnu liniju;

Kreirajte novi direktorij

mkdir Stu

Promijenite to

cd Stu

Napravite novu tekstualnu datoteku

nano StuPiMo.c

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

Sačuvaj i izađi.

Kada datoteku imate kao objekt C izvornog koda, možete je kompajlirati 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 povezuje u potrebnoj biblioteci wiringPi.

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

./StuPiMo

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

sudo nano /etc/rc.local

da biste dodali sledeći red

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 bi se osiguralo da skripta u ovom trenutku nije blokirana.

Korak 4: Upotreba

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

U tom slučaju samo recite: "Alexa uključi utičnicu 1" ili "Alexa isključi utičnicu 6" itd., A relej će se promijeniti.

Korak 5: Kako kôd funkcionira

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 objavljuje i web stranicu koja omogućuje kontrolu uređaja.

UPNP Handler

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 otkrivanja koji najavljuje pojedine emulatore wema svakome ko to zatraži.

Uređivač uređaja

Rukovaoci uređaja (jedan po virtuelnom uređaju) nadgledaju niz IP portova i odgovaraju na zahtjeve.

Poslužit će odgovor setup.xml kada se to od vas zatraži

On će poslužiti datoteku opisa događaja kada se to od vas zatraži

Odgovorit će na zahtjev GETBINARYSTATE

On će obraditi i odgovoriti na zahtjev SETBINARYSTATE

Web server

Web server je jednostavna rutina koja gradi HTML obrazac koji sadrži dugme po releju.

On će reagirati na pritisnute tipke 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đivan.

Osnove se mogu prilagoditi definicijama na početku koda:

// globalne definicije#definiraj WEBPORT 5353 // port za pokretanje web servera

#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 server. 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 servisima.

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;

// koristi ovu petlju

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

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

}

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

/*

strcpy (prijateljski [0], "Spavaća soba TV");

strcpy (prijateljski [1], "Električno ćebe");

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

strcpy (friendly [3], "Socket 4");

strcpy (friendly [4], "Socket 5");

strcpy (friendly [5], "Socket 6");

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

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

*/

return 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čuje se: