Talaan ng mga Nilalaman:

Alexa Raspberry Pi Relay Controller: 6 Mga Hakbang
Alexa Raspberry Pi Relay Controller: 6 Mga Hakbang

Video: Alexa Raspberry Pi Relay Controller: 6 Mga Hakbang

Video: Alexa Raspberry Pi Relay Controller: 6 Mga Hakbang
Video: How to use 4 channel Relay to control AC load with Arduino code 2024, Nobyembre
Anonim
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller

Nilikha ko ito na Makatuturo upang maibahagi ang aking mga karanasan sa pagsasama ng mga IOT na aparato sa Alexa ng Amazon.

Pinapayagan ng proyektong ito ang isang relay board na konektado sa isang raspberry pi upang makontrol mula sa smarthome controller.

Nasubukan ito kasama si Alexa ngunit tila gumagana rin ito ng maayos sa Samsung Smartthings at iba pang mga interface ng kontrol habang tinutularan nito ang isang serye ng mga socket ng Belkin Wemo.

Maraming mga halimbawa batay sa mahusay na FAUXMO code ngunit nangangahulugan ito ng pag-aaral ng sawa at hindi binigyan ako ng detalyadong kontrol na kailangan ko para sa aking mga aparato at nagpasya akong lumikha ulit ng isa mula sa simula gamit ang C bilang aking base coding na wika.

Hindi ko rin nais na pumunta sa kailaliman ng lambda code sa Amazon.com kaya't pinapanatili ko itong talagang simple.

Nai-post ko ang mapagkukunan at mga tala sa Github:

github.com/Switchdoctorstu/StuPiMo

Ang tutorial ay talagang upang masakop kung paano ito gumagana at mai-publish ang aking mga tala kung sakaling makakatulong ito sa iba.

Hakbang 1: Mga Supply at Koneksyon

Mga Suplay at Koneksyon
Mga Suplay at Koneksyon
Mga Suplay at Koneksyon
Mga Suplay at Koneksyon
Mga Suplay at Koneksyon
Mga Suplay at Koneksyon

Ang mga bagay na kailangan mo ay madaling magagamit sa Amazon / EBay:

  • Raspberry PI *
  • Pi Power Supply
  • Mga konektor ng duplect
  • Relay Board
  • Lumang micro USB lead (upang i-cut sa kalahati para sa lakas para sa relay card)

Ang anumang raspberry Pi ay gagana, nasubukan ko ito sa isang Model B at Zero.

* Kung gumagamit ng Pi Zero kakailanganin mo ng isang OTG Network Adapter (maliban kung bumili ka ng bersyon na 'W' na may buit sa WiFi)

Kakailanganin mong ikonekta ang Pi sa network.

Gamitin ang mga dupont connetor upang ikonekta ang relay card sa Pi.

Tandaan na ang relay card ay dapat gumamit ng panlabas na lakas (alisin ang link at kumonekta sa panlabas na 5v). Gagana ito mula sa PI ngunit hindi ito pinapayuhan para sa pagpapatakbo ng produksyon.

Para sa aking pag-setup Gumamit ako ng isang panlabas na pinalakas na USB HUB. Nagbibigay ito ng lakas sa PI.

Pinutol ko rin ang dulo ng isang lumang USB cable at pinapagana ang mga relay mula sa isang koneksyon sa 2nd USB sa hub upang manatiling ligtas. Gumagamit ang aking bersyon na 'produksyon' ng isang maliit na 5V 5A switch mode power supply. Muli ay pinutol ko lamang ang isang USB lead sa kalahati upang mapatakbo ang Pi sa pamamagitan ng Micro-USB at gupitin ang dalawa sa mga konektor ng dupont upang mapagana ang relay board. Mayroong 4 na mga wires sa USB lead, karamihan ay gumagamit ng pula / itim upang maipahiwatig ang supply ng 5v ngunit kung may pag-aalinlangan gumamit ng isang metro upang matiyak na nakakuha ka ng wastong mga wire.

Ang mga relay pin sa board ay konektado sa mga nauugnay na GPIO pin sa header ng PI.

