Андрей Смирнов
Время чтения: ~25 мин.
Просмотров: 29

Мой умный дом 2019: Sonoff, ESP8266, MQTT, Node-red, Алиса

Введение:

Эта статья будет первой из цикла про всевозможные датчики. В ней будут рассмотрены только несколько распространенных атмосферных датчиков. А для начала будут даны общие принципы работы с Wi-Fi модулями типа ESP-8266, создание для них микропрограммы, передача данных с датчиков в систему умного дома MajorDoMo.

Датчики:

Всевозможные датчики являются неотъемлемой частью любой системы автоматизации. Какие же из них наиболее востребованы в системе «Умный дом»? Рассмотрим их:

  • датчики температуры, влажности, давления…
  • датчик концентрации CO2
  • датчик освещенности
  • датчик движения
  • датчики открытия дверей и окон
  • датчик затопления (протечки)
  • датчик утечки бытового газа
  • датчик дыма.
  • датчик электропотребления

Это основные датчики. В конкретных случаях в дополнение к ним, могут применяться и другие, например: датчик пересечения луча, датчик приближения, акустический датчик, датчик давления воды, датчик дождя, датчик влажности почвы, датчик уровня жидкости и т.п.

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

Далее как обычно рассмотрим самодельные и покупные варианты. Кстати не всегда нужно однозначно отдавать предпочтение тем или другим — можно смело комбинировать.

Датчики своими руками:

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

Микроконтроллер:

Итак, начнём с самодельных вариантов на базе Wi-Fi микроконтроллера ESP8266. Во всех примерах буду использовать плату Wemos D1 mini.D1mini_r-300x171.jpg

На данном микроконтроллере очень легко можно строить различные комбинированные устройства, совмещающие в себе сразу и какие-то датчики и актуаторы для управления нагрузкой, например, светильник с датчиком освещенности и т.п. К модулю можно подключать кнопки и сенсорные площадки. При чем нажатия кнопок с модуля можно обрабатывать на сервере умного дома. Интересные комбинации можно получить, подключив к модулюOLED-150x150.jpg миниатюрный OLED дисплей, на который можно сразу выводить текущие значения с датчиков и (или) информацию с сервера умного дома. Для подключения к этой плате без пайки есть несколько разных шилдов, например, плата для подключения внешнего аккумулятора, плата с установленным реле, со слотом для microSD карты и т.п. 

Для первоначальной загрузки в плату микропрограммы, не требуются дополнительные адаптеры. Модуль уже имеет на борту встроенный USB-UART адаптер и его достаточно просто подключить к компьютеру через USB. В дальнейшем поддерживается обновление микропрограммы по воздуху (OTA).

Перед тем, как перейти к конкретным решениям необходимо рассмотреть общие правила работы с модулями ESP8266.

Для простоты работы будем использовать конструктор прошивок от проекта WiFi-IoT. Если использовать базовые опции конструктора, то можно обойтись без покупки (совсем не дорогой 110RUR) лицензии. Например, без использования платных функций можно подключить один датчик температуры и влажности и передавать его значения в систему умного дома 1 раз в 10 минут. Но лично я предпочитаю всегда активировать Pro версию для доступа ко всем возможностям модуля. Для связки датчиков с системами «Умного дома» очень удобно использовать протокол MQTT.

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

Создание микропрограммы при помощи конструктора:

Итак, после регистрации на сайте проекта, для создания микропрограммы через конструктор, необходимо:Wifi-IoT-2-300x240.jpg

  • сверху главной страницы выбрать микроконтроллер (ESP8266);
  • затем ввести название нового профиля;
  • далее нужно отметить чекбоксы напротив необходимых опций, как правило это:
    • название подключаемого датчика и Коррекция датчиков в разделе «Сенсоры»;
    • MQTT клиент в разделе «Сервисы»;
    • Время и NTPПоддержка календаряОбновление OTAAuto OTA, Спящий режим (если планируется автономное питание), Планировщик заданий (для периодической перезагрузки модуля) и Настройки по умолчанию в разделе «Системные»
  • В пункте «Настройки по умолчанию» можно заранее ввести настройки точки доступа, что бы после прошивки модуль автоматом к ней подцепился.
  • Затем нажать кнопку «Сохранить, как новый профиль», после чего внизу страницы будет доступна кнопка «Скомпилировать», а после компиляции появится ссылка на скачивание прошивки. 
  • Для реализации конкретных задач, например, для подключения кнопок, экранов и т.п., могут понадобиться дополнительные опции, но я на этом тут не буду подробно останавливаться, все можно изучить на сайте проекта). 

