Оглавление:

Релейный контроллер Alexa Raspberry Pi: 6 шагов
Релейный контроллер Alexa Raspberry Pi: 6 шагов

Видео: Релейный контроллер Alexa Raspberry Pi: 6 шагов

Видео: Релейный контроллер Alexa Raspberry Pi: 6 шагов
Видео: Уроки Arduino #8 - управление реле 2024, Июль
Anonim
Релейный контроллер Alexa Raspberry Pi
Релейный контроллер Alexa Raspberry Pi
Релейный контроллер Alexa Raspberry Pi
Релейный контроллер Alexa Raspberry Pi
Релейный контроллер Alexa Raspberry Pi
Релейный контроллер Alexa Raspberry Pi

Я создал это руководство, чтобы поделиться своим опытом интеграции устройств Интернета вещей с 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. Контакт реле 1 - Земля
  2. Контакт реле 2 - реле 1 - GPIO 0
  3. Контакт реле 3 - реле 2 - GPIO 1
  4. Контакт реле 4 - реле 3 - GPIO 2
  5. Контакт реле 5 - реле 4 - GPIO 3
  6. Контакт реле 6 - реле 5 - GPIO 4
  7. Контакт реле 7 - реле 6 - GPIO 5
  8. Контакт реле 8 - реле 7 - GPIO 6
  9. Контакт реле 9 - реле 8 - GPIO 7
  10. Контакт реле 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), если вы удалите / * * /

Не забудьте перекомпилировать код, если вы внесете какие-либо изменения.

Рекомендуемые: