WeMos D1 R2 обновление прошивки по WiFi (OTA)

Сегодня мы рассмотрим как сделать обновление прошивки по WIFI на Wemos D1 R2.

WeMos D1 R2 обновление прошивки по WiFi (OTA)

Как-то очень быстро стало не хватать возможностей стандартного Arduino Uno R3 для мелкой домашней автоматизации. Почему-то захотелось подключать собираемые устройства к сети не витой парой, а через Wi-Fi, забрезжила потребность в большем количестве свободных пинов, захотелось иметь возможность использовать PWM и прерываний больше, чем на двух пинах.

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

В поисках более интересной и удобной платы, я совершенно случайно наткнулся на нечто? совмещающее в себе почти все, а может быть, даже и все хотелки. Речь далее пойдет о платах для домашней автоматизации и интернета вещей производства WeMos на чипе ESP8266EX.

Немного о ESP8266EX и WeMos

Чип EPS8266 от китайской компании Espressif появился на рынке в 2014 году и сразу же привлек внимание общественности. С одной стороны, EPS8266 — чип максимально интегрировавший обвязку и позволяющий создавать очень простые платы с минимум элементов, да еще и со встроенным современным Wi-Fi. А с другой стороны, стоимость чипа неимоверно низкая (к 2016 году цена опустилась вдвое).

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

Espresiff создала свой чип с прицелом на «Интернет вещей», поэтому он обладает весьма скромными размерами, вместительной памятью, способностью к разгону и нескольким режимам энергосбережения. К слову, в ESP8266 реализован даже суперэкономичный режим, в котором устройство потребляет самый мизерный мизер энергии, но при этом не отключается от сети Wi-Fi. У разработчиков открывается невероятная возможность по реализации первоклассных проектов с питанием от батарей.

Несмотря на то что EPS8266 можно использовать как самостоятельное изделие, многие производители наладили выпуск плат совместимых с линейкой Arduino. Что еще больше повысило популярность чипа, но уже среди энтузиастов сделать что-то своими руками да в единичном экземпляре. Возможность использования EPS8266 в Arduino-совместимых проектах стало возможным благодаря характеристикам чипа. Большой объем памяти, и внятная архитектура позволили не только сделать его совместимым с Arduino и NodeMCU , но и с множеством других программно-аппаратных экосистем. Компании и индивидуальные разработчики к настоящему моменту уже навыпускали великое множество прошивок, предназначенных для различных целей. Существуют даже варианты реализации, позволяющие программировать устройство через браузер . Согласитесь, что функционал богатый и устройство нашло широкий отклик среди масс.

Что же до компании WeMos . Получить внятную информацию о самой компании мне так и не удалось. Известно только, что она китайская, продает свою продукцию, в том числе, и через фирменный магазин на AliExpress, зарегистрирована на GitHub в 2014 году, аккурат в момент выпуска описываемого чипа. По слухам, какая-то команда разработчиков, учувствовавшая в другом проекте, организовала WeMos и наладила выпуск плат. Но какого-либо подтверждения я так найти и не смог. В общем — полная анонимность J, даже номера телефона на сайте нет.

Кстати, многие называют чип EPS8266 именно так, но в спецификации он обзывается как EPS8266EX. Два это разные чипа или просто называются безалаберно непонятно. Ни поиск по форумам, ни чтение спецификаций производителя, не помогли мне разобраться в этом вопросе. Посему будем считать, что оба названия обозначают одно и то же.

В моем распоряжении оказалась плата WeMos D1 R2. Приведу ее некоторые характеристики:

  • 80 MHz 32-bit процессор Tensilica Xtensa L106 . Возможен негарантированный разгон до 160 МГц.
  • IEEE 802.11 b/g/n Wi-Fi. Поддерживается WEPи WPA/WPA
  • 16 портов ввода/вывода, SPI, I2 C, I2 S, UART, 10-bit АЦП.
  • Питание 3,0–3,6 В. Среднее потребление 80 мА. Потребление до 170 мА в режиме передачи, 60 мА в режиме приема, пиковое потребление возможно до 500 мА. Присутствует режим пониженного потребления с сохранением соединения с точкой доступа ~1 мА.
  • Установлена Flash память объемом 4 Мб.

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

Устанавливаем ПО для работы с WeMos на ПК под управлением Win10

Напомню, что чип EPS8266 способен работать одинаково хорошо с различными типами прошивок, в том числе и с Arduino. И именно под Arduino с его Arduino IDE я и попробую провернуть фокус, при котором плата WeMos D1 R2 будет подключаться к моей Wi-Fi сети, а я смогу обновлять прошивку без подключения платы к компьютеру шнурком и прямо из Arduino IDE. Все это под Windows 10 x64.

  1. Для начала необходимо установить более-менее современную версию Arduino IDE. Нужна версия не ниже 1.6.4.
  2. Устанавливаем Git (клиентское приложение для работы с онлайн-репозиторием контроля версий исходного кода) https://git-scm.com/download/win .
  3. Устанавливаем Python (среда для скриптового языка Python). Нужна версия из бранча 2.7 https://www.python.org/downloads/ . С более свежей, 3-й веткой, работать, скорее всего, не будет.

