Перепрошивка esp-8266

Что делать дальше

Если у вас новый модуль, то, скорее всего, в нем прошита одна из старых кастомных AT прошивок. Скорее всего это какой-нибудь AI-THINKER AT v0.16 SDK v0.9.2. Проверить версию прошивку вы можете командой «AT+GMR», т.е. прямо в терминальной программе набираете AT+GMR без кавычек и жмете Enter. Модуль должен ответить «OK» и выдать версию прошивки (например, «0016000092» — в разных версиях AT прошивок формат вывода версии отличается). Управление модулем ESP8266 AT командами заслуживает отдельной статьи, однако вы легко сможете разобраться с этим и сами, воспользовавшись одним из наших справочников по AT командам:

Код прошивки

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

Основные функции:

  1. Установка Wi-Fi соединения

  2. Подключение к объекту на платформе Rightech IoT Cloud по протоколу MQTT

  3. Отправка рандомных значений по температуре («base/state/temperature») и влажности («base/state/humidity») каждые 5 секунд (PUB_DELAY)

  4. Получение сообщений о переключении света («base/relay/led1»)

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

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

Минимум для загрузки прошивки и нормального использования

Чип Резистор Адаптер
VCC VCC (3.3V)
GND GND
TX или GPIO2 RX
RX TX
GPIO0 Подтягивающий DTR
Reset Подтягивающий RTS
GPIO15 Стягивающий
CH_PD Подтягивающий

Примечания:

  • Контакт GPIO15 также называют MTDO
  • Контакт Reset (сброс) также называют RSBT или REST (если подключить к нему подтягивающий резистор, это повысит стабильность модуля)
  • Контакт GPIO2 – это альтернатива TX для режима загрузчика
  • Прямое подключение VCC к GND – это не замена подтягивающему или стягивающему резистору. Кроме того, если подключить их, это помешает работе консоли и квитированию. Также в некоторых случаях модуль начинает нестабильно работать.

Как прошить ESP8266

Стандартная микропрограмма внутри ESP8266 не только ограничивает наши возможности, но и обладает определенными недостатками (к примеру, медленный интерфейс обмена данными с контроллером), что может быть критично для некоторых проектов. Если мы захотим использовать ESP8266 как полноценный контроллер, нам надо будет записать туда свою программу или интерпретатор, который будет выполнять поступающие из вне команды. Можно выделить несколько основных способов перепрошивки ESP8266:

  • Использование “родного” SDK. Компания Espressif выпустила набор программных средств для разработки собственных прошивок. SDK предоставляет широкий спектр возможностей, тем не менее, пользоваться им довольно-таки трудно в виду не совсем очевидного и приятного интерфейса.
  • Загрузка готовых решений. На просторах Всемирной паутины есть множество уже готовых со встроенным интерпретатором. Среди множества решений наверняка найдутся и тем, которые подойдут вашему проекту. Тем не менее, у готовых прошивок есть недостатки. Они могут быть ненадежными, решать не совсем те задачи и быть избыточно большими. Из-за встроенного интерпретатора софт сильно загружает ОЗУ, что приводит к медленной работе.
  • Настройка работы через WEB-интерфейс. Существует ряд прошивок, которые позволяют изменить конфигурации ESP8266 через интернет-интерфейс. В качестве примера можно привести коммерческий софт HOME-SMART. Недостатком подобных прошивок является довольно-таки узкий спектр возможностей.
  • Использование Arduino IDE. Пожалуй, один из лучших способов написания прошивки для ESP, который используется чаще всего. Это связано с тем, что у рассматриваемой IDE есть целый ряд достоинств, речь о которых пойдет в следующем разделе.

Step 2: Check Firmware Version

To find your ESP-01 firmware version, in the Arduino IDE Serial Monitor, type:

AT+GMR

Note: All AT commands need to be typed in uppercase with no spaces.

Here is the serial output for my ESP-01 (your ESP module might not show exactly the same information as it depends on the specific model and release date):

AT+GMR 
AT version:0.25.0.0(Jun  5 2015 16:27:16) 
SDK version:1.1.1 
Ai-Thinker Technology Co. Ltd. 
Jun 23 2015 23:23:50 
OK

Note: The list of available firmware might not all be compatible with your ESP-01 model. Check the Troubleshooting section at the end of this tutorial for more information.

Получаем домен второго уровня бесплатно

