Как прошить wemos через wifi

Обновлено: 27.07.2024

«Обновление по воздуху» OTA (Over the Air) представляет собой процесс загрузки нового встроенного программного обеспечения в модуль с микроконтроллером ESP8266 посредством интерфейса Wi-Fi, вместо последовательного проводного соединения.

Эта функция чрезвычайно полезна когда нет физического доступа к модулю ESP.

Загрузка новых примеров по беспроводной связи из среды разработки Arduino IDE необходима для следующих случаев:

  • в ходе разработки встроенного ПО — как более быстрая альтернатива загрузке нового кода по проводному последовательному интерфейсу;
  • для обновления встроенного ПО для нескольких модулей ESP, находящихся в вашей сети.

Шаг 1. Загрузка кода BasicOTA.ino через последовательное проводное соединение

Чтобы загрузить ПО в микроконтроллер ESP8266 через беспроводное соединение, необходимо сначала загрузить готовый пример из файла BasicOTA.ino.

Должна быть установлена последняя версия среды разработки Arduino IDE, которую необходимо скачать по ссылке. Выполните следующее:

1) Подключите модуль с микроконтроллером ESP8266 к компьютеру с помощью кабеля USB.


2) В меню «Инструменты» («Tools») выберите свою плату на микроконтроллере ESP. Также необходимо выбрать последовательный порт к которому подключена плата.


3) Откройте файл с примером BasicOTA.ino: «File > Examples > Arduino OTA > BasicOTA.ino» («Файл > Примеры > Arduino OTA > BasicOTA.ino»). Или скопируйте следующий код примера в среду Arduino IDE.

Arduino IDE example: Examples > Arduino OTA > BasicOTA.ino ArduinoOTA . onProgress ( [ ] ( unsigned int progress , unsigned int total ) < Serial . printf ( "Progress: %u%%\r" , ( progress / ( total / 100 ) ) ) ; if ( error == OTA_AUTH_ERROR ) Serial . println ( "Auth Failed" ) ; else if ( error == OTA_BEGIN_ERROR ) Serial . println ( "Begin Failed" ) ; else if ( error == OTA_CONNECT_ERROR ) Serial . println ( "Connect Failed" ) ; else if ( error == OTA_RECEIVE_ERROR ) Serial . println ( "Receive Failed" ) ; else if ( error == OTA_END_ERROR ) Serial . println ( "End Failed" ) ;

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


5) Откройте окно последовательного COM-порта (Serial Monitor) среды Arduino IDE и настройте скорость передачи на 115 200 бод.

Если вы ввели верные учётные данные вашей сети, то через несколько секунд должны увидеть IP-адрес микроконтроллера ESP.


Шаг 2. Загрузка нового скетча «по воздуху»

Теперь микроконтроллер ESP8266 готов принять обновление ПО «по воздуху». Можно отключить ESP8266 от компьютера и подать питание на него от любого источника (например, от мобильного аккумулятора).

Если ESP8266 подключён через беспроводной интерфейс к маршрутизатору, то у вас должно получиться обновить встроенное ПО.


1) Запустите среду Arduino IDE. В меню «Инструменты» («Tools») выберите пункт «Port» (Порт).

Вы должны увидеть что-то похожее на «esp8266-xxxxxx at your_esp_ip_address» (esp8266-xxxxxx по вашему_ip-адресу_esp).


2) Скопируйте следующий скетч в среду Arduino IDE и загрузите его в микроконтроллер ESP8266. В этом примере раз в секунду мигает встроенный светодиод платы ESP12-E NodeMCU.

