Съдържание:

Релейният контролер на Alexa Raspberry Pi: 6 стъпки
Релейният контролер на Alexa Raspberry Pi: 6 стъпки

Видео: Релейният контролер на Alexa Raspberry Pi: 6 стъпки

Видео: Релейният контролер на Alexa Raspberry Pi: 6 стъпки
Видео: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Юли
Anonim
Релейният контролер Alexa Raspberry Pi
Релейният контролер Alexa Raspberry Pi
Релейният контролер Alexa Raspberry Pi
Релейният контролер Alexa Raspberry Pi
Релейният контролер Alexa Raspberry Pi
Релейният контролер Alexa Raspberry Pi

Създадох този Instructable, за да споделя моя опит с интегрирането на IOT устройства с Alexa на Amazon.

Този проект позволява релейна платка, свързана с малинов pi, да се управлява от контролера smarthome.

Тестван е с Alexa, но изглежда също така работи добре със Samsung Smartthings и други интерфейси за управление, тъй като емулира серия от гнезда Belkin Wemo.

Има МНОГО примери, базирани на отличния код FAUXMO, но това означаваше изучаване на python и не ми даде подробния контрол, от който се нуждая за моите устройства, и затова реших да създам нов от нулата, използвайки C като основен език за кодиране.

Също така не исках да се налага да навлизам в дълбините на ламбда кода на Amazon.com, така че го държа много просто.

Публикувал съм източника и бележките в Github:

github.com/Switchdoctorstu/StuPiMo

Урокът наистина е за да обхване как да го накарам да работи и да публикува моите бележки, в случай че помага на другите.

Стъпка 1: Консумативи и връзки

Консумативи и връзки
Консумативи и връзки
Консумативи и връзки
Консумативи и връзки
Консумативи и връзки
Консумативи и връзки

Нещата, от които се нуждаете, са лесно достъпни в Amazon / EBay:

  • Малина PI *
  • Пи захранване
  • Съединители Dupont
  • Релейна дъска
  • Стар микро USB кабел (за да се намали наполовина за захранване на релейната карта)

Всеки малинов Pi ще работи, тествах това на модели B и Zero.

*Ако използвате Pi Zero, ще ви е необходим OTG мрежов адаптер (освен ако не закупите версията „W“с buit в WiFi)

Ще трябва да свържете Pi към мрежата.

Използвайте съединителите dupont, за да свържете релейната карта към Pi.

Обърнете внимание, че релейната карта трябва да използва външно захранване (премахнете връзката и се свържете към външно 5v). Той ще работи захранван от PI, но не се препоръчва за производство.

За моята настройка използвах USB HUB с външно захранване. Това осигурява захранването на PI.

Също така отрязах края на стар USB кабел и захранвах релетата от втора USB връзка към хъба, за да съм в безопасност. Моята "производствена" версия използва малко 5V 5A превключващо захранване. Отново просто прерязах наполовина USB кабел, за да захранвам Pi чрез Micro-USB и изрязах два от конекторите dupont за захранване на релейната платка. В USB кабела има 4 проводника, повечето използват червено/черно, за да обозначат 5v захранването, но ако се съмнявате, използвайте метър, за да сте сигурни, че сте получили правилните проводници.

Релейните щифтове на платката са свързани към съответните GPIO щифтове на PI заглавието.

Кодът ви позволява да избирате GPIO щифтовете, но по подразбиране използвах:

  1. Реле ПИН 1 - Заземяване
  2. Реле ПИН 2 - Реле 1 - GPIO 0
  3. Реле ПИН 3 - Реле 2 - GPIO 1
  4. Реле Pin 4 - Реле 3 - GPIO 2
  5. Реле ПИН 5 - Реле 4 - GPIO 3
  6. Реле Pin 6 - Реле 5 - GPIO 4
  7. Реле ПИН 7 - Реле 6 - GPIO 5
  8. Реле Pin 8 - Реле 7 - GPIO 6
  9. Реле ПИН 9 - Реле 8 - GPIO 7
  10. Реле Pin 10 - +5v за логика

Стъпка 2: Настройка на PI

Няма да пресъздавам урок за това как да активирате и свържете вашия PI и да го свържете към мрежата.

Има много ръководства, включително отлични инструкции на:

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

Ще трябва да стигнете до точката, където PI е видим в мрежата и можете да се свържете с него.

Няма значение дали това е чрез Ethernet или Wireless.

Този проект може да бъде завършен само с Raspberry PI с помощта на Geany Programmers Editor, но лично на мен ми е по -лесно да си подготвя кода на компютър с помощта на Visual Studio или Eclipse (или дори Notepad ++) и след това да го кача в PI за отстраняване на грешки с помощта на VNC връзка. Отново няма да покривам това тук, тъй като има много отлични инструкции за настройка на VNC на RPi.

Всичко, от което се нуждаете, е да стигнете до точката, където можете да качите и компилирате кода.

Една забележка, която е важна, е, че тъй като манипулаторът на UPNP изисква UDP мултикаст, използваните интерфейси трябва да бъдат настроени на режим „Promiscuous“.

Това може да стане в командния ред:

pi@raspberrypi: ~ $ ifconfig eth0 promisc

и / или

pi@raspberrypi: ~ $ ifconfig wlan0 promisc

