Оглавление:
- Шаг 1. Расходные материалы и подключения
- Шаг 2: настройка PI
- Шаг 3: загрузка и компиляция кода
- Шаг 4: Использование
- Шаг 5: Как работает код
- Шаг 6: настройка и понятные имена
Видео: Релейный контроллер Alexa Raspberry Pi: 6 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Я создал это руководство, чтобы поделиться своим опытом интеграции устройств Интернета вещей с Amazon Alexa.
Этот проект позволяет управлять релейной платой, подключенной к Raspberry Pi, с контроллера smarthome.
Он был протестирован с Alexa, но также, похоже, отлично работает с Samsung Smartthings и другими интерфейсами управления, поскольку он имитирует серию сокетов Belkin Wemo.
Существует МНОГО примеров, основанных на отличном коде FAUXMO, но это означало изучение python и не давало мне детального контроля, который мне был нужен для моих устройств, поэтому я решил воссоздать его с нуля, используя C в качестве базового языка кодирования.
Я также не хотел вдаваться в подробности лямбда-кода на Amazon.com, поэтому я сделал его очень простым.
Я разместил исходники и заметки на Github:
github.com/Switchdoctorstu/StuPiMo
В учебнике действительно рассказывается, как заставить его работать, и публиковать мои заметки на случай, если это поможет другим.
Шаг 1. Расходные материалы и подключения
Все, что вам нужно, легко доступно на Amazon / EBay:
- Raspberry Pi *
- Блок питания Pi
- Разъемы Dupont
- Релейная плата
- Старый кабель micro-USB (разрезать пополам для питания релейной карты)
Подойдет любой Raspberry Pi, я тестировал это на Model B и Zero.
* Если вы используете Pi Zero, вам понадобится сетевой адаптер OTG (если вы не покупаете версию W с встроенным Wi-Fi)
Вам нужно будет подключить Pi к сети.
Используйте разъемы dupont для подключения релейной карты к Pi.
Обратите внимание, что релейная карта должна использовать внешнее питание (удалите перемычку и подключитесь к внешнему источнику 5 В). Он будет работать от PI, но не рекомендуется для работы в производственной среде.
Для своей установки я использовал USB-концентратор с внешним питанием. Это обеспечивает питание ИП.
Я также отрезал конец старого USB-кабеля и включил реле от второго USB-соединения к концентратору, чтобы оставаться в безопасности. В моей «производственной» версии используется небольшой импульсный блок питания 5V 5A. Опять же, я просто разрезал USB-кабель пополам, чтобы подключить Pi через Micro-USB, и вырезал два разъема dupont для питания релейной платы. В USB-проводе 4 провода, большинство из них используют красный / черный для обозначения источника питания 5 В, но в случае сомнений используйте измеритель, чтобы убедиться, что вы получили правильные провода.
Контакты реле на плате подключены к соответствующим контактам GPIO на заголовке PI.
Код позволяет вам выбирать контакты GPIO, но я использовал по умолчанию:
- Контакт реле 1 - Земля
- Контакт реле 2 - реле 1 - GPIO 0
- Контакт реле 3 - реле 2 - GPIO 1
- Контакт реле 4 - реле 3 - GPIO 2
- Контакт реле 5 - реле 4 - GPIO 3
- Контакт реле 6 - реле 5 - GPIO 4
- Контакт реле 7 - реле 6 - GPIO 5
- Контакт реле 8 - реле 7 - GPIO 6
- Контакт реле 9 - реле 8 - GPIO 7
- Контакт реле 10 - + 5В для логики
Шаг 2: настройка PI
Я не собираюсь воссоздавать учебник о том, как настроить PI и подключить к сети.
Есть много гидов, в том числе отличные инструкции по:
www.instructables.com/id/Ultimate-Raspberr…
Вам нужно будет добраться до точки, где PI будет виден в сети, и вы сможете подключиться к нему.
Неважно, через Ethernet или беспроводное соединение.
Этот проект можно завершить только с помощью Raspberry PI с помощью редактора Geany Programmers Editor, но лично мне легче подготовить код на ПК с помощью Visual Studio или Eclipse (или даже Notepad ++), а затем загрузить его в PI для отладки с помощью Подключение VNC. Опять же, я не собираюсь здесь рассказывать об этом, так как есть много отличных инструкций по настройке VNC на RPi.
Все, что вам нужно, это добраться до точки, где вы можете загрузить и скомпилировать код.
Одно важное замечание: поскольку обработчик UPNP требует многоадресной рассылки UDP, для используемых интерфейсов должен быть установлен режим «Беспорядочный».
Это можно сделать в командной строке:
pi @ raspberrypi: ~ $ ifconfig eth0 promisc
и / или
pi @ raspberrypi: ~ $ ifconfig wlan0 promisc
Это нужно сделать постоянным, поэтому я отредактировал /etc/rc.local
sudo nano / etc / rc.local
включить строку:
sudo ifconfig eth0 promisc
после первого набора строк # баннеров, чтобы гарантировать, что интерфейсы были установлены при запуске.
Шаг 3: загрузка и компиляция кода
Сам код находится в моем репозитории Github;
github.com/Switchdoctorstu/StuPiMo/blob/ma…
пока есть «правильные» способы клонировать репозиторий. Мне было проще просто открыть редактор Geany на рабочем столе Pi и вставить код.
Точно так же, если вы используете командную строку;
Создать новый каталог
mkdir Stu
Изменить на это
cd Stu
Создайте новый текстовый файл
nano StuPiMo.c
Скопируйте код из Github raw и вставьте его в новый файл.
Сохранить и выйти.
Если у вас есть файл как объект исходного кода C, вы можете скомпилировать его, используя
gcc -o StuPiMo StuPiMo.c -l wiringPi
обратите внимание, что "-l wiringPi" необходим для обеспечения того, чтобы компилятор связывался с необходимой библиотекой wiringPi.
Затем код можно запустить с помощью
./StuPiMo
Опять же, если вы хотите, чтобы это запускалось при запуске, используйте команду:
sudo nano /etc/rc.local
добавить следующую строку
sudo / home / pi / Stu / StuPiMo &
в ваш файл /etc/rc.local. Не забудьте сохранить файл при выходе.
Обратите внимание, что знак «&» необходим для создания подпроцесса, чтобы гарантировать, что скрипт не заблокирован на этом этапе.
Шаг 4: Использование
После запуска кода попросите Алексею «Обнаружить устройства», и она должна найти все 8 виртуальных устройств Wemo.
Тогда это просто случай сказать: «Алекса включает сокет 1» или «Алекса выключает сокет 6» и т. Д., И соответствующее реле будет изменено.
Шаг 5: Как работает код
Код работает, эмулируя серию устройств с разъемами Belkin Wemo.
Чтобы добиться этого, он должен выполнять 2 основные функции.
- обработчик широковещательной рассылки обнаружения UPNP
- «обработчик устройства» (по одному на виртуальное устройство) для управления командами, отправляемыми устройству, и необходимыми ответами.
«Бонусной» функцией является то, что он также публикует веб-страницу, позволяющую управлять устройствами.
Обработчик UPNP
Обработчик UPNP открывает сокет для мониторинга пакетов протокола SSDP на 239.255.255.250 порту 1900.
Он отвечает на любые поступающие запросы «M-SEARCH» с помощью пакета ответа на обнаружение, который анонсирует отдельные эмуляторы Wemo всем, кто их запрашивает.
Обработчик устройства
Обработчики устройств (по одному на виртуальное устройство) отслеживают серию IP-портов и отвечают на запросы.
Когда его спросят, он предоставит ответ setup.xml.
По запросу он предоставит файл описания события.
Он ответит на запрос GETBINARYSTATE
Он обработает запрос SETBINARYSTATE и ответит на него.
Веб сервер
Веб-сервер - это простая процедура, которая создает HTML-форму, содержащую кнопку для каждого реле.
Он будет реагировать на нажатие кнопок и соответственно переключать состояние реле.
Шаг 6: настройка и понятные имена
Я не сошел с ума от кода, чтобы он оставался простым и доступным для редактирования.
Основы можно настроить с помощью определений в начале кода:
// глобальные определения # define WEBPORT 5353 // порт для запуска веб-сервера
#define NUMDEVICES 8 // Количество виртуальных устройств для создания
#define PORTBASE 43450 // базовый IP-порт для увеличения с
WEBPORT - это номер порта, на котором работает встроенный веб-сервер. Чтобы упростить задачу, можно было бы установить значение 80, но я обнаружил, что это конфликтует с tomcat или другими службами, работающими локально.
NUMDEVICES определяет количество запускаемых отдельных эмуляторов WEMO. Если у вас двухпортовая релейная карта, установите для нее значение 2, 4 порта = 4 и т. Д.
Понятные имена для устройств устанавливаются в подпрограмме setup_names:
int setup_names (дружественные символы [ЧИСЛО] [НАЗВАНИЕ]) {int i = 0;
// используем этот цикл
for (i = 0; i <ЧИСЛА; i ++) {
sprintf (friendly , «Сокет% d», i + 1);
}
// или следующую ручную таблицу для заполнения имен устройств
/*
strcpy (friendly [0], «Телевизор в спальне»);
strcpy (дружественный [1], «Электрическое одеяло»);
strcpy (friendly [2], «Лампа в спальне»);
strcpy (friendly [3], «Socket 4»);
strcpy (friendly [4], «Socket 5»);
strcpy (friendly [5], «Socket 6»);
strcpy (дружественный [6], «Socket 7»);
strcpy (friendly [7], «Socket 8»);
*/
вернуть я;
}
Я использовал цикл для вызова каждого из устройств Socket n, но вы можете удалить этот цикл и вместо этого добавить свои собственные понятные имена (просто убедитесь, что вы добавили тот же номер, что и NUMDEVICES), если вы удалите / * * /
Не забудьте перекомпилировать код, если вы внесете какие-либо изменения.
Рекомендуемые:
Сделай сам - релейный модуль: 8 шагов
Сделай сам - Релейный модуль: Релейные модули, доступные на рынке, объединены с неограниченным количеством бесполезных компонентов. Держу пари, если вы действительно их не используете, вы всегда можете думать о том, чтобы выбить их все, прежде чем использовать их в своем проекте. Что ж, если вы чувствуете потребность в упрощенном
Релейный переключатель IOT с голосовым управлением на базе Arduino (поддерживается Google Home и Alexa): 11 шагов
Релейный переключатель IOT с голосовым управлением на базе Arduino (поддерживается Google Home и Alexa): в этом проекте описывается, как создать релейный переключатель IOT на базе Arduino с голосовым управлением. Это реле, которое вы можете включать и выключать удаленно с помощью приложения для iOS и Android, а также связывать его с IFTTT и управлять им своим голосом с помощью Goog
Управляемый WI-Fi 4-канальный релейный модуль для домашней автоматизации: 7 шагов (с изображениями)
Управляемый WI-Fi 4-канальный релейный модуль для домашней автоматизации: Раньше я использовал множество WI-FI на основе выключателей. Но это не соответствует моим требованиям. Вот почему я хотел построить свою собственную, которая могла бы заменить обычные розетки настенных выключателей без каких-либо модификаций. Чип ESP8266 поддерживает Wi-Fi
Контроллер DIY на базе Arduino - Игровой контроллер Arduino PS2 - Игра в Tekken с DIY-геймпадом Arduino: 7 шагов
Контроллер DIY на базе Arduino | Игровой контроллер Arduino PS2 | Игра в Tekken с помощью DIY Arduino Gamepad: Здравствуйте, ребята, играть в игры всегда весело, но играть с вашим собственным игровым контроллером DIY еще веселее. Поэтому мы создадим игровой контроллер с использованием arduino pro micro в этих инструкциях
Релейный переключатель с голосовой активацией (Arduino): 6 шагов (с изображениями)
Релейный переключатель с голосовой активацией (Arduino): Всем привет! В этом проекте я покажу вам, как реализовать голосовые команды для ваших проектов Arduino. С помощью голосовых команд я покажу вам, как управлять модулем релейного переключателя