Esp8266 программирование через wifi

Программирование ESP8266 в Arduino IDE «по воздуху» (OTA, Over The Air)

Фантастической особенностью любого микроконтроллера с поддержкой Wi-Fi, такого как ESP8266 NodeMCU, является возможность обновления его прошивки по беспроводной сети. Это называется программированием «по воздуху» (OTA, Over-The-Air).

Программирование ESP8266 в Arduino IDE «по воздуху» (OTA, Over The Air)

Что такое OTA программирование ESP8266?

OTA программирование позволяет обновлять/загружать новую программу в ESP8266 с помощью Wi-Fi вместо того, чтобы требовать от пользователя подключить ESP8266 к компьютеру через USB.

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

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

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

3 простых шага по использованию OTA с ESP8266

  1. Установка Python версии 2.7.x. Первый шаг – установите на компьютер Python версии 2.7.x.
  2. Загрузка базовой OTA прошивки через последовательный интерфейс. Загрузите скетч, содержащий прошивку OTA. Этот шаг обязателен шаг, чтобы вы могли выполнять следующие обновления/загрузки через беспроводную сеть.
  3. Загрузка нового скетча по воздуху. Теперь вы можете загружать новые скетчи в ESP8266 из Arduino IDE по воздуху.

Шаг 1. Установка Python версии 2.7.x

Чтобы использовать функциональность OTA, вам необходимо установить Python версии 2.7.x, если он еще не установлен на вашем компьютере.

Перейдите на официальный сайт Python и загрузите 2.7.x (конкретный релиз) для Windows (установщик MSI).

Рисунок 1 Скачать Python 2.7.x

Откройте установщик и следуйте указаниям мастера установки.

Рисунок 2 Установка Python 2.7.x на ПК

В разделе настройки Python 2.7.x убедитесь, что включен последний параметр «Add python.exe to Path» (добавить python.exe в путь).

Рисунок 3 Включите добавление python.exe в путь при установке Python

Шаг 2. Процедура загрузки скетча OTA через последовательный интерфейс

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

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

Дополнение ESP8266 для Arduino IDE поставляется с библиотекой OTA и примером BasicOTA. Вы можете получить к нему доступ через Файл → Примеры → ArduinoOTA → BasicOTA.

Рисунок 4 Откройте скетч BasicOTA в Arduino IDE

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

const char* ssid = ". "; const char* password = ". ";

После этих изменений загрузите скетч.

#include #include #include #include const char* ssid = ". "; const char* password = ". "; void setup() < Serial.begin(115200); Serial.println("Booting"); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.waitForConnectResult() != WL_CONNECTED) < Serial.println("Connection Failed! Rebooting. "); delay(5000); ESP.restart(); >// Порт по умолчанию - 8266 // ArduinoOTA.setPort(8266); // Имя хоста по умолчанию - esp8266-[ChipID] // ArduinoOTA.setHostname("myesp8266"); // Аутентификация по умолчанию // ArduinoOTA.setPassword("admin"); // Пароль может быть зашифрован MD5 // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3 // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3"); ArduinoOTA.onStart([]() < String type; if (ArduinoOTA.getCommand() == U_FLASH) type = "sketch"; else // U_SPIFFS type = "filesystem"; // Примечание: NOTE: при обновлении SPIFFS это место для размонтирования SPIFFS с помощью SPIFFS.end() Serial.println("Start updating " + type); >); ArduinoOTA.onEnd([]() < Serial.println("\nEnd"); >); ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) < Serial.printf("Progress: %u%%\r", (progress / (total / 100))); >); ArduinoOTA.onError([](ota_error_t error) < Serial.printf("Error[%u]: ", error); 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"); >); ArduinoOTA.begin(); Serial.println("Ready"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); > void loop()

Теперь откройте монитор последовательного порта со скоростью 115200 бит/с. И нажмите кнопку RST на ESP8266. Если все в порядке, он выведет динамический IP адрес, полученный от вашего маршрутизатора. Запишите его.

Читайте также:  Linux mint usb wifi адаптер

Рисунок 5 Запишите IP адрес, выделенный для ESP8266 NodeMCU

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

А теперь давайте загрузим новый скетч по воздуху, т.е. через Wi-Fi.

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

В качестве примера мы включим простой скетч Blink в код BasicOTA. Не забудьте изменить переменные SSID и пароля на учетные данные вашей сети.

Изменения в программе BasicOTA выделены номерами строк.

#include #include #include #include const char* ssid = ". "; const char* password = ". "; // переменные для мигания светодоиодом const int led = D0; // вывод ESP8266, к которому подключен встроенный светодиод unsigned long previousMillis = 0; // хранит время последнего обновления светодиода const long interval = 1000; // интервал мигания (миллисекунды) int ledState = LOW; // ledState используется для установки состояния светодиода void setup() < pinMode(led, OUTPUT); Serial.begin(115200); Serial.println("Booting"); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.waitForConnectResult() != WL_CONNECTED) < Serial.println("Connection Failed! Rebooting. "); delay(5000); ESP.restart(); >// Порт по умолчанию - 8266 // ArduinoOTA.setPort(8266); // Имя хоста по умолчанию - esp8266-[ChipID] // ArduinoOTA.setHostname("myesp8266"); // Аутентификация по умолчанию // ArduinoOTA.setPassword("admin"); // Пароль может быть зашифрован MD5 // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3 // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3"); ArduinoOTA.onStart([]() < String type; if (ArduinoOTA.getCommand() == U_FLASH) type = "sketch"; else // U_SPIFFS type = "filesystem"; // Примечание: NOTE: при обновлении SPIFFS это место для размонтирования SPIFFS с помощью SPIFFS.end() Serial.println("Start updating " + type); >); ArduinoOTA.onEnd([]() < Serial.println("\nEnd"); >); ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) < Serial.printf("Progress: %u%%\r", (progress / (total / 100))); >); ArduinoOTA.onError([](ota_error_t error) < Serial.printf("Error[%u]: ", error); 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"); >); ArduinoOTA.begin(); Serial.println("Ready"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); > void loop() < ArduinoOTA.handle(); // цикл для мигания без использования задержек unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) < // сохранить последнее внемя, когда мигнули светодиодом previousMillis = currentMillis; // если светодиод погашен, включить его, и наоборот ledState = not(ledState); // установить состояние светодиода в соответствии с переменной digitalWrite(led, ledState); >>

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

Читайте также:  How we can see wifi password

Как только вы скопируете приведенный выше скетч в Arduino IDE, выберите Инструменты → Порт, и вы должны увидеть что-то вроде этого: esp8266-xxxxxx at ip_адрес_вашего_esp. Если подобного не будет, возможно, вам придется перезапустить IDE.

Рисунок 6 Выберите порт OTA в Arduino IDE

Выберите порт и нажмите кнопку «Загрузить». Через несколько секунд новый скетч будет загружен. И вы должны увидеть на плате мигающий светодиод.

Источник

Дружимся с ESP

Последние пару лет практически все прототипирование несложных IoT-устройств я делаю на NodeMCU, хотя зачастую она и великовата по размеру, и дороговата, и избыточна по функционалу. А все потому, что имела неудачный опыт с ESP-01, которая совершенно не поддавалась прошивке. Сейчас пришло время преодолеть этот барьер и освоить другие железки, от которых мне нужно следующее — Wi-Fi и пины для подключения периферии.

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

Несколько представленных в статье модулей (ESP-01, ESP-07, ESP-12E, ESP-12F) и плат (Goouuu Mini-S1, WeMos D1 mini и NodeMCU V2) базируются на контроллере ESP8266, использование которого позволяет простым и дешевым способом добавить в своё устройство беспроводную связь через Wi-Fi.

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

Последняя плата из тех, о которых я расскажу (ESP32 WROOM DevKit v1), построена на контроллере семейства ESP32 — более продвинутой по своим возможностям версии ESP8266.

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

Настройка среды программирования Arduino IDE

По умолчанию среда IDE настроена только на AVR-платы. Для платформ, представленных ниже, необходимо добавить в менеджере плат дополнительную поддержку.

1) Открываем среду программирования Arduino IDE.

http://arduino.esp8266.com/stable/package_esp8266com_index.json, https://dl.espressif.com/dl/package_esp32_index.json

