Кварта Технологии

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Кварта Технологии » quarta » Wi-Fi розетка с управлением через Интернет за 60 минут


Wi-Fi розетка с управлением через Интернет за 60 минут

Сообщений 1 страница 27 из 27

1

В этом материале мы покажем, что Интернет вещей — это не так уж и сложно. Для этого за 60 минут соберем и оживим простейшую Wi-Fi розетку с управлением через Интернет.

5 минут: размышляем над задачей

Почему Wi-Fi? Потому что он у всех есть и не требует проводов, а значит, в пределах нашего помещения розетку можно будет перемещать в любой угол.

Раз розетка у нас смотрит в интернет, то помимо самой аппаратуры нам понадобится еще и нечто в этом самом Интернете. Причем разрабатывать что-то с нуля мы вот вообще не хотим, хотим максимально готовое.

Первое, что приходит в голову — для розетки берем микроконтроллер с ESP8266/ESP32, так как это очень известная и популярная платформа со встроенным Wi-Fi, а для бекэнда в Интернете готовый облачный сервис Azure IoT Central, для которого код писать вообще не надо.

Ну раз это первое пришло в голову — так и сделаем, у нас же всего 60 минут!

У автора была плата с обтекаемым названием ESP32 Dev Board, на которой установлен USB-UART конвертер CP2102 и модуль ESP-WROOM-3. Плату можно опознать по картинке ниже и по ключевику "ESP32" найти на известном китайском сайте.


Что еще нужно?

собственно сами розетки. Так как мы хотим больше приключений, возьмем сразу две штуки, ведь тогда продукт получится более конкурентоспособный! Автор статьи использовал корпус удлинителя с двумя гнездами.
модуль реле на 220 В — возьмем готовый, двухканальный, с гальванической развязкой. Нам важно, чтобы реле переключались логическими сигналами с уровнем 3.3В. Выглядит так:

пара кнопок, мы ведь не только из Интернета хотим включать/выключать розетки, но и кнопками на них;
любой AC-DC преобразователь 220В — 5В для питания ESP32 Dev Board, например, такой:

провода, чтобы все это соединить.

Впрочем, необходимый минимум из этого всего — только сама плата ESP32: можно просто подключить ее по USB, от которого и питать, и посмотреть по отладочному выводу или мультиметром на выводах, как она работает совместно с облаком. Правда, в этом случае такая "розетка" не будет выполнять свою основную функцию собственно розетки.
Для ESP32 понадобится прошивка. Вариантов для ее разработки немного:

взять стандартный тулчейн от производителя. Установка несложная, но и не особо простая. Подчеркиваю также то неприятное обстоятельство, что IDE в этом случае в комплект средств разработки не входит, и собирать все нужно будет с командной строки.
прослойка для Arduino. Это очевидно проще и быстрее, все ставится и настраивается из самой IDE Arduino. В качестве минуса — не вдаваясь в подробности, нет полноценной готовой библиотеки для работы именно с IoT Central, но мы это обстоятельство обойдем.

20 минут: подготовим облачный сервис

Заходим по ссылке. Понадобится учетная запись Microsoft, с которой следует залогиниться. Подписка Azure для пробной 7-дневной версии — не нужна, но лучше все-таки ее оформить, чтобы взять один из стандартных ценовых планов, где время использования не ограничено и есть два бесплатных устройства.

Выбираем слева Мои приложения — Новое приложение, далее Пользовательские приложения и заполняем поля:

Имя приложения: любое удобное;
URL-адрес: любой, но он должен быть уникальным;
Шаблон приложения: пользовательское приложение;
Ценовой план: стандартный 1 или бесплатный;

Если выбрали стандартный ценовой план, ниже создайте подписку Azure и выберите расположение, ближайшее к вам (для России — Европа).

Нажмите кнопку Создать

В меню выберите Шаблоны устройств — Создать, как показано на рисунке ниже.