Това трябва да стане постоянно, така че редактирах /etc/rc.local

sudo nano / etc / rc.local

да включите реда:

sudo ifconfig eth0 promisc

след първия набор от банерни # линии, за да сте сигурни, че интерфейсите са настроени при стартиране.

Стъпка 3: Изтегляне и компилиране на кода

Самият код се намира в моя Github repsoitory;

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

макар че има „правилни“начини за клониране на хранилището. намерих за по -лесно просто да отворя редактора на Geany на работния плот на Pi и да вмъкна кода.

По същия начин, ако използвате командния ред;

Създайте нова директория

mkdir Stu

Преминете към него

cd Stu

Направете нов текстов файл

nano StuPiMo.c

Копирайте кода от Github raw и го поставете в новия файл

Запази и излез.

След като имате файла като обект на изходния код на C, можете да го компилирате с помощта

gcc -o StuPiMo StuPiMo.c -l окабеляванеPi

обърнете внимание, че "-l wiringPi" е необходим, за да се гарантира, че компилаторът се свързва в необходимата библиотека wiringPi.

След това кодът може да се стартира с помощта

./StuPiMo

Отново, ако искате това да се стартира при стартиране, използвайте командата:

sudo nano /etc/rc.local

за да добавите следния ред

sudo/home/pi/Stu/StuPiMo &

към вашия /etc/rc.local файл. Не забравяйте да запазите файла си при излизане.

Обърнете внимание, че „&“е от съществено значение, за да се гарантира, че се създава подпроцес, за да се гарантира, че скриптът не е блокиран на този етап.

Стъпка 4: Използвайте го

След като стартирате кода, помолете Алекса да „Открийте устройства“и тя трябва да намери всичките 8 виртуални устройства Wemo.

Тогава е просто случай да кажете: „Alexa включи гнездо 1“или „Alexa изключи гнездо 6“и т.н. и съответното реле ще бъде сменено.

Стъпка 5: Как работи кодът

Кодът работи, като емулира серия от гнезда на Belkin Wemo устройства.

За да постигне това, той трябва да обработва 2 основни функции

  • манипулатор за предаване на откриване на UPNP
  • „манипулатор на устройства“(по един на виртуално устройство) за управление на команди, изпратени до устройството, и необходимите отговори.

Бонус функция е, че тя също така публикува уеб страница, за да позволи контрол на устройствата.

Манипулатор на UPNP

Манипулаторът на UPNP отваря гнездо за наблюдение на пакети протокол SSDP на 239.255.255.250 порт 1900.

Той отговаря на всякакви „M-SEARCH“заявки, идващи с пакет за отговор на откриване, който съобщава на отделните емулатори на wemo на всеки, който попита.

Манипулатор на устройства

Манипулаторите на устройства (по един на виртуално устройство) наблюдават поредица от IP портове и отговарят на заявки.

Той ще обслужва отговор setup.xml, когато бъде попитан

Той ще обслужва файл с описание на събитие, когато бъде поискан

Той ще отговори на заявка за GETBINARYSTATE

Той ще обработи и отговори на заявка SETBINARYSTATE

Уеб сървър

Уеб сървърът е проста процедура, която изгражда HTML формуляр, съдържащ бутон за всяко реле.

Той ще реагира на натиснатите бутони и съответно ще превключи състоянието на релето.

Стъпка 6: Персонализиране и приятелски имена

Персонализиране и приятелски имена
Персонализиране и приятелски имена

Не съм полудял с кода, за да го поддържам прост и редактируем.

Основите могат да бъдат персонализирани чрез дефиниции в началото на кода:

// глобални дефиниции#дефинирайте WEBPORT 5353 // порт за стартиране на уеб сървъра

#define NUMDEVICES 8 // Брой виртуални устройства за създаване

#define PORTBASE 43450 // основен IP порт за увеличаване от

WEBPORT е номерът на порта, на който работи вграденият уеб сървър. Това може да се накара да седне на 80, за да улесни нещата, но открих, че това е в конфликт с tomcat или други услуги, работещи локално.

NUMDEVICES определя броя на отделните емулатори на WEMO за стартиране. Ако имате релейна карта с 2 порта, задайте това на 2, 4 порта = 4 и т.н.

Приятелските имена за устройствата са зададени в рутина, наречена setup_names:

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

// използваме този цикъл

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

sprintf (приятелски , "Socket %d", i + 1);

}

// или следната ръчна таблица за попълване на имената на устройства

/*

strcpy (приятелски [0], "Телевизор в спалнята");

strcpy (приятелски [1], "Електрическо одеяло");

strcpy (приятелски [2], "Лампа за спалня");

strcpy (приятелски [3], "Socket 4");

strcpy (приятелски [4], "Socket 5");

strcpy (приятелски [5], "Socket 6");

strcpy (приятелски [6], "Socket 7");

strcpy (приятелски [7], "Socket 8");

*/

връщам i;

}

Използвах цикъл, за да извикам всяко от устройствата „Socket n“, но можете да изтриете този цикъл и вместо това да добавите свои собствени приятелски имена (просто се уверете, че добавяте същия номер като NUMDEVICES), ако изтриете / * * /

Не забравяйте да компилирате кода отново, ако направите някакви промени.

Препоръчано: