В этот раз попробуем освоить программирование модулей ESP8266 на языке lua. Возможно на данный момент это не такая популярная тема но тем не менее мне кажется что она имеет смысл и практическое значение ввиду дешевезны данных модулей при тех возможностях которыми они обладают. Их также можно программировать на языке Си, используя SDK или среду разработки Ардуино и может быть действительно это может сэкономить много ресурсов при должном умении, однако же я всё таки иногда бывают такие случаи когда более высокоуровневый язык окажется более предпочтительным. Представьте допустим какой то сервер возвращает нам данные в формате json а это может быть очень сложная древовидная структура с которой очень просто работать на языках типа python или javascript т.к. json это по сути есть объект в языке javascript. На си же мы будем работать с этим не как с объектом а как с массивом символов что будет очень проблематично и даже если попытаться как то с этим работать то не факт что получиться более оптимально использовать ресурсы микроконтроллера. Для программирования модуля на javascript есть прошивка espruino однако же автор сделал оверклокинг из за чего моя самодельная конструкцияс этой прошивкой перегревалась и не стартовала. Возможно это произошло из за особенностей обвязки или что то вроде того и готовая плата NodeMCU будет лишена данного недостатка но оверклокинг это всё таки попытка получить от микроконтроллера больше чем он должен выдавать. С микропитоном тоже возникли некоторые трудности на практике. А именно по каким то непонятным причинам начал глючить компьютер к которому подключался модуль с обвязкой и прошивкой для микропитона, возможно это тоже как то связано с самодельной обвязкой но единственное (из 3х проверенных) что нормально заработало это прошивка NodeMCU с интерпретатором lua. На официальном сайте есть подробная пошаговая инструкция о том как начать работать с данной прошивкой https://nodemcu.readthedocs.io/en/dev/getting-started/ как её собрать, загрузить и что делать дальше. В общем там всё очень подробно расписано, единственный минус только в том что не английском языке. Собрать свою кастомную прошивку можно либо у себя локально на компьютере либо воспользовавшись облачным сервисом. Облачный сервис удобен тем что для сборки прошивки не понадобиться ничего устанавливать на свой компьютер. Чтобы перейти на страницу сборки, можно кликнуть по ссылке на оффициальном сайте

Далее указать почту на которую придет прошивка после того как соберется на сервере.
Ниже нужно указать необходимые модули которые будут включены в прошивку. Лучше не включать в неё лишние модули т.к. они занимают место во флеш памяти и лучше выбирать только то что необходимо. Возле каждого модуля есть ссылочка на его описание в документации.
После, чтобы начать сборку нужно нажать кнопку "Start your build". Также рядом есть кнопка для отправки доната.
После того как прошивка соберется на, указанную выше почту, придут две ссылки для скачивания прошивок. Лучше выбрать ту что с окончанием float но для экономии памяти можно
выбрать с integer если не будет необходимости работать с дробными числами.
Существует некоторое колличество способоз загрузить прошивку в модуль.
Например можно это сделать через esptool.
есть также вариант работающий на Node.js но питоновый вариант более полный
питон можно скачать с оффициального сайта и установить его не трудно
после установки можно проверить наличие питона вписав команду python --version
также вместе с питоном установиться пакетный менеждер pip
через этот пакетный менеджер можно установить esptool командой pip install esptool
Далее можно загружать прошивку. Для этого модуль д.б. соответствующем образом
обвязан.
у него д.б. перемычка
и его надо подсоединить к порту через usb-uart переходник
+ на ПК д.б. соответствующие драйвера об этом тоже есть отдельное видео.
Если всё готово то в командной строке можно очистить флеш память микроконтроллера командой
erase_flash
у меня например она выглядела так
esptool --port COM10 erase_flash
а загрузить прошивку командой
write_flash
у меня например она выглядела так
esptool --port COM10 --baud 9600 write_flash -fm dio 0x00000000 C:\Users\firmware\nodemcu-release-10-modules-2025-06-30-07-59-59-float.bin
Только указать свой COM порт (скорее всего это будет на COM10 (узнать точно можно в диспетчере устройств или в среде Ардуино)) и правильное расположение прошивки. После того как прошивка загружена можно отключить модуль, снять перемычку. И подключить обратно
чтобы начать с ним работать. Чтобы работать с ним можно воспользоваться например утилитой NodeMCU-Tool для работы которой нужно установить на компьютере Node.js
https://nodejs.org/en/download Его также не сложно установить как и питон. С Node.js также идет в комплекте свой пакетный менеджер npm через который можно установить NodeMCU-Tool командой
npm install nodemcu-tool -g
верифицировать установку можно командой
nodemcu-tool --version
Если установка прошла успешно то теперь то наконец то можно начать
писать программы на языке луа и загружать в модуль
допустим мы её уже написали. Чтобы её загрузить можно воспользоваться командой
nodemcu-tool upload --port=COM10 C:\Users\firmware\helloworld.lua
где указать свой номер порта и путь до скрипта на языке луа
скрипт можно писать в обычном текстовом редакторе после чего просто загружать
После загрузки можно его запустить командой
nodemcu-tool run --port=COM10 helloworld.lua
удалить командой
nodemcu-tool remove --port=COM10 blink.lua
а ещё есть команда для просмотра всех загруженных в модуль скриптов
и свободного места на модуле
nodemcu-tool --port=COM10 fsinfo
На модуле имеется простая файловая система с одной корневой папкой
Давайте теперь рассмотрим скрипт мигалки.
ledPin = 4
-- set mode to output
gpio.mode(ledPin,gpio.OUTPUT)
ledState = 0
-- timer loop
tmr.create():alarm( 1000, tmr.ALARM_AUTO, function()
ledState = 1 - ledState
if ledState == 1 then
gpio.write(ledPin, gpio.HIGH)
else
gpio.write(ledPin, gpio.LOW)
end
end)
Вначале создаем переменную в которую записываем номер пина
ledPin = 4
к которому подключен встроенный на плату светодиод
Далее настраиваем этот пин на выход
gpio.mode(ledPin,gpio.OUTPUT)
добавляем ещё одну переменную для состояния выхода.
ledState = 0
И делаем таймер который будет срабатывать каждую секунду
tmr.create():alarm( 1000, tmr.ALARM_AUTO, function()
т.е. как бы аналог основного цикла loop в Arduino
в теле котого делаем инверсию переменной состояния.
ledState = 1 - ledState
Далее можно было бы просто эту переменную
записывать в функцию выхода но для наглядности показано ветвление на языке луа
и далше в зависимости от состояния переменной ledState
gpio.write(ledPin, gpio.HIGH)
gpio.write(ledPin, gpio.LOW)
будет зажигаться или гаснуть светодиод
делается это функцией write в которую передается номер пина и его состояние.
В принципе lua это не сложный язык который легко освоить. Есть примеры в документации NodeMCU а также много уроков в интернете по данному языку.
Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g