Далее Устройство IoT — Следующий: Настроить. В поле Имя шаблона устройства введите Socket. Нажмите Далее: проверка, Создать.

В появившемся диалоге выберите Импорт модели и выберите файл Socket.json, прилагающийся к данной статье.

Видим следующую картину:


Что только что произошло? Фактически, мы объявили для IoT Central "язык" ("шаблон"), на котором говорит наша розетка при обмене данными с облаком, а именно, если развернем параметры каждой возможности (в оригинале — Capability), увидим следующее:

каждая из двух розеток передает сообщение телеметрии, в котором закодировано состояние: 0 — выключено, 1 — включено;
каждая из двух розеток принимает команду с параметром типа Boolean (true — включено, false — выключено).

Почему в телеметрии 0/1, а в команде true/false? Это связано с особенностями визуализации в IoT Central, короче говоря, телеметрию в виде 0/1 на картинках можно отобразить нагляднее, чем true/false.

Откуда взялся файл Socket.json? Автор подготовил его заранее, введя описание всех возможностей розетки в самом IoT Central, затем просто сохранил шаблон в файл, используя встроенную функцию экспорта.

Теперь по поводу визуализации. Нашему устройству неплохо бы сделать красивый дашборд, с которого мы будем посылать на него команды включения/выключения и видеть его состояния. Для этого нажмем в списке возможностей устройства пункт Представления и выберем плитку Визуализация устройства.

В разделе Телеметрия выберите Socket1State, нажмите + Телеметрия и выберите Socket2State, затем нажмите Добавить плитку. На появившейся плитке нажмите иконку  и выберите Диаграмма состояний из меню. Нажмите Сохранить.

Теперь нам нужно "опубликовать" наш шаблон, т.е. перевести его из черновика в состояние, когда им можно будет пользоваться. Для этого нажмите соответствующую кнопку (Опубликовать). Подтвердите публикацию, нажав в появившемся окне кнопку Опубликовать.

Пока что мы только опубликовали шаблон устройства, теперь заведем запись для нашего конкретного устройства. Для этого переходим в главном меню в раздел Устройства и нажимаем кнопку + Создать. В появившемся окне изменяем только шаблон устройства на Socket. Нажимаем кнопку Создать и кликаем по имени появившегося устройства. Нажмем кнопку Подключить в верхней части окна и в появившемся окне видим всю необходимую информацию, которую нам нужно будет использовать в прошивке устройства, чтобы оно могло "разговаривать" с IoT Central. В поле Тип проверки подлинности выберем Подписанный URL-адрес (SAS) (так проще). Итого нам понадобятся:

Область идентификатора — это идентификатор нашего приложения IoT Central;
Идентификатор устройства — не требует пояснений;
Первичный ключ — считаем, что это "пароль" этого конкретного устройства.

С этими данными устройство должно обратиться к сервису регистрации устройств (Device Provisioning Service, DPS) для получения адреса IoT Hub, еще одного сервиса Azure. Зачем еще IoT Hub? Дело в том, что IoT Central работает "поверх" IoT Hub, являясь как бы "оберткой" для него. Вся последующая коммуникация будет происходить именно с этим IoT Hub.

Проблема в том, что простые в использовании библиотеки Arduino не включают готового клиента DPS. Ну раз так, то возьмем систему с Windows 10, и получим этот адрес IoT Hub вручную. Утилита dps-keygen умеет это делать, правда для ее запуска понадобится node.js.

Раз так, установим последнюю версию node.js с официального сайта с параметрами по умолчанию, затем запустим стандартную командную строку Windows и выполним команды (естественно, подставив нужные данные из нашего приложения IoT Central):

npm i -g dps-keygen
dps-keygen -si:область_идентификатора -di:идентификатор_устройства -dk:первичный_ключ_устройства

Порядок аргументов в последней строке не имеет значения.