Загрузка микропрограммы:

Загрузку микропрограммы удобно выполнить при помощи NODEMCU Flasher. Предварительно, для исключения разных возможных глюков, необходимо зашить файл 0x00000_blank1m.bin, скачанный с сайта проекта WiFi-IoT. Для этого на вкладке «Config», нажав на шестеренку, необходимо выбрать файл для прошивки. Затем, вернувшись на вкладку «Operation», запустить процесс загрузки, для чего необходимо нажать кнопку «Flash». После успешного окончания можно аналогичным образом прошить и основной файл.

Настройка ESP8266:

Для настройки модуля необходимо:

  • Зайти в панель администрирования, набрав в адресной строке браузера IP-адрес, полученный модулем (Если в конструкторе были верно заполнены «Настройки по умолчанию», то микроконтроллер автоматически должен подключиться к сети и его адрес можно будет увидеть в настройках роутера). 
  • Дать понятное имя модуля в поле Host name на вкладке «Main»
  • На вкладке Hardware активировать нужный датчик.
  • На вкладке Servers активировать опцию «Enable send MQTT»,  задать IP-адрес сервера умного дома (брокера MQTT) и выставить желаемый период отправки.
  • Если требуется — выполнить дополнительные настройки…

Настройка Majordomo:

Будем исходить из того, что сервер Majordomo уже установлен и функционирует. Так же на нем установлен брокер Mosquitto и установлен модуль MQTT (в настройках модуля указать путь для подписки — #). Итак, нам необходимо:

  • Убедиться в получении данных по протоколу MQTT с датчика. Для этого идем в Панель управления>Устройства>MQTT,  в строку поиска вводим имя,  которое задали в настройках модуля ESP8266, находим там наш датчик и видим кучу полученных метрик, к некоторым из них мы будем привязывать объекты.ТУТ ЗАКРАЛАСЬ ИДЕОЛОГИЧЕСКАЯ ОШИБКА ПО РАБОТЕ С ПРОСТЫМИ УСТРОЙСТВАМИ — ИХ НЕ НАДО СОЗДАВАТЬ ОТДЕЛЬНО. В БЛИЖАЙШЕЕ ВРЕМЯ ПОПРАЛЮ (однако, так тоже работает)
  • Теперь нужно создать по «Простому Устройству» (ПУ) на каждую функцию датчика. Для этого идем в Панель управления > Устройства > Простые устройства. Нажимаем кнопку добавить и заполняем соответствующие поля, указав тип датчика (температура, влажность, давление и т.п.). Здесь нам нужно создать столько простых устройств, сколько функций есть у датчика, например, если датчик измеряет только температуру, то необходимо создать одно ПУ соответствующего типа, если температуру и влажность, то создаем 2 ПУ и т.д.  
  • Автоматически создадутся связанные объекты, к свойствам которых нужно будет привязывать параметры полученные по MQTT от наших физических устройств.
  • Теперь необходимо связать параметры физических устройств, получаемые по MQTT с виртуальными объектами.  Для этого возвращаемся в Панель управления>Устройства>MQTT, находим там наше устройство и нужный нам параметр (например для датчика температуры DS18B20 параметр будет называться /имя_датчика/dsw1, а для DHT22 — /имя датчика/dhtt1 для температуры и dhth1 для влажности). Справа от нужного параметра нажимаем кнопку с пиктограммой карандаша, затем в поле «Связанный объект» выбираем нужный объект, в поле «Свойство» выбираем нужное свойство (как правило value) и в поле «Метод» выбираем «Value updated». 
  • Сохраняем и настройки на этом, можно сказать, закончены.
  • Датчики температуры, влажности, давления.

    Итак, теперь перейдем к рассмотрению самих датчиков:

    DS18B20

    Для начала изучим цифровой температурный датчик DS18B20, подключаемый по шине 1-wire. Основные технические характеристики следующие:

    • Диапазон измерения температуры составляет от -55 до +125 °C.
    • Точность: ±0,5°C (в пределах −10…+85 °C)
    • Время получения данных: 750 мс при 12-битном разрешении; 94 мс при 9-битном разрешении
    • Напряжение питания: 3–5,5 В
    • Потребляемый ток при бездействии: 750 нА
    • Потребляемый ток при опросе: 1 мА

    Из особенностей следует отметить:

    • На одну линию связи может быть установлено до 20 датчиков (макс. кол-во нужно выставить в конструкторе прошивки перед компиляцией). Каждый DS18B20 имеет свой уникальный цифровой идентификатор, что позволяет принимать данные от нескольких датчиков на одной линии связи.
    • Возможность получения питания от той-же линии связи (паразитное питание). 1 и 3 выводы подключаются на общий провод, а плюс питания через резистор 4,7k подключается к выводу №2 (на длинной линии рекомендуется полноценное питание).
    • Выпускается как в обычном исполнении, так и в закрытом корпусе (герметичной металлической капсуле), что позволяет использовать его под водой, например для контроля температуры воды в аквариуме.

    Схема подключения термодатчика к популярной плате Wemos D1 Mini выглядит следующим образом (GPIO5 для примера, можно использовать и другие, только отразить это в настройках микроконтроллера):

    В конструкторе прошивок на сайте wifi-iot.com необходимо отметить соответствующий чекбокс, а в настройках модуля ESP8266 необходимо активировать опцию DS18B20 и указать правильный номер GPIO в разделе Hardware, затем обнаружить датчик, отсканировав шину 1-wire в одноименном разделе. 

    После всех манипуляций на главной странице админки контроллера можно увидеть показания с термодатчика, а для доставки данных в систему умного дома лучше всего использовать протокол MQTT, выполнив соответствующие настройки в разделе Servers (при условии, что нужная опция была задана в конструкторе прошивок, подробности  ранее в этой статье и в статье про MQTT):

    DHT22 (AM2302):

    Это комбинированный датчик температуры и влажности, с приемлемой точностью (возможно потребуется начальная калибровка в настройках прошивки WiFi-IoT). Однако существует и более дешёвая версия этого датчика DHT11 (в синем корпусе), которая к использованию не рекомендуется по причине совсем низкой точности. Основные параметры датчика следующие: 

    • Питание – от 3 до 5 Вольт;
    • Измерение влажности в интервале от 0% до 100%. Точность измерений от 2% до 5%;
    • Диапазон измеряемых температур – от минус 40 до 125 градусов по Цельсию (точность измерений – 0,5);
    • Частота снятия показаний: одно измерение за 2 секунды.
    • Габаритные размеры: 15,1 мм длина; 25 мм широта; 5,5 мм высота;

    Схема подключения  к плате D1 Mini следующая:

    В конструкторе прошивок на сайте wifi-iot.com необходимо отметить соответствующий чекбокс, а в настройках модуля ESP8266 необходимо активировать опцию DHT 11/22 в разделе Hardware. На главной странице админки контроллера можно увидеть показания температуры и влажности.

    BME280

    Новейший датчик от фирмы BOSH. BME-280 это три в одном: Датчик давления, влажности, температуры, подключается по I2C. Есть так же версия под названием BMP-280 — она менее интересна, т.к. не имеет на борту датчика влажности. Сам датчик очень мелкий, поэтому имеет смысл покупать его сразу в виде модуля (например, как на фото справа). Характеристики у датчика следующие:

    • Рабочее напряжение: 3.3В
    • Диапазон давления: 300-1100hPa
    • Диапазон температур: -40 — +85 °C
    • Диапазон влажности: 0 — 100 %
    • Среднее энергопотребление: во время измерений 2.74 нА, в спящем режиме: 0.1 нА
    • Среднее время измерения: 5.5 мс
    • Точность измерения: Давление — 0.01 hPa ( < 10 cm), Температура — 0.01° C
    • Температурный коффициент смещения: ± 0.12 hPa (средний), эквивалент 1 метра

    Схема подключения следующая (Внимание, датчик требует питание 3.3В): 

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

    В конструкторе прошивок на сайте wifi-iot.com необходимо отметить соответствующий чекбокс с названием датчика, а в настройках модуля ESP8266 необходимо активировать опцию BME280 в разделе Hardware. На главной странице отобразятся полученные значения.

    Это была тройка пожалуй самых популярных датчиков. Естественно в вышеприведенных вариантах эти датчики (микроконтроллеры) требуют питания от сети, т.к. поддержание Wi-Fi соединения довольно энергозатратно. Как-то может помочь в этой ситуации режим Deep sleep, для активации которого необходимо отметить соответствующую опцию в конструкторе прошивки (в шестеренке указав время бодрствования), затем электрически соединить между собой два вывода микроконтроллера — Reset c GPIO16, а так же настроить интервалы просыпания в разделе MAIN веб-админки Wi-Fi модуля. Но конечно микроконтроллеры, которые используют другие стандарты передачи данных, могут обеспечивать на порядки лучшую энергоэффективность, работая годами от одного комплекта батареек.

    Покупные датчики:

    Как правило большинство готовых решений имеют батарейное питание и работают по радиоканалу zigbee, z-wave и т.п. Среди готовых датчиков весьма популярны Noolite (433MHz свой протокол), Xiaomi (zigbee), большой ассортимент z-wave совместимых решений и т.п. Более подробно остановлюсь на первом:

    Noolite PT111:

    Это датчик температуры и влажности с автономным питанием. Работает по беспроводному протоколу на частоте 433МГц. Основные технические характеристики:

    • Диапазон измерения температуры: -20…+50 °С
    • Диапазон измерения относительной влажности: 1…99 %
    • Точность измерения влажности: 4,5 %
    • Диапазон рабочих температур / влажности -20… +50 °С / 10…80 %
    • Максимальное рабочее расстояние: 50 м
    • Тип элементов питания датчика: 2 x AAA (LR03)Alkaline 1.5 В
    • Время автономной работы от одного комплекта элементов питания: не менее 1 года
    • Степень защиты корпуса: IP 20

    Для получения данных температуры и влажности понадобится шлюз Ноолайт, подключаемый к UART или USB:

    По UART можно подключить устройство напрямую, например, к одноплатному компьютеру Raspberry Pi. В версии с USB, кроме наличия USB-UART преобразователя, нет никаких отличий от более дешёвого варианта (без USB).

    В систему Majordomo из Маркета дополнений необходимо установить модуль Noolite и выполнить начальные настройки — для ОС Линукс  необходимо выбрать Serial Port /dev/ttyUSB0 (как правило). После этого на всякий случай можно перезагрузить Мини ПК.

    Общий алгоритм подключения датчика температуры и влажности от Ноолайт к системе «Умный дом» следующий:

    • Привязать наш датчик температуры и влажности к какому-нибудь каналу (от 1 до 64). Для этого идём в Панель управления > Noolite, жмем добавить, заполняем поля «Название», по желанию «Описание», указываем желаемый канал, выбираем «Тип» — Датчик/пульт, по желанию указываем местоположение и затем нажимаем кнопку «Добавить». Далее жмем появившуюся кнопку «Start binding» (в этот момент на модуле MTRF начнет мигать светодиод) После этого нужно кратковременно (< 1 секунды) нажать на сервисную кнопку, расположенную с обратной стороны датчика PT111, для передачи команды привязки и затем нажать кнопку сохранить в панеле управления Noolite.
  • Далее необходимо создать 2 Простых Устройства (по одному на каждую функцию датчика), для этого идем в Панель управления > Устройства > Простые устройства. Создаём 2 новых ПУ с типами: Датчик температуры и Датчик влажности. Автоматически создадутся связанные объекты, к свойствам которых нужно будет привязывать параметры датчика Ноолайт.
  • Возвращаемся в панель управления Noolite, заходим в настройки недавно созданного датчика и переходим на страницу «Данные» 
  • Теперь для параметров температуры и влажности в поле «Связанный объект» выбираем нужный объект, в поле «Свойство» выбираем свойство  value и в поле «Метод» выбираем «Value updated».На этом настройка связки PT111 > MajorDoMo закончена.
  • Данное устройство так же можно использовать автономно совместно с силовыми блоками от Ноолайт для управления нагрузкой без каких-либо дополнительных систем. Таким образом можно получить функционал термостата или гигростата на выбор:

    Более подробно про систему Noolite читайте в предыдущей части и на сайте производителя.

    Все рассматриваемые датчики установлены у меня дома. Все инструкции из собственного опыта.

    Продолжение следует…

    В начале года начал делать так называемый умный дом, ниже описание того, что получилось и немного деталей.

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

    На столе радиовыключатель от кухни.

    В районе плиты стоит колонка Irbis A1 с Алисой, через которую можно управлять светом.

    Там же вытяжка, подключена через Sonoff S26, у неё есть свой радиовыключатель, т.к. до розетки тянуться далеко.

    Датчик температуры-влажности собран на ESP8266 + BME280 + фоторезистора на делителе, воткнутого в аналоговый вход. Вмонтирован в вытяжку, питается по USB длинным удлинителем от USB зарядки. Кстати, открыл для себя Mongoose OS, прошивку для ESP чипов, позволяющую писать на JS, мне так больше нравится, чем на Lua или C.

    В районе компа есть управляемая розетка с измерением мощности на Sonoff POW, в неё включается мини-комп или 3д-принтер.

    Здесь же лежит мост Sonoff Bridge, который умеет принимать сигналы от радио кнопок и датчиков, транслируя его в MQTT.

    Коридор

    Sonoff Basic в светильнике, тройной выключатель от всего света на стене, датчик движения.

    На входной двери датчик открытия.

    Комната

    Внутри светильника Sonoff Basic. Датчик движения. Пульт от дома обычно где-то здесь.

    Под компом расстелен тёплый пол (в осеннее-весеннее время он переезжает на балкон) на Sonoff POW.

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

    Пылесос живёт здесь:

    Прошивка

    Все устройства Sonoff я перепрошивал (датчики движения и открытия слишком тупы, чтобы в них была прошивка). Прошивка Tasmota решила мою задачу: отказаться от китайских официальных приложух, которые работают на облаке Amazon AWS и иногда лежат, вместо этого управлять всем по MQTT.

    Node-red

    Подключил всё это к одному центру, Node-Red, где можно во-первых накликать мышкой приложение для телефона с нужными мне кнопками, а во-вторых выстраивать разные условия и зависимости, используя таскание логических блоков мышкой в браузере и немного javascript.

    Вся система работает по локалке (MQTT и Node-red), поэтому перебои с инетом ей не страшны.

    Node-red — один из центров управления умным домом, придуман в IBM, написан на NodeJS. Отличается тем, что позволяет через блок-схемы и плагины делать большинство нужных задач. Если не хватает готовых блоков, можно наполнять пустой блок JS кодом. Если заморочиться, можно оформить свой блок в виде плагина (я так не делал).

    Он принимает все MQTT сигналы, можно делать с ними что хочешь: связать данные с датчика температуры и вытяжки:

    Также он даёт возможность собирать простой GUI, который можно запускать на смартфоне или на десктопе, это PWA:

    Не буду много про него рассказывать, в общем мне нравится, пока не заблудился в этих блоках, хотя выглядит уже устрашающе (это примерно 25% от всех блоков):

    Интеграция с Алисой

    В конце мая, Яндекс запустил управление умным домом через Алису. Через пару дней все мои установленные переключатели научились переключаться голосом. Штука довольно бесполезная для меня, т.к. план был в том, чтобы всё работало без действий человека. Делал через проект yandex-dialogs-smarthome-mqtt, по ссылке подробности настройки (кодить вам не надо, только конфиг написать).

    В начале ноября купил вторую колонку с Алисой, Станцию Мини, поставил в комнате. Теперь я могу из любой части квартиры переключать свет.

    Технически тут заморочено: пишется навык для Алисы, который должен понимать специальное API на команды включения-выключения и передавать их по MQTT в шину, откуда Node-red их прочитает и сделает как надо.

    Скажу так: надо много желания, чтобы повторить это у себя, желающие находились, но вряд ли это вы )

    Для тех, кто хочет недорогих розеток от Sonoff с интеграцией с Алисой: подождите, Яндекс с Sonoff уже начали обсуждать официальную интеграцию (о чём официально заявили в канале Telegram “Около Яндекс Станции”).

    Цены

    • Пылесос ILife A9s, не взаимодействует с другими, но сам по себе автоматизирует — 17000 рублей
    • Колонка Irbis A1, на кухню — 3000 рублей
    • Колонка Яндекс.Станция мини, в комнату — 4000 рублей
    • Sonoff POW (WiFi розетки с измерением мощности), тёплый пол, розетка для разных целей — 2 x 650 рублей = 1300 рублей
    • Sonoff Basic, свет в комнате и коридоре — 2 x 350 рублей = 700 рублей
    • Sonoff Slampher, свет на кухне — 780 рублей
    • Sonoff S26, ставится между вилкой и розеткой вытяжки — 700 рублей
    • Sonoff Bridge, комплект из моста, датчика движения, открытия двери — 1400 рублей
    • Выключатель 1-кнопочный, для вытяжки — 380 рублей
    • Выключатель 1-кнопочный, для кухни — 470 рублей
    • Выключатель 3-кнопочный, комната-корридор-кухня — 420 рублей
    • Радиопульт 4-кнопочный — 110 рублей
    • Датчики движения Sonoff PIR2 — 2 x 570 рублей = 1140 рублей
    • Тёплый пол 100×80см — 500 рублей
    • Датчики движения, не подключенные к системе (тупые, но автономные), для туалета и ванной — 2 x 130 рублей = 260 рублей
    • Датчик CO2, он ни на что не влияет, просто есть — 1000 рублей (не помню точно)
    • Соединительные клеммы типа Wago — 10 x 10 рублей = 100 рублей

    Итого 33300 рублей. Если вычесть пылесос и колонки, получаются уже скромные 9100 рублей.

    Кроме того, есть ещё косвенные траты, не входящие в итоговую версию:

    • Автономная лампочка с датчиком движения (с неё всё началось) — 250 рублей
    • 2 радиопульта потерялись при доставке — 180 рублей
    • Bluetooth-маячок (хотел на себя повесить, чтобы дом знал, где я, не доделал) — 650 рублей
    • Микрофон с умом, который прямо wav вещает по I2C (не знаю даже, что с ним сделать) — 230 рублей
    • Микрофон без ума (хотел заменить встроенный микрофон в Irbis, не дошли руки) — 120 рублей
    • Куча разных датчиков (жесты, температура, влажность, освещение, звук, расстояние) ~ 1500 рублей
    • Россыпь из ESP8266, версия WeMos D1 Mini — 5 x 200 рублей = 1000 рублей
    • Датчик пыли PMS7003 — 950 рублей

    Итого 4900 рублей. Того, что можно было не покупать.

    Это всё я купил примерно за 2 года.

    Выводы

    Не скажу, что это всё изменило мою жизнь, конечно, по большому счёту это баловство, очередной домашний проект (домашнее некуда) с большой тратой времени и небольшой пользой. Но я ни о чём не жалею, прикольно же )

    Фотоальбом — https://photos.app.goo.gl/q152jf1WTgyEYGN16

    Микросхема ESP8266 – один из самых популярных инструментов для организации беспроводной связи в проектах умного дома. С помощью беспроводного контроллера можно организовывать связь по интерфейсу WiFi, обеспечивая проектам Arduino выход в интернет и возможность дистанционного управления и сбора данных. На основе ESP8266 созданы такие популярные платы как WeMos и NodeMcu, а также огромное количество самодельных проектов. В этой статье, мы узнаем, что из себя представляет ESP82266, какие бывают ее разновидности, как работать с ESP8266 в среде Arduino IDE.

    Описание ESP8266

    ESP8266_3_of_3_1024x1024-300x300.jpgESP8266 – микроконтроллер с интерфейсом WiFi, который имеет возможность исполнять программы из флеш-памяти.  Устройство было выпущено в 2014 году китайской фирмой Espressif и практически сразу же стало популярным.

    Контроллер недорогой, обладает небольшим количеством внешних элементов и имеет следующие технические параметры:

    • Поддерживает Wi-Fi протоколы 802.11 b/g/n с WEP, WPA, WPA2;
    • Обладает 14 портами ввода и вывода, SPI, I2C, UART, 10-бит АЦП;
    • Поддерживает внешнюю память до 16 МБ;
    • Необходимое питание от 2,2 до 3,6 В, потребляемый ток до 300 мА в зависимости от выбранного режима.

    Важной особенностью является отсутствие пользовательской энергонезависимой памяти на кристалле. Программа выполняется от внешней SPI ПЗУ при помощи динамической загрузки необходимых элементов программы. Доступ к внутренней периферии можно получить не из документации, а из API набора библиотек. Производителем указывается приблизительное количество ОЗУ – 50 кБ.

    Особенности платы ESP8266:

    • Удобное подключение к компьютеру – через USB кабель, питание от него же;
    • Наличие встроенного преобразователя напряжения 3,3В;
    • Наличие 4 Мб флеш-памяти;
    • Встроенные кнопки для перезагрузки и перепрошивки;
    • Все порты выведены на плату на две гребенки с шагом 2,5 мм.

    Сферы применения модуля ESP8266

    • Автоматизация;
    • Различные системы для умного дома: Беспроводное управление, беспроводные розетки, управление температурой, дополнение к сигнализационным системам;
    • Мобильная электроника;
    • ID метки;
    • Детские игрушки;
    • Mesh-сети.

    Распиновка esp8266

    Существует огромное количество разновидностей модуля ESP8266. На рисунке представлены некоторые из них. Наиболее популярным вариантом является ESP 01.

    esp8288-1.png

    Исполнение программы требуется задавать состоянием портов GPIO0, GPIO2 и GPIO15, когда заканчивается подача питания. Можно выделить 2 важных режима – когда код исполняется из UART (GPIO0 = 0, GPIO2 = 1 и GPIO15 = 0) для перепрошивки флеш-карты и когда исполняется из внешней ПЗУ (GPIO0 = 1, GPIO2 = 1 и GPIO15 = 0) в штатном режиме.

    Распиновка для ESP01 изображена на картинке.

    Описание контактов:

    • 1 – земля, 8 – питание. По документации напряжение подается до 3,6 В – это важно учесть при работе с Ардуино, на которую обычно подают 5 В.
    • 6 – RST, нужна для перезагрузки микроконтроллера при подаче на него низкого логического уровня.
    • 4 – CP_PD, также используется для перевода устройства в энергосберегающий режим.
    • 7 и 0 – RXD0 и TXD0, это аппаратный UART, необходимый для перепрошивки модуля.
    • 2 – TXD0, к этому контакту подключается светодиод, который загорается при низком логическом уровне на GPIO1 и при передаче данных по UART.
    • 5 – GPIO0, порт ввода и вывода, также позволяет перевести устройство в режим программирования (при подключении порта к низкому логическому уровню и подачи напряжения) .
    • 3 – GPIO2, порт ввода и вывода.

    Распиновка ESP-12

    esp8266_esp12e_horizontal-01-300x232.png

    Основные отличия Ардуино от ESP8266

    • ESP8266 имеет больший объем флеш-памяти, при этом у ESP8266 отсутствует энергонезависимая память;
    • Процессор ESP8266 быстрее, чем у Ардуино;
    • Наличие Wi-Fi у ESP8266;
    • ESP8266 потребляеn больше тока, чем для Ардуино;

    Программирование ESP8266 в Arduino IDE

    Программный комплект разработчика esp8266 включает в себя:

    • Компилятор из пакета GNU Compiler Collection.
    • Библиотеки, стеки протоколов WiFi, TCP/IP.
    • Средство загрузки информации в программу контроллера.
    • Операционная IDE.

    Изначально модули ESP8266 поставляются с прошивкой от фирмы-изготовителя. С ее помощью можно управлять модулем с внешнего микроконтроллера, реализовывать работу с Wi-Fi как с модемом. Также существует множество других готовых прошивок. Некоторые из них позволяют настраивать работу модуля при помощи WEB-интерфейса.

    Можно программировать из среды Arduino IDE. При ее помощи можно легко писать скетчи и загружать их в ESP8266, прошивать ESP8266, при этом не требуется сама плата Ардуино. Arduino IDE поддерживает все виды модулей ESP8266.

    В настоящий момент для ESP8266 можно реализовать следующие функции:

    • Основные функции языка Wiring. Управлять портами GPIO можно точно так же, как и пинами на плате Ардуино: pinMode, digitalRead, digitalWrite, analogWrite. Команда analogRead(А0) позволяет считать значения АЦП. При помощи команды analogWrite (pin, value) можно подключить ШИМ на нужном выходе GPIO. При value=0 ШИМ отключается, максимальное значение достигает константы, равной 1023.С помощью функций attachInterrupt, detachInterrupt можно выполнять прерывание на любом порте GPIO, кроме 16.
    • Тайминг и delay. Используя команды millis и micros можно вернуть мс и мкс, которые прошли с момента старта. Delay позволяет приостановить исполнение программы на нужное время. Также функция delay(…) позволяет поддерживать нормальную работу Wi-Fi, если в скетче присутствуют большие элементы, которые выполняются более 50 мс. Yield() – аналог функции delay(0).
    • Serial и Serial1 (UART0 и UART1). Работа Serial на ESP8266 аналогична работе на ардуино. Запись и чтение данных блокируют исполнение кода, если FIFO на 128 байт и программный буфер на 256 байт заполнены. Объект Serial пользуется аппаратным UART0, для него можно задать пины GPIO15 (TX) и GPIO13 (RX) вместо GPIO1(TX) и GPIO3(RX). Для этого после функции Serial.begin(); нужно вызвать Serial.swap();. Аналогично Serial1 использует UART1, который работает на передачу. Необходимый пин для этого GPIO2.
    • Макрос PROGMEM. Его работа аналогична работе в Ардуино. Позволяет перемещать данные read only и строковые постоянные во flash-память. При этом в ESP8266 не сохраняются одинаковые константы, что приводит к дополнительной трате флеш-памяти.
    • I2C. Перед началом работы с шиной I2C выбираются шины с помощью функции Wire.pins(int sda, int scl).
    • SPI, OneWire – поддерживаются полностью.

    Использование esp8266 для связи Ардуино по WiFi

    Перед подключением к Ардуино важно помнить, что у ESP8266 напряжение питания не может быть выше 3,6, в то время как на пате Ардуино напряжение равно 5 В. Соединять 2 микроконтроллера нужно с помощью резистивных делителей. Перед подключением модуля нужно ознакомиться с распиновкой выбранного ESP8266.  Схема подключения для ESP8266-01 представлена на рисунке.

    esp8266-scheme1.png

    3,3 В с Ардуино – на Vcc&CH_PD на модуле ESP8266, Земля с Ардуино – к земле с ESP8266, 0 – TX, 1 – RX.

    Для поддержки стабильной работы ESP8266 необходим источник постоянного напряжения на 3,3 В и максимальный ток 250 мА. Если питание происходит от конвертера USB-TTL, могут происходить неполадки и сбои в работе.

    Работа с библиотекой Wi-Fi для ESP8266 схожа с библиотекой для обыкновенного шилда. Имеется несколько особенностей:

    • mode(m) – для выбора одного из трех режимов: клиент, точка доступа или оба режима единовременно.
    • softAP(ssid) – нужен для создания открытой точки доступа.
    • softAP(ssid, password) – создает точку доступа с паролем, который должен состоять не менее чем из 8 знаков.
    • WiFi.macAddress(mac) и WiFi.softAPmacAddress(mac)– определяет МАС адрес.
    • WiFi.localIP() и WiFi.softAPIP() – определение IP адреса.
    • printDiag(Serial); – позволят узнать данные о диагностике.
    • WiFiUDP – поддержка передачи и приема multicast пакета в режиме клиента.

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

    • Подключение USB-TTL к USB и к ESP.
    • Запуск Arduino IDE.
    • Выбрать в меню инструменты нужный порт, плату, частоту и размер flash-памяти.
    • Файл — Примеры — ESP8266WiFi — WiFiWebServer.
    • Записать в скетче SSID и пароль сети Wi-Fi.
    • Начать компиляцию и загрузку кода.
    • Дождаться окончания процесса прошивки, отсоединить GPIO0 от земли.
    • Поставить скорость 115200.
    • Произойдет подключение, будет записан адрес IP.
    • Открыть браузер, ввести в адресной строке номер IP/gpio/1
    • Посмотреть монитор порта, если к выходу GPIO2 подключен светодиод, он должен загореться.

    NodeMCU на базе esp8266

    nodemcu-v2-300x225.jpgNodeMCU – это платформа, основанная на базе модуля esp8266. Используется для управления схемой на расстоянии при помощи интернета через Wi-Fi. Плата малогабаритная, компактная, стоит дешево, на лицевой стороне имеется разъем для USB. Рядом кнопки для отладки и перезагрузки микроконтроллера. Также установлен чип ESP8266. Напряжение питания – от 5 до 12 В, желательно подавать более 10 В.

    Большим преимуществом платы является ее малое энергопотребление. Нередко их используют в схемах с автономным питанием. На плате расположены всего 11 портов общего назначения, из них некоторые имеют специальные функции:

    • D1 и D2 – для интерфейса I2C/ TWI;
    • D5-D8- для интерфейса SPI;
    • D9, D10 – для UART;
    • D1-D10 – могут работать как ШИМ.

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

    WeMos на базе esp8266

    wemos_1-300x300.jpgWeMos  – еще один вид платформы, основанный на базе микроконтроллера esp8266. Соответственно, имеется Wi-Fi модуль, поддерживается Arduino IDE, имеется разъем для внешней антенны. Плата имеет 11 цифровых входов/выходов, которые (кроме D0) поддерживают interrupt/pwm/I2C/one-wire. Максимальное напряжение питания достигает 3,3 В. Также на платформе присутствует USB разъем.  Аналоговый вход 1 с максимальным напряжением 3,2В.

    Для работы с модулем нужно установить драйвер CH340 и настроить Ардуино IDE под ESP8266. Для этого нужно в меню настройки в строке «дополнительная ссылка для менеджера плат» добавить адрес http://arduino.esp8266.com/stable/package_esp8266com_index.json.

    После этого требуется найти пакет esp8266 by ESP8266 и установить его.  Затем нужно выбрать в меню инструменты микроконтроллер Wemos D1 R2 и записать нужный скетч.

    Выводы по ESP8266

    С помощью плат на основе микросхемы ESP8266 вы можете добавить в свои проекты возможности “большого интернета”, сделав их гораздо более интеллектуальными. Дистанционное управление, сбор и анализ данных на сервере, обработка голоса и работа с изображением – все это становится доступным, когда мы подключаем наш проект по WiFi к интернету. В следующих статьях мы подробно рассмотрим то, как можно программировать устройства на базе esp8266, а также уделим внимание таким популярным платам как WeMos и NodeMcu.

    Используемые источники:

    • http://blogid.by/umnyj-dom/2018/07/umnyj-dom-svoimi-rukami-chast-3-infrastruktura-prodolzhenie/
    • https://blog.popstas.ru/blog/2019/12/02/smarthome-node-red-2019/
    • https://arduinomaster.ru/platy-arduino/arduino-esp8266/

    Рейтинг автора
    5
    Подборку подготовил
    Максим Уваров
    Наш эксперт
    Написано статей
    171
    Ссылка на основную публикацию
    Похожие публикации