Съдържание:
- Стъпка 1: Консумативи и връзки
- Стъпка 2: Настройка на PI
- Стъпка 3: Изтегляне и компилиране на кода
- Стъпка 4: Използвайте го
- Стъпка 5: Как работи кодът
- Стъпка 6: Персонализиране и приятелски имена
Видео: Релейният контролер на Alexa Raspberry Pi: 6 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Създадох този 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 - Заземяване
- Реле ПИН 2 - Реле 1 - GPIO 0
- Реле ПИН 3 - Реле 2 - GPIO 1
- Реле Pin 4 - Реле 3 - GPIO 2
- Реле ПИН 5 - Реле 4 - GPIO 3
- Реле Pin 6 - Реле 5 - GPIO 4
- Реле ПИН 7 - Реле 6 - GPIO 5
- Реле Pin 8 - Реле 7 - GPIO 6
- Реле ПИН 9 - Реле 8 - GPIO 7
- Реле 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), ако изтриете / * * /
Не забравяйте да компилирате кода отново, ако направите някакви промени.
Препоръчано:
Alexa IoT TV-контролер ESP8266: 10 стъпки (със снимки)
Alexa IoT TV-Controller ESP8266: Наскоро купих Amazon Echo Dot по време на Amazon Prime за ~ 20 €. Тези малки гласови асистенти са евтини и чудесни за домашна автоматизация на дома, ако знаете какво е възможно и как да изграждате интелигентни устройства. Имам Samsung Smart TV, но исках да
Arduino базиран DIY контролер за игри - Arduino PS2 контролер за игри - Възпроизвеждане на Tekken с DIY Arduino геймпад: 7 стъпки
Arduino базиран DIY контролер за игри | Arduino PS2 контролер за игри | Игра на Tekken с DIY Arduino геймпад: Здравейте момчета, играта на игри винаги е забавна, но играта със собствения си DIY персонализиран контролер на играта е по -забавна. Така че ще направим контролер за игра, използвайки arduino pro micro в тази инструкция
YABC - Още един контролер на Blynk - IoT облачен контролер за температура и влажност, ESP8266: 4 стъпки
YABC - Още един контролер на Blynk - IoT облачен контролер за температура и влажност, ESP8266: Здравейте производители, наскоро започнах да отглеждам гъби у дома, гъби стриди, но вече имам 3 пъти от тези контролери у дома за контрол на температурата на ферментатора за моята домашна напитка, съпруга също прави това нещо Комбуча сега и като термостат за топлина
Серво контролер Maestro (Raspberry Pi): 4 стъпки (със снимки)
Maestro Servo Controller (Raspberry Pi): Основен урок за това как да настроите Maestro Servo Controller с Raspberry Pi
Разбъркване на NES контролер (Nintendo контролер MP3, V3.0): 5 стъпки (със снимки)
Разбъркване на контролера на NES (Nintendo Controller MP3, V3.0): Напълно изтръгнах ryan97128 от неговия дизайн за Nintendo Controller MP3, версия 2.0 и чувам, че той е получил идеята от всички мъдри Morte_Moya, така че не мога да взема кредит за целия им гений. Просто исках да добавя удобство и презареждане