Нас предупредят, что эта возможность "deprecated" и не "best practices", но нам очень надо, и не "best", а "fast", иначе не уложимся за 60 минут, которые обещал автор, поэтому продолжаем. На выходе будет строка подключения, которую мы позже укажем в прошивке розетки:


Отлично! Мы готовы к сборке стенда.

15 минут: достаем компоненты из ящика и собираем стенд

Сгребаем в охапку все провода, компоненты, и собираем их, как показано на схеме ниже. Можно как припаивать провода, так и соединять через разъемы — дело вкуса. В любом случае особое внимание уделяем высоковольтной части. Автор сделал разъемные соединения, где это было возможно, остальное — припаял.

Схема:


Результат немного угрожающий, но для стенда вполне работоспособный:


Такой вид в общем-то вполне нормален для всяких самоделок, но если под рукой (совершенно случайно!) есть 3D-принтер, можно сделать что-то более презентабельное:


Как и обещал, две кнопки, две розетки.
Между прочим, если задумаете поменять пины на Dev Board, рекомендую эту картинку для понимания, что на каких пинах есть:


Также из-за ошибки трассировки на плате автора был не подключен пинов GND около кнопки EN (RST), так что такие моменты тоже неплохо бы проверить (на вашей плате).

Ну и для справки, схема соединений сигнальных проводов в виде таблицы (для удобства сборки):

Контакт Контакт
ESP32 GPIO16 Кнопка 1
ESP32 GPIO17 Кнопка 2
ESP32 GPIO5 Реле 1
ESP32 GPIO18 Реле 2

15 минут: подготовка инструментов и сборка прошивки

Будем собирать прошивку на Windows 10 (любой сборки, но авторы категорически рекомендуют LTSC).

Загрузим и установим Arduino IDE.
Загрузим и установим драйверы моста UART-USB, распаянного на плате. В случае автора это был CP2102 (на нем самом написано).
Запустим Arduino IDE и перейдем в меню Файл — Настройки. В поле Дополнительные ссылки для Менеджера плат вводим https://dl.espressif.com/dl/package_esp32_index.json. Это позволит установить поддержку ESP32 прямо из Arduino с сайта производителя чипа. Нажмем OK и закроем диалог.
Перейдем в меню Инструменты — Плата — Менеджер плат, в поиске введем esp32. В появившемся пункте нажимаем Установить.
Из прилагающегося архива распаковываем каталог GetStarted и открываем скетч GetStarted.ino.
Находим следующие строки и внутри кавычек соответственно прописываем SSID Wi-Fi сети и пароль:
const char* ssid     = "";
const char* password = "";
Находим строку и внутри кавычек вставляем строку соединения, которую мы получили ранее при помощи утилиты dps-keygen.
static const char* connectionString = "";
Находим строку и внутри кавычек вставляем идентификатор нашего устройства:
#define DEVICE_ID ""
В настройках платы (Инструменты — Плата) устанавливаем параметры, как на рисунке ниже.

Поправим баг библиотеки SNTP, приводящий к перезагрузке ESP32 при пропадании соединения, для чего откроем файл C:\Users\имя_пользователя\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.5\libraries\AzureIoT\src\az_iot\c-utility\pal\lwip\sntp_lwip.c и в самое начало функции SNTP_Init() вставим код:
if (sntp_enabled()) sntp_stop();

Версия библиотеки может отличаться. Замените 1.0.5 на ту, которая применяется в вашем случае.
Подключаем плату и выбираем появившийся последовательный порт в том же меню (номер порта можно уточнить в диспетчере устройств).
Нажимаем Ctrl + U, чтобы собрать и загрузить скетч в плату. Если все прошло успешно (как и должно быть), нажимаем кнопки на плате и видим, как переключаются реле.
Из меню Инструменты — Монитор порта можно посмотреть отладочный вывод платы.

Если хотите больше двух розеток — без проблем! Внесите изменения в схему и добавьте номера пинов кнопки и сокета в массивы BUTTON_PIN и SWITCH_PIN.

