Беспроводное программирование по технологии OTA (Over the Air – «по воздуху») – это процесс, позволяющий устройствам обновить свою прошивку или программное обеспечение беспроводным способом, без физического подключения к чему-либо. Для этого можно использовать такие технологии как Wi-Fi, Bluetooth, GPRS или 4G/3G вместо использования последовательной связи по проводам. Технология OTA используется для перепрограммирования различных устройств – микроконтроллеров, сотовых телефонов, компьютеров и т.п. В связи с широким распространением технологий интернета вещей технология OTA в настоящее время использует преимущественно частотные диапазоны с низкими скоростями передачи данных (868 MHz, 900 MHz, 2400 MHz).
В данной статье мы рассмотрим беспроводное («по воздуху») программирование платы ESP8266 NodeMCU с помощью Arduino IDE.
ESP8266 NodeMCU
NodeMCU – это платформа IoT (интернета вещей) с открытым исходным кодом. Она включает в себя прошивку (firmware), которая работает на дешевом Wi-Fi чипе (SoC) ESP8266 от компании Espressif Systems, и аппаратном обеспечении (hardware), основанном на модуле ESP-12. Она содержит контакты GPIO, SPI, I2C, ADC, PWM, UART и может программироваться с помощью среды Arduino IDE. Плата NodeMCU содержит в своем составе микросхему CP2102, которая обеспечивает преобразование интерфейса USB в логику TTL. Благодаря этому NodeMCU можно подключать напрямую к USB порту компьютера, в то время как обычный модуль ESP8266 можно подключать к USB порту компьютера только при помощи платы (модуля) FTDI.
Необходимые компоненты
- NodeMCU ESP8266 (купить на AliExpress) (Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158).
- Кабель micro USB.
- Arduino IDE.
Подготовка NodeMCU для беспроводного программирования (OTA)
Подключите NodeMCU ESP8266 к компьютеру с помощью кабеля USB cable. Далее, чтобы нам загрузить прошивку в плату с помощью технологии OTA, нам сначала необходимо по кабелю загрузить скетч в NodeMCU ESP8266, который будет генерировать IP адрес – этот скетч в дальнейшем поможет нам осуществить беспроводное программирование платы. Для этого выберите последовательный порт, по которому плата подключена к компьютеру, в пункте меню Tools -> Port.
В среде Arduino IDE есть библиотеки и примеры для работы с модулями ESP8266. В Arduino IDE откройте пример BasicOTA как показано на следующем рисунке.
Внесите изменения в код этого примера, заменив в нем значения параметров “your-ssid” и “your-password” на идентификатор сети и пароль для своей сети Wi-Fi. После этого можете загружать скетч в модуль.
После успешной загрузки скетча в модуль откройте окно монитора последовательной связи (serial monitor). В окне монитора последовательной связи установите скорость передачи (Baud Rate) равную 115200 и нажмите кнопку сброса (Reset button) на NodeMCU ESP8266. Подключение NodeMCU ESP8266 к сети Wi-Fi займет некоторое время поскольку при этом проверяются идентификатор сети и пароль на вход в нее. После успешного подключения модуля к сети Wi-Fi его IP адрес отобразится в окне монитора последовательной связи.
Объяснение программы для модуля ESP8266
Полный код программы для мигания светодиодом при помощи технологии OTA приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Первым делом в программе подключим используемые библиотеки. Библиотека ESP8266WiFi.h содержит функции (операции) для работы с Wi-Fi, которые потребуются ему для соединения с сетью. Также она содержит методы и свойства для работы модуля ESP8266 в режиме станции или в режиме точки доступа. Библиотека ESP8266mDNS.h позволяет скетчу отвечать на широковещательные DNS запросы.
1 2 3 4 |
#include <ESP8266WiFi.h> //provides ESP8266 specific Wi-Fi routines we are calling to connect to network. #include <ESP8266mDNS.h> #include <WiFiUdp.h> #include <ArduinoOTA.h> //OTA libraries |
Инициализируем переменные для хранения идентификатора сети (SSID) и пароля (password) Wi-Fi сети, к которой будет подключаться наш модуль ESP. Для работы нашего проекта необходимо чтобы компьютер и модуль ESP были подключены к одной и той же сети.
1 2 3 4 5 6 7 |
#ifndef STASSID #define STASSID "your-ssid" #define STAPSK "your-password" #endif const char* ssid = STASSID; const char* password = STAPSK; |
Для модуля ESP8266 установим режим работы в качестве станции сети Wi-Fi. При подключении к сети Wi-Fi будут проверяться идентификатор сети и пароль. Если они корректны, то произойдет подключение к сети Wi-Fi, если они не корректны, то модуль ESP8266 будет перезагружаться каждую секунду.
1 2 3 4 5 6 7 8 9 10 11 |
Serial.begin(115200); //Set Baud Rate to 115200 Serial.println("Booting"); // Step to connect ESP with the Wi-Fi WiFi.mode(WIFI_STA); //Set ESP as station mode WiFi.begin(ssid, password); //Wi-Fi Credentials while (WiFi.waitForConnectResult() != WL_CONNECTED) //Connecting ESP to wi-fi takes some time, so wait till it gets connected { Serial.println("Connection Failed! Rebooting..."); delay(1000); ESP.restart(); } |
IP адрес модуля ESP8266 будет выводиться в окно монитора последовательной связи когда модуль подключится к сети Wi-Fi. Для определения IP адреса модуля ESP8266 будет использоваться функция WiFi.localIP().
После успешной загрузки кода программы в модуль откройте монитор последовательной связи на скорости 115200 бод. Нажмите кнопку сброса на модуле и спустя несколько секунд вы увидите IP адрес модуля ESP8266 в окне монитора последовательной связи. После этого вы получите возможность беспроводной загрузки прошивки (программного обеспечения) в модуль ESP8266.
Беспроводная загрузка скетча мигания светодиодом в NodeMCU ESP8266
Перед загрузкой следующего скетча в модуль зайдите в пункт меню Tools в Arduino IDE и в нем измените PORT на IP адрес модуля ESP8266 – это нам понадобится для беспроводной загрузки прошивки (программного обеспечения) в NodeMCU.
После этого загрузите ниже приведенный скетч для мигания светодиодом в NodeMCU беспроводным способом с помощью Arduino IDE. Перед этим убедитесь в том что ваш компьютер и модуль ESP8266 подключены к одной и той же Wi-Fi сети, а модуль Wi-Fi запитан от отдельного источника питания.
После успешной загрузки скетча светодиод на плате NodeMCU ESP8266 начнет мигать каждую секунду. Вы также можете установить имя хоста (host name) и пароль в скетче в целях безопасности, пока загружаете прошивку в ESP8266.
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
#include <ESP8266WiFi.h> //provides ESP8266 specific Wi-Fi routines we are calling to connect to network. #include <ESP8266mDNS.h> #include <WiFiUdp.h> #include <ArduinoOTA.h> // OTA library (библиотека для работы с технологией OTA) #ifndef STASSID #define STASSID "your-ssid" #define STAPSK "your-password" #endif const char* ssid = STASSID; const char* password = STAPSK; const int blink_led = D0; // LED pin on NodeMCU ESP8266 (контакт светодиода) void setup() { pinMode(blink_led,OUTPUT); Serial.begin(115200); //Set Baud Rate (скорость передачи) Serial.println("Booting"); // Step to connect ESP with the Wi-Fi WiFi.mode(WIFI_STA); //Set ESP as station mode (устанавливаем режим станции) WiFi.begin(ssid, password); //Wi-Fi Credentials (параметры для подключения к сети Wi-Fi) while (WiFi.waitForConnectResult() != WL_CONNECTED) //Connecting ESP to wi-fi takes some time, so wait till it gets connected { Serial.println("Connection Failed! Rebooting..."); delay(1000); ESP.restart(); } // Port defaults to 8266 // ArduinoOTA.setPort(8266); // Hostname defaults to esp8266-[ChipID] // ArduinoOTA.setHostname("myesp8266"); // No authentication by default // ArduinoOTA.setPassword("admin"); // Password can be set with it's md5 value as well // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3 // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3"); ArduinoOTA.onStart([]() { String type; if (ArduinoOTA.getCommand() == U_FLASH) { type = "sketch"; } else { // U_SPIFFS type = "filesystem"; } // NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using 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(); //инициализация OTA Serial.println("Ready"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // отображаем IP адрес модуля ESP в окне монитора последовательной связи } void loop() { ArduinoOTA.handle(); // code to blink led every 1 second (код программы чтобы светодиод мигал каждую секунду) digitalWrite(blink_led,HIGH); delay(1000); digitalWrite(blink_led,LOW); delay(1000); } |
4 ответа к “Программирование NodeMCU ESP8266 «по воздуху» (Over-the-Air, OTA)”
Нужен скетч перепрограммировать NodeMCU V1.0 в версию NodeMCU V3.0
К сожалению у меня такого нет
Не тот релиз
Вы про что?