Wemos d1 r2 обновление прошивки по wifi (ota) arduino+

GT-Volk › Блог › ARDULOGIC: Wemos D1 ESP8266 настройка и первое включение

Сегодня я хочу познакомить вас с основной платой нашего будущего устройства: Wemos D1 R2 – это популярный модуль ESP8266 ESP-12 разведенный в формфакторе Arduino UNO.
Технические характеристики WeMos D1 R2:
• 11 цифровых входов/выходов. Все выводы поддерживают interrupt/pwm/I2C/one-wire (за исключением D0)
• 1 аналоговый вход (максимальное входное напряжение 3,2 В)
• Разъём Micro USB
• Разъем питания 9-24 В
• Микроконтроллер ESP-8266EX
• Частота микроконтроллера 80MHz/160MHz
• Flash память 4 Мб
• Поддержка Arduino
• Поддержка NodeMcu
• Программирование через Serial или OTA (беспроводная загрузка программного кода по Wi-Fi)
• Наличие WI-FI модуля

Настройка Arduino IDE под ESP8266
Для того что бы Arduino IDE могла «прошивать» Wemos D1 необходимо зайти в «Файл — Настройки» и в строку «Дополнительные ссылки для Менеджера плат» ввести следующий URL: arduino.esp8266.com/stabl…age_esp8266com_index.json и нажать кнопку «ОК».

Моргаем диодом
Давайте загрузим примеры из официального репозитория и попробуем что ни будь запустить. Скачайте архив github.com/wemos/D1_mini_…amples/archive/master.zip, распакуйте его, и откройте файл Blink.ino из каталога examples1.BasicsBlink. Всё что делает этот скетч – это моргает встроенным диодом с интервалом раз в секунду. Подключите вашу плату Wemod D1 к usb, если вы делаете это впервые, windows установит драйвер и добавит в систему новый com порт. Убедитесь, что в Arduino IDE указан com порт вашей платы и нажмите кнопку «Загрузить» после чего произойдёт компиляции и загрузка скетча в модуль.

Управляем диодом по Wifi
Немного усложним код нашего примера. У нас всё-таки модуль с WiFi, так давайте его задействуем и будем управлять светодиодом с телефона!
Штатный диод довольно блёклый поэтому подключим более яркий красный. Соедините длинную ножку светодиода (анод) с контактом D4 а короткую (катод) с контактом GND вашей платы. Обратите внимание что штатный светодиод подключен к этому же пину D4, поэтому на нём уже присутствует сопротивление и можно подключить диод напрямую без резистора.
Открываем Arduino IDE, копируем в него следующий код и запускаем.
//————-
#include
#include

int val = 0; // По умолчанию диод не горит
const char *ss ; // Название сети WiFi
const char *password = “1234567890”; // Пароль для подключения
ESP8266WebServer server(80); // Создаем веб сервер на 80 порту

// Метод формирует стартовую страницу 192.168.4.1
// Выводит в браузер текущее состояние диода и две кнопки
void handleRoot() <
String s = (val) ? “

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

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

Зачем обновлять

Как-то очень быстро стало не хватать возможностей стандартного 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. Приведу ее некоторые характеристики:

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

Установка программного обеспечения

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

Напомню, что чип 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 и берем ее с сайта python.org. С более свежей, 3-й веткой, работать, скорее всего, не будет.

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

Шаг 4

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

Шаг 5

Устанавливаем утилиты для компиляции исходных кодов для EPS8266 и описания платы для Arduino IDE. Важно установить все это в нужную директорию. Установка осуществляется путем вызова в созданной директории esp8266com команды:

Правильный путь установки в директорию туда, куда установлена Arduino IDE. Например:

Переходим в созданную поддиректорию tools. И в этой директории запускаем:

Все необходимые компоненты автоматически скачиваются в директорию esp8266.

Шаг 6

Скачиваем примеры с сервера GitHub командой

Директорию для закачки примеров необходимо выбирать ту, где сами примеры и располагаются на вашем ПК. В моем случае, это оказалась директория в папке 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, при помощи функции, слушает на определенном порту сигналы от удаленного загрузчика. Как только поступает требуемый сигнал, то в память устройства закачивается свежая прошивка, которая и загружается после рестарта.

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