5 минут: наслаждаемся собранным устройством

Теперь вернемся в IoT Central, чтобы потестировать наше устройство.

На дашборде устройства есть закладка Необработанные данные, где можно увидеть сообщения телеметрии, отправляемые розеткой. Здесь же можно увидеть, что поля deviceId и messaageId не соответствуют модели. Так и есть — в шаблоне устройства их нигде нет, они добавлены только для отладочной телеметрии.

На закладке Команды можно включать и отключать каждую из двух розеток отдельно:

Также можно включать и отключать каждую розетку кнопкой на ней. В любом случае, все изменения отражаются на в телеметрии вкладке Состояние при любом переключении. Причем телеметрия отсылается не реже, чем раз в час, так что можно, например, в IoT Central создать правило, отслеживающее наличие подключения розетки: если за последний час не было ни одного сообщения, розетка потеряла связь. При срабатывании правила можно предпринять ряд действий, например, отправить e-mail и т.п.

Пример создания правила (высылает e-mail с предупреждением на заданный адрес, если не было ни одного сообщения телеметрии за последние 60 минут, другими словами, розетка "не в сети"):


Вместо заключения

Это еще не все, и мы планируем продолжить эксперименты в подобном формате, а именно:

Сделать поддержку DPS в прошивке;
Добавить поддержку IoT Plug and Play, тогда на стороне IoT Central не нужно будет регистрировать устройство, и оно все сделает само;
Сделать голосовое управление розеткой ("Эй Кварта Технологии! Включи розетку 1!").

О нас

Компания Кварта Технологии была основана в 1997 году и сегодня является лидирующим поставщиком программного обеспечения и облачных сервисов для рынка встраиваемых систем и IoT в России, Украине, Грузии и странах СНГ.

Мы предоставляем услуги по лицензированию, разработке и обучению в области встраиваемых решений, помогая производителям из разных стран создавать передовые интеллектуальные системы и устройства в кратчайшие сроки.

С 2004 года компания является авторизованным дистрибутором и тренинг-партнером Microsoft Windows Embedded (IoT) на территории России и СНГ. Последние несколько лет входит в Топ-5 лучших дистрибуторов Microsoft по Embedded-продуктам в регионе EMEA (Европа, Ближний Восток, Африка) и обладает статусом «Windows Embedded Partner Gold Level».

0

2

Возможно, влияние того, что я начинал разрабатывать устройства «умного дома», когда интернет был по карточкам и до него надо дозваниваться, а УФ лампа была обязательным инструментом дебага, я придерживаюсь принципа максимальной автономности. Как эксперимент — да, статья интересна, но, ИХМО, вся логика должна быть внутри объекта, отсутствие связи не должно нарушать эту логику… Получается, забыл провайдеру заплатить или по политическим причинам связь рубанули, локально — только кнопками. Для простейшей вещи, да, нормально. Но сложные системы следует проектировать на возможность нормального функционирования без внешних серверов…

0

3

Поэтому я, активно шпигуя дом такими "умными розетками", пришел к тому, что надо ставить свой сервер (у меня сейчас blynk на orangepi) для автономности.

0

4

Суть всех этих IoT-устройств — как раз в доступности извне. Понятно, что кейс «управлять розеткой с телефона, лежа на диване» — не очень практичен, ведь на розетке есть кнопки. А вот вариант «удаленно что-то включить/выключить» может быть очень полезен на практике. Например, 3D-печать крупных моделей занимает десятки часов. Если принтер подключить через подобную розетку, которая смотрит в интернет, а за процессом печати периодически поглядывать через камеру, которая также смотрит в интернет, появляется возможность экстренно обесточить принтер в случае проблем. Получается, человек нужен, только чтобы запустить печать, а дальше не обязательно сидеть рядом с принтером.
Можно придумать еще таких примеров, начиная от банального «удаленно включить обогреватель к моему приходу», заканчивая управлением всяким оборудованием. Иметь какой-то локальный сервер, возможно, надежнее, но вы лишаете себя возможности удаленно управлять устройством. Либо выделяете для своего устройства статический внешний IP (не любой провайдер это технически может), пробрасываете порты через роутер и сами думаете о безопасности своего сервера.
У Microsoft, кстати, на случай необходимости такого локального сервера есть уже готовое решение IoT Edge, которое умеет работать вообще без подключения к Интернет. И если будете использовать его с Azure, там очень много всего есть прямо «из коробки» (у нас об этом есть отдельная статья).
По поводу «забыл оплатить Интернет» — это совсем уж частные случаи. А если интернета не будет по политическим причинам, розетка – последнее, что будет вас волновать.

0

5

Зачем обесточивать принтер? Можно остановить печать с того устройства, с которого она запущена.

0

6

Большинство принтеров печатают автономно с флешки. По крайней мере — это основной кейс использования. И да, единственный способ прервать печать — это жать рубильник.

0

7

Но тут я бы с Вами поспорил. I в IoT — больше маркетинговый ход, чем инженерный. Это как «Java» в JavaScript. Суть автоматизации — именно автоматизация процессов. Не надо каждому датчику на внешний сервер ходить. Как с той же температурой. Проще локально собрать данные и вынести решение о режиме котла и пропускной способности теплосети дома. А управление температурой — да, неплохо иметь постоянный контроль извне. Но если его не будет, по разным причинам, локальный контроллер будет действовать согласно заранее прописанному расписанию, на худой конец, SMS можно отправить, если локальная автоматика это поддерживает. Изначально мой комментарий был про то, что вся логика — внутри объекта. Наружу — панель управления. И если панель отвалиться — ничего страшного не случиться. В конце концов, приехав в дом, я смогу и комфортную температуру выставить и свет включить. Со своего смартфона или аппаратной универсальной панели.
P.S. К сожалению, часто приходится оставаться без сети после Августовских событий в Минске. Да и рантье у меня немного раздолбай. Постоянно забывает провайдеру оплатить, так что случаи разные бывают…

0

8

Вот да. Умный — не потому, что доступный извне, а потому что сам решает.

0

9

Я не лишаю возможности управления извне. Все порты на роутере у меня прокинуты и я могу также извне управлять устройствами. IP может быть динамическим. Главное — не серым. Интернет у нас бывает отключают, а управление всем светом из постели с телефона сейчас острая необходимость, а не прихоть.

0

10

Вы ужасно ошибаетесь, считая что достаточному количеству пользователей нужно что-то делать дома, находясь вне этого дома. Большинству как раз наоборот.

0

11

Мне, когда читал, эти же мысли пришли в голову… Скорее всего статья направлена на продвижение услуг, ибо автор кем-то там является и имеет отношение к майкрософту...

0

12

Так вроде в конце статьи они и написали. Для попробовать — статья дельная, единственное, не рекомендовал бы сразу с сетевым напряжением людям, ни разу паяльник в руках не державшим. Стенд, вроде, нормально более менее собран, но вот защитную крышку для колодок реле неплохо бы допечатать, по любому, много быстрее, чем базу…

0

13

Лично как по мне, для такой вот системы должен быть отдельный шкаф, распределительный щит с автоматами, только широкого профиля и проектировать его должен грамотный специалист, а людям, не державшим в руке паяльник я бы вообще не советовал туда лезть.

0

14

Не могу не согласиться, но не на все 100%. Как раз такая простенькая автоматика и ставится локально, дабы проводов лишних от шкафа не тянуть или автоматизировать уже готовую электросеть, не вскрывая стены. Не вижу прям вот интересных кейсов применения WiFi розетки, а в доме я у себя разводил 3 типа питания: резервируемое, через бесперебойник, постоянно подключено к сети, и отключаемая линия при постановке дома на охрану. В шкафах, само собой…

0

15

Интересно, что я только что такую розетку сделал себе и тут статья такая попадается. Вот прям вчера собрал в корпусе из неработающего таймера и тех же компонентов!

0

16

Красиво…
Но для получения результата достаточно и 5 минут — взяв готовые прошивки от wifi-iot, tasmota, espeasy и т.д..

0

17

Так и есть (5 минут – это если железо готовое, конечно). Мы как раз и пытаемся донести мысль, что порог вхождения в интернет вещей стал достаточно низким, и сделать какое-то свое решение можно достаточно быстро.

0

18

Везде видел на схемах с esp8622, что кнопки подключаются с последовательным включением резистора. Иначе можно получить от короткого замыкания сгоревшие выходы esp. В esp32 уже решили такую проблему?

0

19

Здесь лучше посмотреть конкретное место, где так делают, т.к. не совсем понятно, откуда там возьмется короткое замыкание. Если есть возможность, дайте ссылку на схему.
Последовательные резисторы иногда используются, например, для согласования в высокоскоростных схемах, для ограничения тока через пин, а при подключении кнопки в них нет необходимости.
Для кнопки нужны подтягивающие резисторы. Если речь именно о подтягивающих резисторах, то они встроены в ESP32 и подключаются к пину программно в прошивке.

0

20

Скорей всего автор комментария говорит про случай, когда что-то разрабатываешь — можешь перепутать и включить пин на выход. А там ограничение на ток коммутации, можно спалить выход.

0

21

Для эстетики берём удлинитель на 3-4 розетки, у 2х из них спиливаем углубления и закрываем любым пластиком, в котором так же монтируем кнопки, а в освободившемся месте в удлинителе устанавливаем все компоненты.
Такой вариант даже не стыдно будет использовать и он выглядит более электробезопасным, по сравнению с «презентабельным» корпусом из статьи.

0

22

Идея очень хорошая, но пилить лень

0

23

Ну тут можно применить смекалочку, ведь необходимо просто освободить внутреннее место и не сломать сам корпус. Могу предложить такие варианты:
1) Отрезать инструментом, типа дремеля, лобзика, коронки по дереву, балеринкой.
2) Отрезать раскалённым ножом канцелярским или даже паяльником если не жалко.
3) Насверлить дюжину отверстий в стенках углубления и отломить, теоретически трещина пойдёт между отверстий.
4) Отломить плоскогубцами. Т.к. мы имеем угол 90, то при аккуратном ломании сам корпус должен выжить. Или взять кусачки\бокорезы.
Отверстие закрыть снаружи, хоть притянув кусок пластика стяжками к паре отверстий проковырянных ножом (для не имеющих чего-то сверлящего), или на двусторонний скотч, или на термоклей, что даже немного герметичности даст.
Я бы на глаз оценил затраты времени минут в 20 максимум, ну и очевидно что чем более подходящий инструмент тем меньше времени потратится.

0

24

Кстати, давно появился такой компонент как реле-шилд для ESP8266. Вместе с есп-шкой он занимает куда меньше места, чем ваша NodeMCU с блоком реле. А выходов у ESP достаточно. Их даже 4. Тока отдельно нужен USB-uart преобразователь.

0

25

На мой взгляд, использовать esp32 для умной розетки — как стрелять из пушки по воробьям. ESP8266 + релейный модуль для нее будет вполне достаточно.

0

26

Я тоже за 8266. Ее хватает с головой. Интересно, что в 32 встроенные подтчгивающие резисторы есть. Хотя надёжнее самому припаять.

0

27

Можно было сэкономить массу времени на разбирательствах «с тулчейнами», если использовать, например, сервис Wifi-Iot.com, где даже в бесплатном режиме легко собирается весьма функуиональная прошивка для ESP. Это если не брать готовые решения от Sonoff (на которые для избавления от облачного рабства накатываются прекрасные прошивки от Tasmota).

0


Вы здесь » Кварта Технологии » quarta » Wi-Fi розетка с управлением через Интернет за 60 минут