Arduino IDE example: Examples > Arduino OTA > BasicOTA.ino ArduinoOTA . onProgress ( [ ] ( unsigned int progress , unsigned int total ) < Serial . printf ( "Progress: %u%%\r" , ( progress / ( total / 100 ) ) ) ; if ( error == OTA_AUTH_ERROR ) Serial . println ( "Auth Failed" ) ; else if ( error == OTA_BEGIN_ERROR ) Serial . println ( "Begin Failed" ) ; else if ( error == OTA_CONNECT_ERROR ) Serial . println ( "Connect Failed" ) ; else if ( error == OTA_RECEIVE_ERROR ) Serial . println ( "Receive Failed" ) ; else if ( error == OTA_END_ERROR ) Serial . println ( "End Failed" ) ;

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

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

Заключение

Теперь вы можете обновлять ПО устройства на микроконтроллере ESP8266 без физического доступа к нему.

Самые популярные материалы в блоге

За все время

За сегодня

Вольтик - это слаженная команда амбициозных и заядлых инженеров. Мы создали этот проект с целью вовлечения вас, талантливых и начинающих профессионалов, в увлекательный мир мейкерской микроэлектроники!

Запись значений температуры на карту microSD с помощью ESP32


8 комментариев . Оставить новый

Обязательно наличие интернета для прошивки ?

Не нужен интернет. Локальная сеть

В терминале:
Update: sketch.ino.nodemcu.bin
sleep disable
Update Success: 374944
Rebooting…

ets Jan 8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 3656, room 16
tail 8
chksum 0x0c
csum 0x0c
v9c56ed1f
@cp:0
ld
e:
ets Jan 8 2013,rst cause:3, boot mode:(3,6)

Может кто-то сталкивался?

Дело было в версии управляющей платформы в менеджере плат, переход на версию 2.5.1 решил проблему.

Забавно, но всегда найдётся вонючка, которому все не так. Нахаляву написали инструкцию, а вы ещё не довольны, что не с перламутровыми пуговицами. Надо иногда подключать мозг и кодить, не все в этом мире дается бесплатно. А за материал спасибо, наконец разобрался, как шить esp8266 по OTA

Ну правильно написал. А то не урок а фигня получилась, которую не знаешь как применить.

Добавить комментарий Отменить ответ

Поиск по блогу

3D печать на заказ: корпус из ABS пластика

3D печать пластиковых корпусов для ваших прототипов

Качественная недорогая 3D печать корпусов и другой мелкосерийной продукции. 6 видов пластика на выбор. Гарантия качества и соблюдения сроков. Наличный и безналичный расчет.

WeMos D1 R2

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

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

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

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

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

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

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

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

80 MHz 32-bit процессор Tensilica Xtensa L106 . Возможен негарантированный разгон до 160 МГц. 16 портов ввода/вывода, SPI, I 2 C, I 2 S, UART, 10-bit АЦП. Питание 3,0–3,6 В. Среднее потребление 80 мА. Потребление до 170 мА в режиме передачи, 60 мА в режиме приема, пиковое потребление возможно до 500 мА. Присутствует режим пониженного потребления с сохранением соединения с точкой доступа

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

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

Для начала необходимо установить более-менее современную версию Arduino IDE. Нужна версия не ниже 1.6.4.

Установка Python

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

Установка драйвера для плат WeMos

Установка драйвера для плат WeMos

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

Загруженные библиотеки, утилиты и описание для платы WeMos в директорию установки Arduino IDE

Загруженные библиотеки, утилиты и описание для платы WeMos в директорию установки Arduino IDE

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

Загрузка необходимых компонентов при помощи скрипта Python

Загрузка необходимых компонентов при помощи скрипта Python

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

Загрузка примеров с GitHub

Загрузка примеров с GitHub

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

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

Проверка работоспособности платы простейшим скетчем

Проверка работоспособности платы простейшим скетчем Fade

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

Вывод в SerialPort с WeMos D1 R2

Вывод в SerialPort с WeMos D1 R2

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

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

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

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

Готовность платы WeMos D1 R2 к загрузке новой прошивки через Wi-Fi

Готовность платы WeMos D1 R2 к загрузке новой прошивки через Wi-Fi (выбираем сетевой порт)

Для того чтобы настроить загрузку прошивок 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.

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

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


Здравствуйте, в этой статье мы разберем OTA прошивку esp8266 (ну или говорят простым языком, прошивку по воздуху). В этой статье я уже разбирал прошивку по воздуху, но тогда нам нужно было еще установить программу python на компьютер и прошивалось это все по ip адресу. В этом же примере я думаю все будет гораздо проще, мы будем заливать новую прошивку в esp8266 через веб интерфейс. Так же у некоторых людей не получалось повторить первый способ, но с этим способом прошивки я думаю справится большинство.

Я думаю если вы попали на данную статью, то уже знакомы с esp8266 и определились с ее реализацией.

Программу которую я покажу сейчас, придумал не я, ее нашел на просторах интернета мой подписчик Дамир Салахов. Он перепробовал много способов прошивки ESP по воздуху, но пришел к выводу, что данный способ самый лучший.

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

Для начала давайте посмотрим на саму программу:

Здесь нас интересуют вот эти параметры:


Я конечно их описал в комментариях к коду и думаю еще раз не стоит это все описывать.
После заливки скетча в контроллер переходим по ip адресу и видим следующее окно:

Это окно выскакивает, если мы ввели не существующую страницу. Как было описано в комментариях к коду, чтоб открыть страницу для прошивки, нужно ввести следующее:

После ввода правильного пути у нас выскочит окно ввода логина и пароля:


Как указали в скетче, логин: admin пароль: admin

После ввода верных логина и пароля, нас перенесет в следующее окно, уже непосредственно в котором будем выбирать файл для прошивки:



После того как мы сохранили .bin файл его теперь можем выбрать в web интерфейсе и загрузить в наш контроллер esp8266.

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

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


Сегодня я хочу познакомить вас с основной платой нашего будущего устройства: 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 модуля




В менеджере плат находим пакет «esp8266 by ESP8266 Community», устанавливаем его и закрываем окно.



Теперь мы можем выбрать наш контроллер Wemos D1 R2 & mini в меню «Инструменты».



Если всё сделано правильно, то вы увидите, как светодиод на плате начал моргать.


Поздравляю! Ваша плата работает и вы можете ею управлять! ))

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

Читайте также: