Алиса, Ардуино и Blynk — делаем собственное устройство
Алиса, Ардуино и Blynk — делаем собственное устройство
На данной странице размещена инструкция по простому подключению ардуиноподобных устройств, имеющих доступ к сети. Обязательно пригодится тем, кто:
- любит «дешево и сердито»;
- не любит готовые решения, и предпочитает мозговой штурм и пайку;
- еще думает над своей концепцией УД (можно использовать, как пример);
- кто «в теме», но пока имеет сложности с подключением собственных наработок к Умному дому Яндекса.
Из чего состоит устройство
Само устройство внешне похоже на переходник. Внутри розетки находится плата, датчики и встроенный модуль GSM, благодаря которому и происходит управление. Электронная плата оснащена слотами для сим-карты и держателем для батареи. На корпусе есть вилка и евророзетка. Также есть светодиодные индикаторы и кнопки, количество которых зависит от используемой модели. Дополнительно в розетку могут быть встроены датчики температуры, аккумуляторы, таймеры и другие важные компоненты, расширяющие функционал.
Wi-fi розетка на esp8266 Умный дом
В сети Интернет поискал и нашёл много разных исполнений умных радиоуправляемых wifi розеток, но все варианты мне неустраивали или по исполнению или по методу управления или ардуино или инфа какая-то есть, но скучно читать — ни одной картинки, безобразие.
Представляю Вам Wifi розетку на модуле ESP8266.
В своём варианте исполнения релейной управляемой розетки использую модуль ESP-07(вы можете использовать ESP8266 сразу с UARTом на борту и NODEMCU вот такую напимер), Прошитый под LUA то есть nodemcu, соответственно напишу два скрипта LUA. О том как писать — вгружать скрипты писал в первой статье «Первая программа на LUA для ESP»
Использовать для написания и загрузки скриптов в модуль esp8266 буду программу
ESPlorer
созданную именно под эти цели.
В первом скрипте будет реализована функция подключения к Wi-fi роутеру и 10 секундная задержка перед запуском второго скрипта основной программы.
Сделано именно с задержкой для того что-бы после перезагрузки модуля с помощью комманды tmr.stop остановки счётчика можно было остановить таймер и что-то подправить и вгрузить опять иначе программа при выполнении вам не даст ничего вгрузить вновь(вобщем делайте так)!
Второй скрипт будет содержать саму программу с поднятым веб сервером на котором будет простецкий html интерфейс с кнопками.
Простенькая схемка
Использовать — тоесть дёргать ногами будем GPIO2 и GPIO0.
Первый скрипт
с именем init.lua
Обязательно с таким именем ибо nodemcu первым делом после старта загружает именно его.
Незабываем в скрипте поменять имя и пароль от сети вайфай!
Второй скрипт назовём его rrr.lua
Будет поднимать вебсервер и ждать нажатия на кнопки.
Лучше скачать эти скрипты отсюда, так как в коде потёрлись(фильтранулись движком сайта) некоторые теги.
Скачать скрипты LUA для Умного дома реле.
init.lua
rrr.lua
Код может и корявый но рабочий_) Проверйяте)
Не обращайте внимание если при включении релюхи будут передёргиваться, это нормально для GPIO2 и GPIO0. Можете использовать другие ноги.
Если всё без ошибок, то Вы сможете войти в устройство через браузер по выданному от wi-fi роутера паролю. Ож нже будет выдан в интерфейс если смотреть в com порт автоматически при выполнении в скрипте комманды print(wifi.sta.getip())…
Распиновка ESP для работы с ногами GPIO в среде LUA
Добавлено 01.04.2020
Всвязи с распространением коронавируса по стране сидим дома и собираем очередную розетку для насоса малыша на обычном пускателе. Почему не твердотельное РЕЛЕ на симисторе? Да потому что китайцы суют в твердотелки 12 амперный 600вольт симистор и впаривают, а я в результате получу пробитый симистор от коммутации индуктивной нагрузки.
Пускатель(реле) тож может пригореть, но время покажет и эффективность снаббера.
Вот что получается.
`
Умный дом — делаем управляемую розетку из роутера
Краткая предистория
Сначала был хаос… Пропустим этапы сотворения мира и эпоху динозавров и перейдём сразу к 21 веку. Кругом беспроводные технологии, электроника повсюду, космические корабли летят к Марсу…
Открыв для себя китайские интернет-магазины разных товаров, я накупил всякого добра. В частности, были куплены наборы для дистанционного управления лампочками: пультик и к нему несколько коробочек. В результате я сделал дома 4 управляемые розетки и теперь, лёжа вечером на диване и читая, можно зажечь или погасить свет в комнате и в коридоре, не вставая с дивана. Удобно.
Ещё были куплены совершенно чудесные маленькие дешёвые WiFi-роутеры. Один из них использован как «удлинитель» для беспроводного интернета в детской, а другой оставался в резерве. Кстати, рекомендую, весьма неплохие характеристики за сумму менее 600 рублей.
В «закромах Родины» лежало много разных хороших вещей, и были большие новогодние выходные. И родился проект…
Цель и средства
Решено, что совершенно необходимой вещью в моём «умном доме» является электрическая розетка, которой можно управлять через интернет. Для этого были собраны в кучу необходимые детали:
- роутер
- плата с микроконтроллером AtMega16 от старого проекта
- твердотельное реле
- 2-строчный ЖКИ-дисплей
- корпус
- провода и прочие расходные материалы
Техническое задание
Устройству было дано имя «MZ-switch», и оно должно было делать следующие вещи:
- принимать команды от хозяина через интернет
- работать как реле управления нагрузкой и как реле времени
- работать как «пинговалка» и уметь перезагружать роутер и отключать нагрузку при отсутствии пингов
- программировать параметры работы из командной строки и сохранять их в своей памяти
- показывать статус на дисплее
- радовать хозяина своим существованием
Инжекция кода в роутер
Когда я получил роутер, то, разумеется, сразу полез внутрь. Сначала я полез туда не механически, а метафизически, через телнет.
Выяснилось, что внутри у него неонка Линукс, и даже можно при желании написать и запустить собственный скрипт. Можно даже сохранить его в памяти роутера, но вот как заставить скрипт автоматически запускаться при старте?
Несколько дней было убито на то, чтобы найти возможность запуска скрипта. Основная идея была в «инжекции кода» в запуск какого-то стартового скрипта, и такой скрипт был найден! Инжекция выглядит так:
Теперь мой роутер при старте извлекает из своей памяти сохранённые там скрипты и запускает их. Следовательно, можно реализовать свой алгоритм взаимодействия с окружающим миром.
Добившись от роутера запуска скриптов, я полез в него механически. Внутри обнаружился последовательный порт, через который можно получить доступ к консоли. Припаяв 3 штырька к нужным точкам платы, я получил возможность управлять роутером через последовательный порт с помощью микроконтроллера.
Микроконтроллер и программа управления
Микроконтроллер должен уметь общаться через последовательный порт с роутером, управлять нагрузкой, отображать на дисплее результаты работы и вообще делать всю грязную работу. От предыдущего проекта оставалась плата с микросхемой AtMega16, имеющая нужный функционал. Она и пошла в дело.
Базовый алгоритм работы микроконтроллера выглядит так: получаем строку с командой, анализируем, выполняем, возвращаем строку с ответом. Это напомнило мне логику работы аналоговых модемов: S-регистры с данными и AT-команды управления.
Уважая копирайты и вообще для разнообразия, алгоритм оперирует понятиями R-регистров и MZ-команд. Регистры хранят числа и строки, а команды позволяют изменять регистры и управлять логикой работы.
Пример команды настройки контраста дисплея: «MZ+R0=200»
Умный алгоритм
Алгоритм работы микроконтроллера состоит из нескольких отдельных задач:
- передача данных из буфера передачи
- приём данных и сохранение их в буфере приёма
- анализ принятых данных и определение команд
- чтение и запись внутренних R-регистров
- управление нагрузкой и логикой работы
- индикация режимов работы
- отсчёт интервалов времени
Всё это удалось разместить в объёме 8К кода и 512 байт данных, использовав всего половину ресурсов микроконтроллера. Так что можно ещё чего-нибудь придумать и напрограммировать. Например, показывать на дисплее время, погоду, играть музыку и передвигаться по квартире.
Управляющая программа была написана и отлажена на обычном терминале. При этом не пострадало ни одно устройство.
В результате получился следующий функционал устройства:
- пауза после включения: позволяет дождаться загрузки роутера и не реагировать на «мусор», который он при этом выдаёт в консоль
- если требуется авторизация, то ввод логина и пароля в ответ на запрос от роутера
- запуск скрипта, позволяющего настроить конфигурацию роутера для работы с устройством (init)
- запуск основного скрипта, который будет выполняться роутером при работе (loop)
- приём команд от роутера и передача ответных сообщений
- сторожевой таймер для перезагрузки роутера при отстутсвии активности
- запуск скрипта, перезагружающего роутер (halt)
- включение и выключение нагрузки с помощью оптоизолированного реле
- возможность настраивать все параметры и хранить их в памяти микроконтроллера
Шайтан-машина
Почему-то очень часто реализация функционала какой-нибудь простой вещи напоминает мне задачи из игры Incredible machine. Ну как может цель «включить лампочку» состоять из таких затейливых вещей и действий? А вот как:
- Чтобы роутер мог выполнять наши скрипты, сделаем «инжекцию кода» в один из его собственных скриптов.
- Инжектированный код создаёт в папке /tmp несколько служебных скриптов, которыми мы потом воспользуемся.
- Роутер не позволяет создавать файлы с атрибутом «исполняемый» и, благодаря заботливым китайцам, не имеет команды chmod.
- Но мы элегантно обходим эту неприятность: сначала копируем какой-нибудь исполняемый скрипт под нужным нам именем в папку /tmp, а затем перезаписываем его содержимое!
- Роутер имеет WEB-интерфейс для управления, но изменить/добавить свою страничку нельзя: всё read-only
- Но мы элегантно обходим эту неприятность: оказывается, есть страничка для запуска любой команды, но на неё нет прямых ссылок. Набираем адрес этой странички вручную, и можем запускать свои скрипты! Хоть и не красивой кнопкой, а олдскульной командной строкой.
- Чтобы устройство получило команду от пользователя, используем метод «сохрани-и-передай»: один скрипт вызывается из формы ввода команд и сохраняет ввод пользователя в файл. Другой скрипт постоянно проверяет наличие этого файла, а найдя — отправляет через последовательный порт на микроконтроллер.
- Получив ввод пользователя, микроконтроллер выделяет из него команду и выполняет её. Например команду «включить нагрузку».
Всё, задача решена!
Сборка в корпус
Множество проектов не доживают до релиза из-за того, что лень или не из чего делать нормальный корпус. В данном случае изначально была поставлена цель: сделать «промышленный образец», чтобы он выглядел по-взрослому, а не как обычно.
Корпус был взят достаточно просторный, чтобы всё там разместить без тесноты. Пара выходных с дрелью и напильником, йо-хо-хо и бутылка рома, и вот устройство собрано. Все крепёжные элементы были найдены в шкафу, где хранятся остатки от сборки мебели и вообще хлам полезные в хозяйстве мелочи. Не удивляйтесь креплениям из дюбелей: винтов с гайками под нужный диаметр не нашлось.
Незаменимым материалом при сборке являются «китайские сопли» — трубочки из пластмассы для клеевых пистолетов. За неимением такого пистолета все работы выполнялись жалом обычного паяльника.
Вот что получилось в итоге:
снаружи
изнутри
Зачем это было нужно
Не буду говорить, что создано уникальное устройство, аналогов которому ещё не существует. Хотя, почему не буду? Буду! Любой новый продукт в маркетинговых материалах именуется не иначе как «уникальный» и «не имеющий аналогов». В крайнем случае «в несколько раз лучше, чем обычный…». Поэтому говорю: получилось действительно уникальное устройство, более чем в 9000 раз умнее, чем обычная розетка.
Можно подключить электрочайник и включать его с ноутбука через Wi-Fi. А можно включить пароходную сирену, если в доме пропал интернет. А можно подключить к устройству Самый Главный Сервер и перезагружать его, находясь дома.
На самом деле данный проект был реализован в качестве «разминки для ума», чтобы не растерять навыки в программировании микроконтроллеров и владении паяльником.
Материалы проекта разрешается копировать и модифицировать. Желательно со ссылкой на автора проекта.
Устройство розетки
В корпусе устройства смонтировано несколько модулей:
- Блок высоковольтной коммутации — реле с рабочим током до 16 А, включающее и отключающее подачу 220 В в нагрузку.
- Контроллер управления — микропроцессор с предустановленной управляющей программой.
- Блок питания 3–5 вольт, необходимый для работы микропроцессора и блока связи.
- Блок доступа в сеть — WiFi или GSM модуль.
При желании и наличии минимального опыта монтажа радиооборудования подобную розетку можно собрать своими руками из стандартных компонентов.
Тестирование
Для проверки розетки можно использовать блок питания на 5 вольт, батарейки, либо li-ion аккумулятор с напряжением 3,7 вольта, что я и сделал. В качестве нагрузки подключил светодиодный ночник.
На фото ниже розетка подключена к линии 220, один провод от аккумулятора подключен к управляющему разъему, ночник не горит, поскольку отсутствует управляющий сигнал 5 вольт.
Подключение розетки с дистанционным управлением
Подключаем второй провод от аккумулятора к разъему, тем самым подаем управляющий сигнал на реле. Ночник включился! Розетка работает!
Проверка работы розетки с дистанционным управлением
По скромным подсчетам, максимальная длина управляющего провода зависит от его сечения, и может достигать нескольких сотен метров.