Код программы

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

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

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

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

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

  1. Первое, что нужно уяснить, так это то, что WeMos работает с напряжением 3.3 Вольта, а большинство полноформатных плат Arduino с напряжением 5 вольт. И даже если на плате есть выход 5 вольт, то использовать это напряжение стоит с осторожностью.
  2. Цифровые входы платы выдают напряжение в диапазоне от 1.8 и до 3.3 Вольта с пиковым током до 200 мА. Единственный аналоговый вход способен работать с напряжением в диапазоне от 3.0 и до 3.6 вольт. Возможно, что в ваших проектах потребуется согласование напряжений.
  3. Отличается плата WeMos D1 R2 от аналога Arduino и по языку программирования, вернее, набором функций и прочими тонкостями. Например, описание пинов задаются не просто номерами, а с четким указанием цифровой это пин или нет. Так пин с номером 1 обозначается как D1.

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

Ответы на вопросы

Не получается установка платы-при вводе URL адреса, кликаю и никакой реакции плата не установлена.

  • Чтобы “URL” появился в разделе плат, нужно предварительно прошить в модуль прошивку с OTA и не забыть в цикле крутить обработчик прошивки по воздуху. Разумеется, плата должна быть подключена к той же самой сети, что и компьютер. Т.е. сначала нужно установить библиотеки для ESP в систему, потом сконфигурировать и прописать скетч в саму плату, после этого она появляется как “порт” для прошивки.

После загрузки по воздуху в IDE выдаётся сообщение “[ERROR]: No Result!”, но при этом скетч загружается нормально и работает. Почему так происходит?

  • Такое бывает. Можно попробовать обновить: IDE, утилиты для загрузки по воздуху, библиотеку Arduino для ESP. IDE не получает ответ от загрузчика о том, что загрузка произошла.

Зачем ставить Питон?

  • На питоне работает, как минимум компонент обновления и, скорее всего, компонент загрузки OTA.

WeMos D1R2

Что получится, если на arduino uno вместо микроконтроллера atmega установить esp8266? Представляю вашему вниманию… WeMos D1R2!

Форма печатной платы WeMos D1R2, расположение выводов,usb-порта и разъема питания, выводов UART ,SPI, I2C и аналогового входа абсолютно идентичны расположению выводов платы arduino UNO. Но на этом совпадения заканчиваются, поскольку в основе WeMos лежит микроконтроллер ESP8266EX, а в роли преобразователя USB-UART микросхема CH340G.

Работа с платами на основе микроконтроллера ESP8266 на примере платы NodeMCU была рассмотрена в статье, почти всё о чем написано в той статье применимо и к WeMos, кроме распиновки платы. Но обо всем по порядку.

Официальный сайт производителя плат WeMos располагается по адресу https://www.wemos.cc, страница продукта под маркировкой D1R2 по адресу https://www.wemos.cc/product/d1.html. Обратите внимание на внешний вид оригинальной платы D1R2 (фото взято на официальном сайте). Данная плата покупалась на AliExpress за 3.5$

На плате установлен модуль ESP-12E (на модуле видно дополнительные 6 выводов, которых нет на ESP-12). Также на плате имеются дополнительные отверстия дублирующие все выводы.

А теперь взгляните на “клон” WeMos, который достался мне в рамках проекта “ЖелеЗона”. Микроконтроллер установлен непосредственно на плату (минус – если вдруг микроконтроллер сгорит, то заменить его будет сложнее, чем модуль), а не в виде модуля; имеется гнездо для внешней антенны (несомненный плюс) и так же имеются дополнительные выводы, но они не дублируют все выводы (только D0-D8, А0, RX/TX и питание). Из минусов я заметил странность с питанием платы: при подключении платы к ПК через USB-кабель плата не заработала и я не смог её прошить. Оказалось что питание платы осуществляется только через гнездо питания, и даже прошить без питания через это гнездо не получится.

Таким образом, у WeMos D1R2 перед NodeMCU есть ряд преимуществ:

совместимость с “шилдами”

разъем для антенны

удобное расположение и дублирование всех выводов

А недостаток пожалуй один – размер WeMos D1R2 раза в 3 больше NodeMCU (но недостаток ли это?).

При этом стоимость обоих плат одинаковая, и на данный момент составляет около 250 рублей (у китайских продавцов).

Рассмотрим распиновку WeMos D1R2 (данные взяты с официального сайта).

Прошивка arduino по воздуху: WIFI ESP8266

Бывает собрал что-то на Arduino, упаковал в корпус, и тут в прошивке решил что-то чуток подправить, придется лезть, доставать, разбирать, подключать. А если поделка встроена куда-то в новый ремонт, то вообще атас.

О том, как прошивать arduino по воздуху, статей написано не мало, большинство решений – прошивка по bluetooth.