При установке Python, стоит установить галочку, чтобы исполняемые файлы прописались в путь поиска. Иначе сию операцию придется делать вручную. А мало кто помнит, как это делается.

4. Скачиваем и устанавливаем драйвер по статье на нашем сайте.

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

5. Устанавливаем утилиты для компиляции исходных кодов для EPS8266 и описания платы для Arduino IDE. Важно установить все это в нужную директорию. Установка осуществляется путем вызоваgit clone https://github.com/esp8266/Arduino.git esp8266 в созданной директории esp8266com. Если git у вас не запускается их командной строки, то стоит проверить переменную path и попробовать перезайти в терминал.

Правильный путь установки в директорию туда, куда установлена Arduino IDE. Например, C:\Program Files (x86)\Arduino\hardware\esp8266com\

Переходим в созданную поддиректорию tools. И в этой директории запускаем python get.py и все необходимые компоненты автоматически скачиваются в директорию esp8266.

6. Скачиваем примеры с сервера GitHub командой git clonehttps://github.com/wemos/D1_mini_Examples.git

Директорию для закачки примеров необходимо выбирать ту, где сами примеры и располагаются на вашем ПК. В моем случае, это оказалась директория в папке OneDrive.

7. После установки примеров перезаходим в Arduino IDE или просто его запускаем, открываем любой из примеров для WeMos, например, Hello World, выбираем требуемые параметры настройки платы через меню Tools Arduino IDE. Здесь выбираем плату WeMos D1 и запускаем его на исполнение.

Прошу обратить внимание на то, что WeMos D1 R2 хоть и Arduino совместимая плата, но ожидать, что на ней будут нормально работать любые скетчи от Arduino не стоит. Как минимум впаянный светодиод тут привязан к совсем другому пину, нежели на платах Arduino, например, на Arduino UNO R3.

Еще одна особенность при работе с D1 и другими платами от WeMos, а скорее всего от всех реализованных на ESP8266 — вывод в терминал может осуществляться с мусором либо постоянно, либо при начале отображения. Иногда все начинает работать само по себе, иногда требуется поиграть со скоростями последовательного порта (в окне терминала и в скетче), дабы подобрать скорость, которая будет работать именно у вас.

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

Обновления Over The Air (OTA) для WeMos D1 R2

А теперь подбираемся к самому интересному. К тому, как обновлять прошивку у устройства по воздуху используя соединение Wi-Fi. Итак, у нас есть рабочая Arduino IDE с возможностью использования плат WeMos и чипов ESP8266.

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

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

Для того чтобы настроить загрузку прошивок OTA, необходимо открыть скетч BasicOTA из примеров для Arduino от WeMos.

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

Ну и собственно все. В дальнейшем можно встроить функциональность OTA в ваш код или же нарастить свой код используя BasicOTA как материнский контейнер. Обновление по воздуху будет работать в том случае, если будет вызываться соответствующий метод ArduinoOTA в цикле loop. Если ваша прошивка слишком сложная, содержит длительные циклы или занята какими-то сложными расчетами, то есть риск того, что обновление не будет подхватываться с первого раза. Поэтому стоит соблюдать баланс интересов в вашей прошивке.

Некоторые особенности

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

Первое, что нужно уяснить, так это то, что WeMos работает с напряжением 3.3 Вольта, а большинство полноформатных плат Arduino с напряжением 5 вольт. И даже если на плате есть выход 5 вольт, то использовать это напряжение стоит с осторожностью.

Цифровые входы платы выдают напряжение в диапазоне от 1.8 и до 3.3 Вольта с пиковым током до 200 мА. Единственный аналоговый вход способен работать с напряжением в диапазоне от 3.0 и до 3.6 вольт. Возможно, что в ваших проектах потребуется согласование напряжений.

Отличается плата WeMos D1 R2 от аналога Arduino и по языку программирования, вернее, набором функций и прочими тонкостями. Например, описание пинов задаются не просто номерами, а с четким указанием цифровой это пин или нет. Так пин с номером 1 обозначается как D1.

На текущий момент (конец лета 2016) функция Serial Monitor для OTA пока не реализована в IDE. По этой причине рекомендуется использовать внешний терминал и подключить его к соответствующему сетевому порту.

Оригинал статьи - http://blog.kvv213.com/2016/09/wemos-d1-r2-ustanovka-v-sisteme-i-obnovlenie-proshivki-po-vozduhu-ota/