Если у Вас уже есть собственный домен и DNS, тогда вы должны создать DNS запись типа А и вписать туда общедоступный IP-адрес VPS. После этого можете переходить к следующему пункту.

Если у Вас еще нет собственного домена, то идем на Freenom.com (кредитная карта не понадобится) подбираем свободный домен и регистрируем его. Большинство доменов, даже 4-х буквенные бесплатны, кроме премиальных (по мнению авторов сервиса). Регистрация аккаунта происходит в момент регистрации домена, также пусть вас не смущает кнопка Оформить заказ — да, для регистрации бесплатного домена нужно оформить заказ. Еще не забудьте указать, что регистрируете домен на 12 месяцев (по умолчанию регистрируют только на 3).

Регистрация бесплатного домена

В момент регистрации домена (на большом мониторе, а не на маленьком как у меня на скриншоте) вы можете сразу указать общедоступный IP адрес вашей виртуалки для нового доменного имени. Указать его нужно два раза (обычно для каждого WEB сервера создается две DNS записи: первая только с именем домена и вторая www.+имя домена). Если у Вас нет поля для ввода IP адреса при регистрации, то ничего страшного, Вы сможете это сделать после регистрации.

После регистрации домена и аккаунта на freenom нужно залогиниться и перейти в меню Services — My Domains — напротив Вашего домена нажать Manage Domain, выбрать вкладку Manage Freenom DNS, ввести два раза общедоступный IP-адрес в поле Target и сохранить изменения.

Дальше можете подождать и попить кофе пока обновится кэш DNS.

Успешным результатом этого шага станет возможность подключаться по SSH к Вашей VPS не только по общедоступному IP-адресу, но и по доменному имени.

Начало работы с Termite

В оригинальной статье о прошивке ESP8266 была рекомендована PuTTY; и, если она у вас она есть, и вы хотите её использовать, она здесь будет отлично работать. Тем не менее, Termite в этом плане более удобное приложение и будет использоваться далее в этой статье. Termite бесплатен и для личного, и для коммерческого использования.

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

После проверки своей схемы программирования ESP-01, как описано выше, включите её. Запустите на своем компьютере Termite и нажмите кнопку Settings (Настройки); вы должны увидеть окно, похожее на приведенное ниже. Убедитесь, что COM порт, к которому подключен USB-TTL конвертер, правильно выбран в окне настроек последовательного порта. Выставьте все остальные параметры, как показано в окне настроек последовательного порта ниже, и нажмите OK, чтобы закрыть окно настроек последовательного порта.

Настройки последовательного порта

На этом этапе курсор должен мигать в нижней части окна Termite; если нет, кликните на нижней части окна Termite, чтобы поместить туда курсор. Введите и нажмите Enter на клавиатуре; если всё хорошо, ESP-01 ответит в окне Termite. Если это произойдет, можете вздохнуть с облегчением, потому что вы только что преодолели главное препятствие.

Затем введите и нажмите Enter. ESP-01 должен ответить чем-то очень похожим, что показано на рисунке ниже.

Отклик модуля ESP-01

Команда говорит ESP8266 сообщить о версии набора AT-команд, который он содержит, какой SDK (Software Development Kit) был загружен в него, какая компания собрала модуль ESP, и когда SDK был загружен в модуль. Наконец, как обычно, ESP8266 завершает свой ответ с помощью .

Если ESP-01 ответил правильно, то можно закончить с Termite (если вы не хотите еще поэкспериментировать). Далее он понадобится снова для подтверждения успешной прошивки.

Компоненты умного дома

Теперь я хотел бы подробнее остановится на компонентной схеме умного дома. Все компоненты уместились в следующей схеме:

Компоненты умного дома

Слева-направо: сначала идет ваше устройство на ESP8266, далее это прошивка ESP Easy (ее ставим на ESP8266), прошивку подключаем к MQTT-брокеру (например WQTT.ru или свой брокер на своем сервере), веб-сервис WQTT.ru уже имеет подключение к Алисе (на своем брокере это подключение придется сделать самостоятельно, что в общем несложно, потому что это наша привычная работа программиста), далее сервер логики Node RED, который подключен к MQTT-брокеру и управляет всем умным домом. И в конце можно поставить Homebridge для связи умного дома с Homekit.

Как вы наверное догадались, homebridge с голосовыми помощниками не обязательные компоненты. Главное это MQTT-брокер и Node RED. Эти два сервера вам обеспечат практический полный функционал и доступ к настройке любой логики.

Думаю общая картинка умного дома уже появилась и можно переходить к самим компонентам в отдельности. В этой статье рассмотрим MQTT-брокер и само устройство. В следующих статьях будем рассматривать настройку прошивки ESP Easy и Node RED. Этого будет достаточно, чтобы запустить простейший вариант умного дома.

В качестве устройства у нас будет светодиод, который встроен в ESP8266 и сидит на пине GPIO2. Этот светодиод будет имитировать освещение в гостиной например. Также подключим кнопку, которая будет включать этот светодиод. И еще в нашем устройстве будут два датчика: DHT11 и BMP085 (влажности и барометр с термометром). 

В логику (которая будет хранится в Node RED) заложим управление кнопкой и светодиодом, оповещение по телеграму о резком похолодании в комнате и вывод значений датчиков в Homekit и Алису.

ESPresso Lite 2.0

ESPresso Lite 2.0 – это прототипная WiFi-плата, совместимая с Arduino и основанная на версии 1.0 (она была бета-версией). Перепроектированная совместно с Cytron Technologies, ESPresso Lite 2.0 оснащена функцией автозагрузки/автопрограммирования, что устраняет нужду в ручном сбросе платы перед записью новой программы. Кроме того, эта версия платы оснащена двумя программируемыми кнопками, которые расположены по бокам, и кнопкой сброса. Во второй версии остались и встроенные контактные площадки для интерфейса I2C, позволяющие подключаться к датчикам и устройствам вывода данных вроде дисплеев.

Оптимальное подключение ESP8266

Подключение ESP8266 Примечание USB-TTL
VCC ESP8266 подключайте к внешнему источнику питания >300мА, 3,3V
GND все контакты GND должны быть соединены вместе: ESP8266, USB-TTL и источника питания GND
TX (UTXD) RX
RX (URXD) TX
GPIO0 подтягивающий к питанию резистор 10k DTR (если на вашем USB-TTL не разведен пин DTR, то вам придется вручную переключать GPIO0 на землю для перевода ESP8266 в режим прошивки)
RESET (RSBT, REST) подтягивающий к питанию резистор 10k, также можете добавить кнопку, соединяющую RESET и GND для ручного сброса модуля RTS (если на вашем USB-TTL не разведен пин RTS, то вам придется вручную перезагружать модуль )
CH_PD (CH_EN) подтягивающий к питанию резистор 10k
GPIO15 (MTDO) подтягивающий к земле резистор 10k
(для тех модулей, где выведен пин GPIO15)
GPIO2 подтягивающий к питанию резистор 10k
(на схеме не показан, но рекомендуется для увеличения стабильности)
GPIO16 для успешного выхода из режима Deep Sleep необходимо соединить пины ESP8266 GPIO16 и RESET через резистор 470 Ом (на схеме не показан)

Примечания.

1. Не на всех модулях выведены все пины. Перед приобретением модуля ознакомьтесь с видами модулей и их распиновкой.

2. Если на вашем USB-TTL конвертере выведены пины CTS и DSR — для автозагрузки прошивки они вам не помогут, т.к. работают только на вход.

3. Для стабильной работы ESP8266 требуется источник стабилизированного питания 3,3 вольт, ток более 250 миллиампер. Использование питания от USB-TTL конвертера может привести к нестабильности в работе.

Минимальное подключение ESP8266

Минимальное подключение ESP8266 (повышенная стабильность)

Краткое описание языка Lua

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

Мигание светодиодами на Lua

Можно рассмотреть простейшую схему – мигание светодиодом. Этот пример поможет изучить работы с контактами GPIO. Светодиод нужно подключить как показано на схеме.

Затем нужно записать следующий скетч в левое окно ESPlorer:

pin_number = 1

gpio.mode (pin_number, gpio.OUTPUT) // установка рабочего режима на выход

gpio.write (pin_number, gpio.HIGH)// установка высокого уровня

gpio.write (pin_number, gpio.LOW)// установка низкого уровня

gpio.serout (1, gpio.HIGH, {+990000,990000}, 10, 1) // установка мигания светодиодом 10 раз

После нужно сохранить скрипт с названием init.lua. Сразу после этого начнется автоматическая загрузка написанного кода в отладочную плату и его выполнение. Если операция выполнена успешно, отладочная плата начнет мигать светодиодом.

Важно отметить, что плата самостоятельно выполняет скрипт, подключение к компьютеру нужно только для подачи питания

ESP-07

Особенности этого модуля — керамическая антенна и разъем для внешней антенны, металлический экран.

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

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

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

1) Собираем схему

ESP-07

USB-Serial

VCC

VCC

CH_PD (рекомендуется через резистор)

VCC

TX

RX

RX

TX

GND

GND

GPIO 15 (рекомендуется через резистор)

GND

GPIO 0 — сначала не подключен, но будет использоваться для перевода в режим программирования далее, поэтому к нему уже подведен провод

все остальные контакты не подключены

RTS, CTS — не подключены

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

2) Переводим в режим программирования (необходимо каждый раз выполнять перед прошивкой модуля)

2.1) Отключаем питание от модуля2.2. Подключаем пин GPIO 0  к GND

2.2) Подключаем пин GPIO 0  к GND

ESP-07

USB-Serial

VCC

VCC

CH_PD

VCC

TX

RX

RX

TX

GND

GND

GPIO 15 

GND

GPIO 0

GND

все остальные контакты не подключены

RTS, CTS — не подключены

2.3) Подключаем модуль к питанию

2.4) Железо готово, приступаем к программной части.

Программная часть

1) Выбираем плату: Tools (Инструменты) -> Board(Плата) Generic ESP8266 Module.

2) Вставляем подготовленный код.

3) Задаем данные для подключения Wi-Fi и идентификатор своего объекта на платформе.

4) Компилируем и загружаем скетч на плату.

5) Для обычной работы модуля (не для режима прошивки) пин GPIO 0 должен быть свободен, поэтому отключаем его от GND.

6) Переподключаем питание ESP-07 (например, вытаскиваем и вставляем обратно адаптер).

7) Видим появление данных на платформе.

В Китае

Что это такое?

По сути, чип ESP8266 представляет собой миниатюрный микроконтроллер с Wi-Fi передатчиком, который может функционировать в условиях полной автономии, без дополнительной платы Arduino. С помощью модуля ESP-01 можно передавать данные о температуре, влажности, включать реле и так далее. Для удобства использования чипа ESP8266, производитель изготовил серию модулей от ESP-01 по ESP-14. Первый в этой серии, это модуль ESP-01 (существует еще ESP-01S, о нем чуть позже), являющийся одним из известным, из-за свой цены и небольшими размерами, всего 14,3 мм на 24,8 мм. Но в нем, есть два недостатка, это ограниченное количество программированных выводов GPIO и их неудобное расположение (неудобно макетировать). Модуль ESP-01 представляет собой небольшую плату, черного цвета, на которой расположены два основных чипа, это микроконтроллером ESP8266 и flash память на 1 Мб. Рядом расположен кварцитовый резонатор и напечатанная антенна. На плате установлены два светодиода, красный и голубой. Красный светодиод, светится когда на модуле есть питание, а синий мигает при выполнении команд (в NSP-01S удален красный светодиод, из-за постоянного потребления электроэнергии). Для подключения модуля ESP-01, предусмотрено восемь выводов (два ряда по четыре вывода, шагом 2.54 мм), два из готовых являются цифровым входами-выходом, поддерживающие широтно импульсную модуляцию. Хотя модуль имеет по умолчанию два вывода GPIO, можно использовать другие доступные контакты, если у вас есть необходимый инструмент для пайки.

Назначение выводовGND:  «-» питание модуляGPIO2: (Digital I / O программируемый)GPIO0: (Digital I / O программируемый, также используется для режимов загрузки)RX: UART приемTX:  UART передачаCH_PD: (включение / отключение питания, должны быть выведены на 3.3 В непосредственно или через резистор)RST: сброс, необходимо потянуть к 3.3ВVCC:  «3.3В» питание модуля

Внимание! ESP-01 очень капризные к питанию, необходимо использовать внешний стабилизатор напряжения на 3.3В, в качестве первого примера буду использовать адаптер USB

Подключение NodeMCU к компьютеру

Для начала работы с NodeMcu нужно подключить плату к компьютеру. Первым шагом будет установка драйвера CP2102 и открытие Arduino IDE. Затем нужно найти в «Файл» – «Настройки» и в окно «дополнительные ссылки для менеджера плат» вставить ссылку http://arduino.esp8266.com/versions/2.3.0/package_esp8266com_index.json.

После этого в меню «документы» – «плата» «менеджер плат» выбрать «esp8266» и установить последнюю версию. После проделанных действий в меню «инструменты» – «плата» нужно найти NodeMCU.

После того, как все необходимые данные будут установлены и скопированы, можно будет начать работать.

Web интерфейс

Есть и другой путь — можно сделать Web интерфейс и управлять светодиодом еще и через браузер.

Тот же скрипт + Web интерфейс:

Небольшое пояснение как работает web-сервер вообще, и наш скрипт в частности. Стандартный порт для web-сервера — 80. Т.е. когда Вы в браузере набираете http://192.168.4.1/, то браузер подключается к серверу (192.168.4.1) на порт 80 и отправляет запрос. Запрос выглядит примерно так:

GET / HTTP / 1.1
Host: 192.168.4.1
User-Agent: Mozilla / 5.0 (Windows NT 5.1; rv: 2.0.1) Gecko / 20100101 Firefox
Accept: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8
Accept-Language: ru-RU, ru; q = 0.8, en-US; q = 0.5, en; q = 0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

Для нас представляет интерес первая строка запроса: «GET / HTTP/1.1». В ней указан URL. Если в браузере набрать http://192.168.4.1/on , тогда в первой строке запроса будет «GET /on HTTP/1.1». А если в браузере набрать http://192.168.4.1/off тогда будет «GET /off HTTP/1.1». Именно эту строку и анализирует скрипт и в зависимости от полученного URL включает или отключает светодиод.
Далее скрипт отправляет html страничку. Но после отправки нужно разорвать подключение. Поскольку отправка занимает некоторое время, а ждать окончания отправки технически глупо, на событие «sent» (отправлено) подключим функцию со строкой sck:close(). Это делается в строке: sck:on(«sent», function(sck) sck:close() end). После чего выполняется отправка html страницы sck:send(response). Скрипт продолжает работу. Когда ответ будет полностью отправлен, сработает sck:close().

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

Binary releases

On demand, controlled by the repo owner, our build-bot will build a new binary release: https://github.com/letscontrolit/ESPEasy/releases

The releases are named something like ‘mega-20210501’ (last number is the build date)

Depending on your needs, we release different types of files:

The name is built up from a few key parts:

ESPEasy_mega________.bin

can be any of:
Build type | Description | included plugins |
————|——————————————-|———————————|
custom | Custom predefined set/Defined in Custom.h | Specific |
normal | Standard plugins | Stable |
test_A | Normal + test set A | Stable + Testing base + set A |
test_B | Normal + test set B | Stable + Testing base + set B |
test_C | Normal + test set C | Stable + Testing base + set C |
test_D | Normal + test set D | Stable + Testing base + set D |
max | All available plugins | All available |
energy | All plugins related to energy measurement | Stable + Energy measurement |
display | All plugins related to displays | Stable + Displays |
hard | hardware specific builds | Minimal |
minimal | minimal plugins for specific use-cases | Switch and Controller |
spec_* | specialized technical builds | Not intended for regular use |
IRext | Infra-red hardware specific | Sending and receiving IR cmd |

(optional) can be any of:
Arduino library | Description |
—————-|————————————|
alt_wifi | Alternative WiFi configuration |
beta | Arduino Beta release |
sdk3 | Arduino SDK v.3 |
core_274 | Arduino Core 2.7.4 release |
core_274_sdk3 | Arduino Core 2.7.4 SDK v.3 release |

cn be any of:
Hardware type | Description |
——————|———————————————|
ESP8266 | Espressif ESP8266 generic boards |
ESP8285 | Espressif ESP8285 generic boards 1MB Flash |
WROOM02 | Espressif ESP8266 WRoom02 boards |
ESP32 | Espressif ESP32 generic boards |
ESP32-wrover-kit | Espressif ESP32 wrover-kit boards |
SONOFF | Sonoff hardware specific |
other_POW | Switch with power measurement |
Shelly_1 | Shelly 1 switch |
Shelly_PLUG_S | Shelly plug S switch with power measurement |
Ventus | Ventus W266 weather station |
LCtech | LC-tech serial switch |

can be any of:
Flash size | Description |
————|——————————|
1M | 1 MB with 128 kB filesystem |
2M | 2 MB with 128 kB filesystem |
2M256 | 2 MB with 256 kB filesystem |
4M1M | 4 MB with 1 MB filesystem |
4M2M | 4 MB with 2 MB filesystem |
16M | 16 MB with 14 MB filesystem |
4M316k | 4 MB with 316 kB filesystem |
16M1M | 16 MB with 1 MB filesystem |
16M2M | 16 MB with 2 MB filesystem |
16M8M | 16 MB with 8 MB filesystem |

can be any of:
Build features | Description |
—————-|—————————————————————————|
LittleFS | Use LittleFS instead of SPIFFS filesystem (SPIFFS is unstable > 2 MB) |
VCC | Analog input configured to measure VCC voltage |
OTA | Arduino OTA (Over The Air) update feature enabled |
Domoticz | Only Domoticz controllers (HTTP+MQTT) and plugins included |
FHEM_HA | Only FHEM/OpenHAB/Home Assistant (MQTT) controllers and plugins included |
lolin_d32_pro | Specific Lolin hardware options enabled |
ETH | Ethernet interface enabled (ESP32 only) |

Some example firmware names:
Firmware name | Hardware | Included plugins |
—————————————————|————————-|——————————-|
ESPEasy_mega-20210501_normal_ESP8266_1M.bin | ESP8266 with 1MB flash | Stable |
ESPEasy_mega-20210501_normal_ESP8285_1M.bin | ESP8285 with 1MB flash | Stable |
ESPEasy_mega-20210501_normal_ESP8266_4M1M.bin | ESP8266 with 4MB flash | Stable |
ESPEasy_mega-20210501_test_A_ESP8266_4M1M.bin | ESP8266 with 4MB flash | Stable + Testing base + set A |
ESPEasy_mega-20210501_normal_ESP32_4M316k.bin | ESP32 with 4MB flash | Stable |
ESPEasy_mega-20210501_test_A_ESP32_4M316k.bin | ESP32 with 4MB flash | Stable + Testing base + set A |
ESPEasy_mega-20210501_test_B_ESP32_4M316k.bin | ESP32 with 4MB flash | Stable + Testing base + set B |
ESPEasy_mega-20210501_max_ESP32_16M1M.bin | ESP32 with 16MB flash | All available plugins |
ESPEasy_mega-20210501_max_ESP32_16M8M_LittleFS.bin | ESP32 with 16MB flash | All available plugins |

ESPlorer, init.lua — пишем первый скрипт

Для написания и заливки скриптов будем использовать программу ESPlorer. Это кроссплатформенная программа написана на Java и так же не требует установки. Работает одинаково как под Windows так и под Ubuntu.

ESPlorer качаем здесь: http://esp8266.ru/esplorer-latest/?f=ESPlorer.zip
Распаковываем архив.

Под Windows запускаем файл ESPlorer.bat

Под Ubuntu:

Примечание: далее описанна робота с ESPlorer v0.1. Внешний вид новых версий может иметь не принципиальные отличия.

Указываем порт и скорость 9600:

И нажимаем «Open». Увидем следующще

У ESPlorer обнаружилась паршивая особенность. Он не всегда четко подключается к NodeMCU. Если попробовать послать любую команду (кнопкой Send) в консоли пролетает мусор вместо нормального ответа. Иногда после нескольких повторов все налаживается. Если Вас это беспокоит, попробуйте изменить скорость подключения на 115200.

Приступим к созданию первого скрипта на языке Lua. Скрипт с именем init.lua стартует автоматически после запуска NodeMCU. Создадим файл init.lua.
напечатаем всего одну строчку:

Сохраняем файл как init.lua. После сохранения файл выполниться и мы должны увидеть работу первого скрипта.

По умолчанию файл сохраняется и на диск компьютера и заливается на ESP8266.

Теперь о самой большой неприятности, которая есть у NodeMCU. При некоторых критических ошибках (это случается не так часто, но если случается, то запоминается на долго) NodeMCU может перезагружаться. И самое страшное, что может случиться — это циклическая перезагрузка. Это случается если допустить критическую ошибку в скрипте который стартует автоматически. NodeMCU стартует, выполняет «глючный» скрипт, нарывается на критическую ошибку и уходит в перезагрузку. И так до бесконечности.

Для того, чтобы обезопасить себя на этапе изучения NodeMCU, я использую описанный ниже прием. В стартовом скрипте init.lua запускаем таймер, который сработает только один раз и через указанное время (в данном случае через 5 секунд) выполнит процедуру запуска другого скрипта (в данном случае main.lua). Больше ничего в скрипте init.lua не делаем. Все операции выполняются в скрипте main.lua. Таким образом, если мы допустим ошибку в скрипте main.lua, и NodeMCU уйдет в циклическую перезагрузку, после перезагрузки у нас будет 5 секунд для того чтобы удалить или исправить «глючный» скрипт.

Текст init.lua:

Кроме того, такой подход позволяет легко включать в автозагрузку любо нужный скрипт, достаточно в файле init.lua вместо main.lua указать имя другого скрипта. Это очень удобно, когда вы на одной плате тестируете несколько проектов или несколько версий скрипта.

Why flash the original firmware ?

First of all, ESP01 can sometimes be misleading. This can happen after a faulty installation (other firmware, program …). If the module returns you the following error code via the Serial Monitor, the best is to flash the original firmware of Espressif.

ets Jan 8 2013,rst cause:1, boot mode:(3,7)
ets_main.c

If you get the message below, your ESP is in “Flashing Mode”, this is not a mistake

epc1=0x4
 ets Jan 8 2013,rst cause:2, boot mode:(1,6)

The other great strength of the ESP8266 is the ability to install the firmware of its choice (and even develop its own with the SDK). The Arduino IDE is still the simplest way to program the ESP8266, in which case you will need to re-install the original firmware.

Test your first Arduino program on your ESP8266

If you discover the ESP8266, you must first install the library to program the esp8266 boards to your Arduino IDE. To do this, open the preferences and add to the list of packages.

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Go to the board manager and look for esp8266, then click install.


Generic ESP8266 Module

  • Flash Mode: DIO
  • Flash Frequency: 40 MHz
  • CPU Frequency: 80 MHz
  • Flash Size: 512K
  • Upload Speed: 115200 baud

Choose ArduinoISP as a programmer.

In the list of examples ESP8266Wifi, choose WifiScan. Put your ESP in Flashing Mode and then upload the program. If your connection is correct, points indicating the download progress will appear.

Open the Serial Monitor (at 115200 baud). Your ESP-01 now scans your Wifi network and returns the found networks.

Некоторые правила работы с языком Lua на NodeMCU

1. Не пишите длинные скрипты. Размер памяти ESP8266 не бесконечен. Разбивайте программу на функциональные модули и делайте их в виде отдельных скриптов, запуская их с помощью dofile(). Например, код подключения к Wifi:

можно вынести в отдельный скрипт «wifi.lua» и выполнить его из основного скрипта командой dofile(«wifi.lua»).

2. Переменные, которые используются только в текущем скрипте объявляйте как local. В конце скрипта, когда переменная уже не нужна, присваивайте ей значение nil и явно вызывайте сборщик мусора collectgarbage()

Желаю успехов.

Смотри также:

  • ESP8266 NodeMCU Первое знакомство. Делаем WiFi розетку
  • ESP8266 NodeMCU. PWM
  • ESP8266 NodeMCU. ADC
  • ESP8266 NodeMCU. timer, rtc, SNTP, cron
  • ESP8266 NodeMCU. Файловая система + SD карточка
  • ESP8266 NodeMCU. UART
  • GPS-трекер на базе ESP8266
  • GPS-трекер + Дисплей SSD1306
  • ESP8266 NodeMCU. SSD1306. U8G
  • ESP-01 (ESP8266) upgrade flash memory to 4MB
  • ESP8266 NodeMCU. I2C. BME280/
  • Метеостанция на ESP8266

NodeMCU 0.9

Номера контактов, напечатанные на самой плате, не соответствуют номерам GPIO-контактов ESP8266. Чтобы упростить использование этой платы, были заданы следующие константы:

static const uint8_t D0   = 16;
static const uint8_t D1   = 5;
static const uint8_t D2   = 4;
static const uint8_t D3   = ;
static const uint8_t D4   = 2;
static const uint8_t D5   = 14;
static const uint8_t D6   = 12;
static const uint8_t D7   = 13;
static const uint8_t D8   = 15;
static const uint8_t D9   = 3;
static const uint8_t D10  = 1;

То есть, если вы хотите использовать 5-ый контакт NodeMCU, используйте номер контакта D5, и он будет преобразован в 14-ый GPIO-контакт ESP8266.

Установка дополнительных библиотек

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

Sketch-> Включить библиотеку -> Управление библиотеками
Sketch-> Include Library -> Manage Libraries

Затем найдите и установите последние версии следующих библиотек:

  • ArduinoHttpClient
  • Adafruit IO Arduino
  • Adafruit MQTT

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

Запись прошивки на ESP8266

Дальнейшие действия зависят от того, с какой ESP8266-платой вы работаете.

Вариант А – загрузка прошивки на ESP-12E

Запись новой прошивки на ESP-12E NodeMCU Kit делается очень просто, т.к. эта плата имеет встроенный программатор. Вам не понадобится никаких дополнительных подключений – вам нужно будет просто подключить плату к компьютеру и все.

Вариант Б – Загрузка прошивки на ESP-01

Загрузка кода на ESP-01 требует настройки последовательной коммуникации между ESP8266 и FTDI-программатором.

Важно: У большинства FTDI-программаторов есть перемычка для переключения между 5 и 3.3 вольтами. Обязательно убедитесь, что она стоит на 3.3 вольтах.. Чтобы настроить последовательную коммуникацию между ESP8266 и FTDI-программатором, подключите их друг к другу как показано на схеме ниже.

Чтобы настроить последовательную коммуникацию между ESP8266 и FTDI-программатором, подключите их друг к другу как показано на схеме ниже.

Вот контакты, которые нужно подключить друг к другу:

  • RX (ESP8266) –> TX (FTDI-программатор)
  • TX –> RX
  • CH_PD –> 3.3V
  • GPIO0 –> GND
  • VCC –> 3.3V
  • GND –> GND

Примечание: На схеме контакт GPIO0 подключен к GND, т.к. мы хотим загрузить на ESP8266 новый код. При нормальном использовании (т.е. когда вы не записываете на ESP8266 новую прошивку) контакт GPIO0 должен быть подключен к VCC.

«Раскирпичивание» FTDI-программатора на Windows-ПК

Если у вас возникли проблемы с установкой FTDI-драйверов на Windows 7/8/8.1/10, то ваш FTDI-программатор, скорее всего, «окирпичился». О том, как это исправить, можно посмотреть здесь.

Получаем VPS сервер бесплатно и навсегда

Здесь я не буду останавливаться подробно — Вы сможете без труда найти статьи как это сделать. Мне понравились VPS, которые предоставляет Oracle — они дают две виртуальных машины и у них 1Gb RAM в каждой, а для нашего проекта 512 может не хватить.

Активация аккаунта Oracle для получения бесплатной виртуальной машины требует международную карту Visa/MasterCard типа WORLD с балансом не менее 100 рублей (списанные средства будут возвращены, это необходимо для верификации карты и владельца). Проверить тип Вашей карты можно заранее на любом сервисе по BIN коду (первые 6 цифр карты), в строке Категория карты должно быть WORLD.

Могу сказать, что эта акция на бесплатные VPS действующая, я зарегистрировал такой аккаунт неделю назад (август 2020).

На этапе выбора образа для виртуалки выберите Ubuntu 20.04 или любой другой дистрибутив linux, если обоснованно считаете это необходимым.

На окончании этого шага Вы должны получить доступ по SSH к новой виртуалке и знать ее внешний (публичный) IP адрес (не пугайтесь, с настройками по умолчанию этот адрес не пингуется из интернета). Для новичков могу сообщить, что приватные (частные) IP адреса начинаются на 10. и выглядят, например, так 10.0.0.15 (есть и другие частные подсети, погуглите) Нам нужен не этот адрес, а другой, общедоступный IP-адрес.

Пример Arduino: мигалка

Чтобы убедиться, что ядро ESP8266 Arduino и NodeMCU правильно настроены, мы загрузим самый простой скетч – The Blink!

Для этого теста мы будем использовать встроенный светодиод. Как упоминалось ранее в этом руководстве, вывод платы D0 подключен к встроенному синему светодиоду и программируется пользователем. Отлично!

Прежде чем мы перейдем к загрузке скетча и игре со светодиодом, мы должны убедиться, что в Arduino IDE выбрана правильная плата. Откройте Arduino IDE и выберите пункт NodeMCU 0.9 (ESP-12 Module) в меню Инструменты → Плата.

Рисунок 9 – Выбор отладочного модуля NodeMCU в Arduino IDE

Теперь подключите ESP8266 NodeMCU к компьютеру через USB-кабель micro-B. Как только плата будет подключена, ей должен быть назначен уникальный COM-порт. На компьютерах с Windows это будет что-то вроде COM#, а на компьютерах Mac/Linux он будет в виде /dev/tty.usbserial-XXXXXX. Выберите этот последовательный порт в меню Инструменты → Порт. Также выберите скорость загрузки: 115200

Рисунок 10 – Выбор COM порта в Arduino IDE

Предупреждение

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

После выполнения всех настроек попробуйте пример скетча, приведенного ниже.

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

Рисунок 11 – Рабта тестового скетча Blink на ESP8266 NodeMCU