Я предлагаю дешевый и простой способ – использовать для этих целей WIFI модуль ESP-01.

На гифке устройство на arduino (замок, с доступом по RFID), которое как раз будет вмонтировано глубоко и на долго и я позаботился о том, чтобы доступ к ардуинке был удаленно (вдруг надо будет добавить RFID метку).

Для начала нужно прошить модуль прошивкой esp-link, сделаем это простым USB-TTL конвертера.

Прошивка представляет из себя несколько файлов, из них понадобятся 3: boot_v1.5.bin, user1.bin и blank.bin.

бинарники заливаем по следующим адресам:

Устанавливаем на ПК драйвер виртуального COM – порта, например этот: http://tibbo.ru/products/item/9/42/

И далее следуя инструкциям в видео настраиваем:

И наконец подключение ESP-01 к arduino:

Дубликаты не найдены

Ардуина тут как маленький ослик, а его за поводок тянет огромный орел esp8266, который может развивать огромные скорости, но нет, у нее ослик на поводке.

Этот орел стоит как тот-же NRF, с ним меньше возни, и по локалке добраться до люстры – это удобнее, чем цеплять радио на стороне компа

Я к тому что сама ардуина тут не сильно нужна.

Сама ардуина может использовать этот самый NRF после его прошивки в своих целях, например в скетче у нее есть свои команды для NRF или она только для прошивки?

ЭЭЭ а ардуина там зачем? Всё можно было сразу на esp замутить.

Абсолютно с вами солидарен. ESP8266 по многим параметрам превосходит Атмегу328. Использовать сей модуль только в качестве WiFi модуля (даже для прошивки ардуино по воздуху) – моветон. Для такой задачи есть NRF24L01.

Все свободные выводы с шим. Любые 2-3 микрухи типа pcf8574 и количество портов больше чем у ардуино. Количество памяти и встроенные плюшки намного перевешивают необходимость подключить через i2c пару микрух.

NRF скажем не сильно дешевле, а возни больше, + нужен ответный на стороне компа

Для таких целей есть гальванические развязки. Распилил сердечник – и давай.

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

Для ESP8266 легко подключается поддержка в Arduino IDE. С минимальными изменениями большинство кода для дуины пойдет и на ESP.

обычно для этих целей используют BT/ZigBee или другие низкоскоростные физические интерфейсы. Использовать WiFi для создания моста с таким низкоскоростным интерфейсом, как U(S)ART – это действительно (как уже было сказано @KeyAnyPress ) моветон. Я надеюсь, что пост носил исключительно ознакомительный характер, о том, как удаленно шить дуину по радиомосту.

На самом деле любой чип обеспечивающий WiFi с криптографией будет мощнее восьмибитной ардуинины. Как насчёт BT я не в курсе, но скорее всего там тоже так же.

хороший годный пост

как раз есть несколько ардуино проектов и запарился их прошивать через воздух))

спасибо, делайте еще )

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

Всегда ору с технологий “по воздуху”! От галимых планшетов, обновляющихся “по воздуху”, до серьезных маков, с передачей файлов “по воздуху”. Это писец . в вакууме такие технологии наверное не работают )))

доброго всем времени суток, проснулся я как то и решил попробую запрограммировать ардуино, закал вот такого зверька из китая https://ru.aliexpress.com/i/32910107043.html

подумал, что намного комфортнее когда на борту все и сразу. Пытался по вашей инструкции настроить прошивку по воздуху вроде все получилось, почти все. Данные в монитор порта транслируются из ардуино (подключил DHT11), но шиться не хочет выдает вот такой лог:

avrdude: stk500v2_ReceiveMessage(): timeout

avrdude: stk500v2_ReceiveMessage(): timeout

avrdude: stk500v2_ReceiveMessage(): timeout

avrdude: stk500v2_ReceiveMessage(): timeout

avrdude: stk500v2_ReceiveMessage(): timeout

avrdude: stk500v2_ReceiveMessage(): timeout

avrdude: stk500v2_getsync(): timeout communicating with programmer

Произошла ошибка при загрузке скетча

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

Источники:

http://arduinoplus.ru/wemos-d1-r2-obnovlenie-proshivki-po-wifi-ota/

http://cxem.net/arduino/arduino222.php

http://pikabu.ru/story/proshivka_arduino_po_vozdukhu_wifi_esp8266_4692514

http://coptersworld.ru/kvadrokopter-wltoys-q333/

Ссылка на основную публикацию