4) В пункте меню Tools (Инструменты) -> Board (Плата) выбираем Boards manager (Менеджер плат).

Находим в списке платформы на ESP8266 и нажимаем на кнопку Install (Установить).

6) Надпись INSTALLED сообщает, что дополнения успешно установлены.

7) Аналогичным образом устанавливаем дополнение для ESP32.

8) Теперь нам доступны к программированию платформы с модулем ESP8266 и ESP32.

Читайте также:  Настроить телефон до вайфая

9) Для подключения плат к платформе Интернета вещей используем библиотеку EspMQTTClient. Чтобы ее установить, в пункте меню Tools (Инструменты) выбираем Manage Libraries (Управлять библиотеками). Находим и устанавливаем библиотеку EspMQTTClient. Может появиться сообщение об установке дополнительных библиотек. Выбираем “Install all”.

Примечание — Также для работы с платами понадобится установить драйверы CH340 (WeMos и Goouuu) и CP2102 (для остальных). Их отсутствие повлияет на то, найдет ли Arduino IDE COM-порт, к которому подключена плата.

Код прошивки

Для прошивки всех используемых ниже модулей используем один и тот же код.

  1. Установка Wi-Fi соединения
  2. Подключение к объекту на платформе Rightech IoT Cloud по протоколу MQTT
  3. Отправка рандомных значений по температуре («base/state/temperature») и влажности («base/state/humidity») каждые 5 секунд (PUB_DELAY)
  4. Получение сообщений о переключении света («base/relay/led1»)
#include "Arduino.h" #include "EspMQTTClient.h" /* https://github.com/plapointe6/EspMQTTClient */ /* https://github.com/knolleary/pubsubclient */ #define PUB_DELAY (5 * 1000) /* 5 seconds */ EspMQTTClient client( "", "", "dev.rightech.io", "" ); void setup() < Serial.begin(9600); >void onConnectionEstablished() < client.subscribe("base/relay/led1", [] (const String &payload) < Serial.println(payload); >); > long last = 0; void publishTemperature() < long now = millis(); if (client.isConnected() && (now - last >PUB_DELAY)) < client.publish("base/state/temperature", String(random(20, 30))); client.publish("base/state/humidity", String(random(40, 90))); last = now; >> void loop()

Работоспособность кода будем проверять на платформе Rightech IoT Cloud, именно поэтому в качестве адреса MQTT-брокера указан dev.rightech.io. Идентификаторами клиентов служат идентификаторы объектов, созданных на платформе. Под каждую проверку я завела на платформе отдельный объект, именно поэтому во всех скринах кодов, которые будут далее представлены, отличается только строка .

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

Модули на базе ESP8266

Для работы с модулями на базе ESP8266 есть два варианта:

  1. Работа с AT командами (в стандартной прошивке Wi-Fi модуль общается с управляющей платой через «AT-команды» по протоколу UART);
  2. Wi-Fi модуль как самостоятельный контроллер (все представленные модули очень умные: внутри чипа прячется целый микроконтроллер, который можно программировать на языке C++ через Arduino IDE).

В статье будем рассматривать второй вариант — прошивка модулей в виде самостоятельного полноценного устройства. Здесь также есть два варианта прошивки с точки зрения железа:

Рассмотрим второй вариант — использовать адаптер на базе чипа CP2102 (например, такой https://www.chipdip.ru/product/cp2102-usb-uart-board-type-a?frommarket=https%3A%2F%2Fmarket.yandex.ru%2Fsearch%3Frs%3DeJwzSvKS4xKzLI&ymclid=16146772489486451735000001). Обязательно обратите внимание на то, чтобы адаптер позволял выдавать выходное напряжение 3.3 В, не больше!

1. ESP-01

ESP-01 — самый популярный модуль на ESP8266. PCB антенна обеспечивает дальность до 400 м на открытом пространстве.

Внешний вид

Питание

Родное напряжение модуля — 3,3 В. Его пины не толерантны к 5 В. Если вы подадите напряжение выше, чем 3,3 В на пин питания, коммуникации или ввода-вывода, модуль выйдет из строя.

Подключение периферии

2 порта ввода-вывода общего назначения

Распиновка

Подключение к IoT

Аппаратная часть

Источник

Оцените статью
Adblock
detector