Pinapayagan ka ng code na piliin ang mga GPIO pin ngunit ang default na ginamit ko ay:

  1. Relay Pin 1 - Ground
  2. Relay Pin 2 - Relay 1 - GPIO 0
  3. Relay Pin 3 - Relay 2 - GPIO 1
  4. Relay Pin 4 - Relay 3 - GPIO 2
  5. Relay Pin 5 - Relay 4 - GPIO 3
  6. Relay Pin 6 - Relay 5 - GPIO 4
  7. Relay Pin 7 - Relay 6 - GPIO 5
  8. Relay Pin 8 - Relay 7 - GPIO 6
  9. Relay Pin 9 - Relay 8 - GPIO 7
  10. Relay Pin 10 - + 5v para sa lohika

Hakbang 2: Pag-set up ng PI

Hindi ako lilikha ulit ng isang tutorial sa kung paano mo tatakbo ang iyong PI at tumakbo at kumonekta sa network.

Maraming mga gabay kabilang ang isang mahusay na maituturo sa:

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

Kakailanganin mong makuha ang iyong sarili sa puntong makikita ang PI sa network at maaari kang kumonekta dito.

Hindi mahalaga kung ito ay sa pamamagitan ng Ethernet o Wireless.

Ang proyektong ito ay maaaring makumpleto sa pamamagitan lamang ng Raspberry PI gamit ang Geany Programmers Editor ngunit personal kong mas madaling gawin ang aking code prep sa isang PC gamit ang Visual Studio o Eclipse (o kahit ang Notepad ++) at pagkatapos ay i-upload ito sa PI para sa pag-debug gamit ang isang Koneksyon ng VNC. Muli hindi ko ito sasakupin dito dahil maraming magagaling na mga itinuturo sa pag-set up ng VNC sa isang RPi.

Ang kailangan mo lang ay makarating sa puntong maaari mong mai-upload at maipon ang code.

Ang isang tala na mahalaga ay dahil ang handler ng UPNP ay nangangailangan ng UDP multicast, ang mga interface na ginamit ay dapat itakda sa 'Promiscuous' mode.

Maaari itong magawa sa linya ng utos:

pi @ raspberrypi: ~ $ ifconfig eth0 promisc

at / o

pi @ raspberrypi: ~ $ ifconfig wlan0 promisc

Kailangan itong gawing permanente kaya't na-edit ko ang /etc/rc.local

sudo nano / etc / rc.local

upang isama ang linya:

sudo ifconfig eth0 promisc

pagkatapos ng unang hanay ng mga linya ng banner # upang matiyak na ang mga interface ay itinakda sa pagsisimula.

Hakbang 3: Pag-download at Pagbuo ng Code

Ang code mismo ay nakaupo sa aking Github repsoitory;

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

habang may mga 'tamang' paraan upang i-clone ang imbakan. nahanap ko itong mas madali upang buksan lamang ang Geany editor sa Pi desktop at i-paste ang code sa.

Katulad nito, kung gumagamit ka ng linya ng utos;

Lumikha ng isang bagong direktoryo

mkdir Stu

Baguhin dito

cd Stu

Gumawa ng isang bagong file ng teksto

nano StuPiMo.c

Kopyahin ang code mula sa Github raw at i-paste ito sa bagong file

Makatipid at lumabas.

Kapag mayroon ka ng file bilang isang mapagkukunan ng code ng mapagkukunan C maaari mo itong ipunin gamit ang

gcc -o StuPiMo StuPiMo.c -l mga kablePi

tandaan na ang "-l wiringPi" ay kinakailangan upang matiyak na ang mga tagapag-ugnay ng mga link sa kinakailangang library ng mga wiringPi.

Maaari nang patakbuhin ang code gamit ang

./StuPiMo

Muli, kung nais mong tumakbo ito sa pagsisimula, gamitin ang utos:

sudo nano /etc/rc.local

upang idagdag ang sumusunod na linya

sudo / home / pi / Stu / StuPiMo &

sa iyong /etc/rc.local file. Huwag kalimutang i-save ang iyong file sa exit.

Tandaan ang '&' ay mahalaga upang matiyak na ang isang sub-proseso ay nanganak upang matiyak na ang script ay hindi naka-block sa puntong ito.

Hakbang 4: Gamit Ito

Kapag nakuha mo na ang code na tumatakbo, tanungin ang Alexa sa 'Discover Devices' at dapat niyang hanapin ang lahat ng 8 ng mga virtual na aparato ng Wemo.

Pagkatapos ito ay isang kaso lamang ng pagsasabi: "Alexa i-on ang socket 1" o "Alexa patayin ang socket 6" atbp at mababago ang nauugnay na relay.

Hakbang 5: Paano Gumagana ang Code

Gumagana ang code sa pamamagitan ng pagtulad sa isang serye ng mga Belkin Wemo socket device.

Upang maipakita ito mayroon itong hawakan ang 2 pangunahing mga pag-andar

  • isang handler sa pag-broadcast ng pagtuklas ng UPNP
  • isang 'handler ng aparato' (isa bawat virtual na aparato) upang pamahalaan ang mga utos na ipinadala sa aparato at ang mga kinakailangang tugon.

Ang tampok na 'bonus' ay naglalathala din ito ng isang web page upang payagan ang contol ng mga aparato.

Naghahawak ng UPNP

Ang handler ng UPNP ay magbubukas ng isang socket upang subaybayan ang mga packet ng SSDP protocol sa 239.255.255.250 port 1900.

Tumutugon ito sa anumang mga query na 'M-SEARCH' na papasok na may isang packet na tugon sa pagtuklas na nagpapahayag ng mga indibidwal na emulator ng wemo sa sinumang humihiling.

Handler ng Device

Ang mga handler ng aparato (isa bawat virtual na aparato) ay sumusubaybay sa isang serye ng mga IP port at tumutugon sa mga kahilingan.

Maghahatid ito ng isang pagtugon sa setup.xml kapag tinanong

Maghahatid ito ng isang file ng paglalarawan ng kaganapan kapag tinanong

Tutugon ito sa isang kahilingan sa GETBINARYSTATE

Iproseso nito at tutugon sa isang kahilingan sa SETBINARYSTATE

Web Server

Ang web server ay isang simpleng gawain na bumubuo ng isang form na HTML na naglalaman ng isang pindutan bawat relay.

Ito ay tutugon sa mga pindutan na pinindot at i-toggle ang estado ng relay nang naaayon.

Hakbang 6: Pagpapasadya at Mga Pangalang Kaibigan

Pagpapasadya at Mga Pangalang Kaibigan
Pagpapasadya at Mga Pangalang Kaibigan

Hindi ako nagalit sa code upang mapanatili itong simple at mai-edit.

Ang mga pangunahing kaalaman ay maaaring ipasadya sa pamamagitan ng mga kahulugan sa simula ng code:

// global definitions # define WEBPORT 5353 // port upang mapatakbo ang web server

# tukuyin ang NUMDEVICES 8 // Bilang ng mga virtual na aparato upang malikha

# tukuyin ang PORTBASE 43450 // base IP port upang magtaas mula sa

Ang WEBPORT ay ang numero ng port na pinapatakbo ng in-built na web server. Maaari itong mapaupo sa 80 upang gawing madali ang mga bagay ngunit nalaman kong sumalungat ito sa tomcat o iba pang mga serbisyo na tumatakbo nang lokal.

Tinutukoy ng NUMDEVICES ang bilang ng mga indibidwal na emulator na WEMO na ilulunsad. Kung mayroon kang isang 2 port relay card pagkatapos ay itakda ito sa 2, 4 port = 4 atbp.

Ang mga magiliw na pangalan para sa mga aparato ay nakatakda sa isang gawain na tinatawag na setup_names:

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

// gamitin ang loop na ito

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

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

}

// o ang sumusunod na manu-manong talahanayan upang mapunan ang mga pangalan ng aparato

/*

strcpy (friendly [0], "Bedroom TV");

strcpy (palakaibigan [1], "Electric Blanket");

strcpy (palakaibigan [2], "Lampara sa Kwarto");

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

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

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

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

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

*/

ibalik i;

}

Gumamit ako ng isang loop upang tawagan ang bawat isa sa mga aparato na 'Socket n' ngunit maaari mong tanggalin ang loop na ito at idagdag ang iyong sariling mga pangalan ng palakaibigan (siguraduhin lamang na idaragdag mo ang parehong numero bilang NUMDEVICES) kung tatanggalin mo ang / * * /

Tandaan na muling isulat ang code kung gumawa ka ng anumang mga pagbabago.

Inirerekumendang: