В этот раз попробуем освоить программирование модулей 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 если не будет необходимости работать с дробными числами.
Существует некоторое колличество способоз загрузить прошивку в модуль.
есть также вариант работающий на 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
Если установка прошла успешно то теперь то наконец то можно начать
писать программы на языке луа и загружать в модуль
допустим мы её уже написали. Чтобы её загрузить можно воспользоваться командой
Недорогие WIFI модули esp8266 отлично подходят для создания на их основе дистанционных игрушек. Существуют и другие варианты но вариант с esp8266 интересен тем что в данном модуле уже имеется много функций, реализация которых, в других случаях, потребовала бы применения большего количества модулей, деталей что привело бы к увеличению стоимости и увеличению количества работы которую нужно проделать чтобы получить результат. У данных модулей имеется встроенная СВЧ антенна, надежный защищенный высокоскоростной проверенный WIFI приемопердатчик, некоторое количество пинов GPIO которого вполне может хватить на реализацию некоторого количества каналов, также имеется довольно таки относительно не слабый процессор и нормальное количество памяти для реализации и всё это на вполне компактной плате и за небольшую стоимость. Имеются конечно же и недостатки. Например могут возникнуть проблемы с управлением сервомотором, имеется кратковременное появление лог. 1 при подаче питания, управление м.б. не очень оперативным из за некоторого количества времени необходимого на установление соединения. Но в челом это весьма неплохой модуль для своей цены и если использовать его в радиоуправляемых игрушках его функций более чем достаточно. В качестве пульта управления можно использовать прибор типа смартфона, планшета, ноутбука и т.д. с WIFI если настроить модуль для роботы в режиме точки доступа. Для питания модуля можно использовать понижающий стабилизатор на 3.3В который запитывается от повышающего стабилизатора на 5В поторый запитывается от аккумулятора на 3.7В. Сорвомотор в т.с. можно запитать от 5В с повышающего модуля а драйвер двигателя напрямую от аккумулятора. Такая система показалась хорошей на практике т.к. эксперименты с батарейками и радиоуправляемым по WIFI корабликом, показали что когда батарейки садятся, может возникнуть такая неприятная вещь как остановка кораблика посреди пруда и необходимость лезть в грязную холодную воду чтобы его достать. А например повышающий модуль на 5В может напр. долго стабильно и надежно вытаскивать энергию из акумулятора даже когда он находиться под нагрузкой + некоторые готовые модули имеют встроенную светодиодную индикацию разряда батареи что может быть весьма полезным. В общем готовая схема радиоуправляемой игрушки если это напр трактор м.б. примерно такой:
В данном случае я решил сделать драйвер управления двигателем на транзисторах которые часто используются в импортных кинескопных телевизорах и по этому такие такие транзисторы можно достать практически бесплатно. Внешний вид трактора получился таким:
Большие колеса сделаны из консервных банок, маленькие это подшипники прикрученные к стойкам. Стойки сразу приделаны к сервомотору и т.о. трактор может разворачиваться очень круто, практически на месте, при крайних положениях сервомотора. Скетч для управления трактором это скетч для управления ховеркрафтом, о котором уже была речь в данном блоге, но с небольшими переделками:
О том как запрограммировать данный модуль через Arduino IDE есть отдельная статья - https://electe.blogspot.com/2023/06/esp8266-arduino-ide.html. После загрузки скетча нужно будет отключить перемычку (см. по ссылке выше) подать питание (при этом моторы на некоторое время сработают (особенность модуля ESP8266)) после можно включить WIFI на смартфоне, найти WIFI сеть модуля ESP8266 и подключиться к ней по указанному в скетче логину и паролю. После можно через браузер на смартфоне (напр. гугл хром) зайти в веб интерфейс трактора, набрав его IP адрес (192,168,4,22) в адресной строке браузера и запустив загрузку страницы. Управлять трактором можно используя ползунки в открывшемся веб интерфейсе. Каждый ползунок отвечает за свой мотор. Процесс управления можно увидеть на видео:
Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g
Одной из основных причин ограничивающих скорость передвижения транспортных средств на поверхности земли, является трение. Основной идеей создания парящего на воздушной "подушке" над поверхностью, транспорта является - уменьшение трения между поверхностью и транспортным средством. Такой способ увеличения скорости можно использовать не только для больших транспортных средств перевозящих людей но и для небольших беспилотных дистранционно управляемых устройств. Используя пенопласт, мощные авиамодельные электродвигатели с винтами, легкие модули и аккумуляторы можно сделать беспилотный ховеркрафт на воздушной подушке с дистанционным управлением. Практика показывает что работать будет такая даже такая незамысловатая конструкция как плоский кусок пенопласта с дыркой посередине диаметром с пропеллер, внутрь которой данный пропеллер с двигателем помещен чтобы создавать воздушную подушку под днищем плоского куска пенопласта. В качестве модуля радиоуправления можно использовать например модуль ESP8266 т.к. он небольшой, легкий, совмещает в себе радиомодуль и микроконтроллер и в качестве пульта управления к нему можно использовать смартфон, компьютер или какое либо ещё устройство которое может быть WIFI хостом. Для управления двигателями можно использовать два logic level MOSFET транзистора с обратными диодами, а также один сервомотор который будет поворачивать тяговый двигатель с пропеллером, двигатель создающий воздушную подушку будет закреплен неподвижно.
Рисунок 1 - Схема ховеркрафта на воздушной подушке
Запитывается схема от небольшого литий-полимерного аккумулятора с напряжением 3.7В от которого питаются двигатели. Далее это напряжение повышается небольшим повышающим модулем до 5В для запитки сервомотора после напряжение подается на линейный стабилизатор до 3.3В для питания модуля ESP8266. О том как запрограммировать данный модуль через Arduino IDE есть отдельная статья - https://electe.blogspot.com/2023/06/esp8266-arduino-ide.html
Скетч можно скопировать из текстового поля:
После загрузки скетча нужно будет отключить перемычку (см. по ссылке выше) подать питание (при этом моторы на некоторое время сработают (особенность модуля ESP8266)) после можно включить WIFI на смартфоне, найти WIFI сеть модуля ESP8266 и подключиться к ней по указанному в скетче логину и паролю. После можно через браузер на смартфоне (напр. гугл хром) зайти в веб интерфейс ховеркрафта, набрав его IP адрес в адресной строке браузера и запустив загрузку страницы. Управлять ховеркрафтом можно используя ползунки в открывшемся веб интерфейсе. Каждый ползунок отвечает за свой мотор. Процесс управления ховеркрафтом можно увидеть на видео:
Адрес биткоин кошелька для поддержки канала - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g
Популярные и недорогие WIFI модули ESP8266 можно использовать для создания, на их основе, системы дистанционного управления например самодельными кораблями. В качестве пульта управления для такого корабля можно использовать например смартфон. Дистанционно управляемый кораблик, также как и дистанционно управляемый танк, может иметь простую в реализации систему поворота путем создания ассиметричной тяги с разных сторон т.е. например если мотор с левой стороны корабля работает быстрее чем мотор с правой то корабль поворачивает на право. Если правый быстрее то налево. Моторы можно расположить по бокам и приделать к ним гребные винты или колеса. Т.к. моторы будут работать по воде а не по суше то их не обязательно дополнять редукторами для усиления и снижения оборотов. Для управления моторами можно использовать драйвер l293d или аналогичный (мотор, при этом, должен соответствовать драйверу по мощности т.е. не потреблять больше тока и напряжения чем может выдать драйвер) чтобы драйвер не сгорел. Проверить потребление тока мотором можно соединив его последовательно с амперметром и источником питания. Для драйвера L293D этот ток должен быть не боле 600мА. Для того чтобы WIFI модуль ESP8266 работал без перебоев (например при возникновении большой нагрузки на моторы) и не сгорел при превышении напряжения питания, питание на него следует подавать со стабилизатора напряжения с конденсатором для сглаживания пиков просадки и скачков напряжения. Электрическая схема кораблика, с данным модулем, будет не сложная:
Для того чтобы было удобнее управлять корабликом, применены специальные стили поворачивающие ползунки вертикально.
Один ползунок управляет одним мотором, второй ползунок управляет вторым мотором. Если ползунки не трогать то они находятся по середине и моторы не крутятся. Поднятием ползунка можно крутить мотор в одну сторону со скоростью пропорциональной уровню поднятия. Опусканием крутить в другую сторону со скоростью пропорциональной уровню отпускания. Простого способа сделать один джойстик для двух двигателей стандартными средствами HTML найти не получилось по этому пришлось использовать два ползунка. Так HTML код получается коротким, при желании можно модифицировать код и сделать более удобный орган управления. Однако ползунки всё таки поддерживаются многими браузерами а также работают на смартфонах и для их использования не надо писать много кода поэтому были выбраны они. В скетче есть закомментированные строки для случая если например понадобиться (зачем то) управлять корабликом через роутер, есть строка для задания идентификатора точки доступа без задания пароля а также строка для вывода ip адреса в последовательный порт. IP адрес задается в строке
IPAddress local_IP(192,168,4,22);
После того как скетч загружен в модуль (о том как это сделать (загрузить скетч в модуль (а также настроить среду разработки Arduino IDE)) см. первую статью о модуле ESP8266 https://electe.blogspot.com/2023/06/esp8266-arduino-ide.html) можно подать питание на модуль (3.3В (если это не специальная плата с модулем и специальным стабилизатором для него и выводом для подачи другого напряжения)) и после того как WIFI сервер, на этом модуле, запуститься (что, как правило, происходит быстро) можно будет включить поиск WIFI точек на смартфоне и найти точку с идентификатором который был задан в строке
const char* ssid = "id";
Вместо id можно задать другое название например THE_GREAT_BOT или что в этом роде. Далее чтобы подключиться к точке доступа нужно будет ввести пароль который был указан в строке:
const char *password = "987654321"; // пароль обязательно должен быть длиннее 8ми символов
пароль обязательно должен быть длиннее 8ми символов т.к. иначе программа не заработает. Пароль можно сделать посложнее чтобы потенциальным злоумышленника было сложнее угнать великолепный самодельный игрушечный радиоуправляемый по WIFI кораблик. Далее для доступа к кораблику нужно открыть браузер на смартфоне и ввести в его адресной строке IP адрес кораблика который был указан в строке:
IPAddress local_IP(192,168,4,22);
Номер порта можно не указывать если он 80. После подключения к кораблику должен появиться незамысловатый интерфейс с двумя ползунками для управления. Подробнее про работу скетча можно узнать статьи о шаблоне для ESP8266 по ссылке наверху данной страницы. Тест кораблика можно посмотреть на видео:
testtesttesttestvideohere
Тема радиоуправления является весьма интересной и востребованной однако существует множество других интересных и востребованных тем связанных с электроникой, затронутых в данном блоге. Это например: машинное зрение, бесколлекторные моторы и их контроллеры, сварочные аппараты, аппарат наплавления, 3д сканер, 3д принтер и д.р. ЧПУ станки, всевозможные роботы (напр. BEAM роботы или роботы на ардуине, распберри и т.д.), уроки по микроконтроллерам, металлоискатель, гаусган, бесплатная энергия, всевозможные варианты дистанционного управления по средствам звука, света и т.д. и многое другое. Принять участие в выборе приоритетной темы предлагается посредством криптодонатинга. Для этого нужно прислать некоторое количество сатошей по адресу:
bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g
После чего прислать название темы + номер транзакции или номер отправителя например в сообщении к данной статье, в комментарии на ютуб канале или на почту: freedms@yandex.ru. Можно также, для этого, воспользоваться группой вконтакте или сообщением. Те темы которые будут набирать больше сатошей будут более приоритетными. Темы естественно д.б. по тематике блога и реально реализуемыми т.е. например космический корабль вряд ли будет реализован, в рамках данного блога, максимум что можно сделать по теме космического корабля - это словесно описать то как его можно было бы реализовать при наличии достаточного количества ресурсов и др. возможностей по его созданию. Проверка самодельного космического корабля на практике естественно не будет осуществлена, если конечно для этого не будет прислано достаточно сатошей в донате. Сатоши могут быть добыты различными способами. Например обменяны на другие валюты или товары, намайнены или добыты с биткоин кранов. Хотя последний вариант наименее прибыльный из всех, всё же он может сработать если желающих делать донаты будет мало или не будет совсем т.к. даже одна сатоша больше чем ноль сатош. При использовании биткоина важно соблюдать меры предосторожности. По возможности использовать холодные кошелки и ни в коем случае не забывать пароль от кошелька (лучше записать его на некотором количестве разных мест) т.к. надежность криптоалгоритмов биткоина очень высока.
WIFI модуль ESP8266 может использоваться во множестве различных проектов. При написании кода для загрузки в данный модуль, можно заметить что некоторые его части пишутся повторно а также то что их приходиться вспоминать или искать какой нибудь пример. Поскольку основной и наиболее интересной функцией у данного модуля является WIFI то чаще всего он будет использоваться именно из за наличия этой функции для её использования поэтому наиболее полезным примером программы, для данного модуля, будет программа использующая WIFI. В качестве примера можно реализовать например устройство пропорционального управления двумя светодиодами и получения от модуля двух значений в асинхронном режиме т.е. без перезагрузки страницы с клиентской частью приложения для управления этим устройством. Асинхронный способ будет более быстрый и удобный чем синхронный и поэтому он более предпочтителен а также для его реализации существует специальная библиотека. Светодиоды к модулю можно припаять например к пинам GPIO4 и GPIO5 (которые скорее всего будут указаны на плате) через резисторы с сопротивлением 560 Ом.
Меньше, сопротивление этих резисторов, делать не надо т.к. нагрузочная способность пинов низка и они могут перегореть если, в достаточной мере, не ограничить ток.
В начале скетча подключаются необходимые заголовочные файлы с конструкцией, для препроцессора, которая выберет файлы в зависимости от того какой модуль программируется ESP8266 или ESP32:
Ниже нужно ввести иденитификатор, пароль и настройки WIFI сети. Если модуль будет работать в режиме точки доступа то можно придумать любой идентификатор (который будет отображаться как название WIFI сети при поиске её на смартфоне) и пароль который должен быть не короче 8ми символов, иначе идентификатор и пароль установяться по умолчанию. После того как сеть была найдена и к ней успешно произведено подключение по паролю, можно зайти в браузер и ввести IP адрес такой же какой установлен в скетче и попасть на страницу управления модулем. IP адрес указан в переменной local_IP. Чтобы помимо IP адреса, не было необходимости вводить ещё и номер порта, можно создать объект AsyncWebServer на порту 80:
В следующей конструкции вводиться html код web страницы:
Данная конструкция является самым удобным способом вставить html код в ардуино скетч. В тэге body есть два поля ввода яркостей светодиодов. Яркости имеют диапазон от 0 до 255 т.е. диапазон ШИМа. Можно сделать ограничение на стороне клиента т.е. в html коде или на стороне сервера. Для простого шаблона это не принципиально важно поэтому тут его просто нет. Также есть кнопка для передачи и приема данных от модуля + два блока для вывода информации полученной от модуля. В тэге script происходит получение доступа к данным элементам интерфейса по их идентификаторам указанным в атрибутах id. На кнопку добавлен обработчик клика в котором создается GET запрос с яркостями светодиодов, полученных из текстовых полей. Данный GET запрос передается в функцию fetch которая также принимает ответ от сервера в формате json. Принятый json ответ является обычным javascript объектом (как и любой другой json ответ) поэтому получать данные из него можно через точку. Данный способ взаимодействия с сервером происходит асинхронно т.е. без перезагрузки web страницы что удобно т.к. происходит быстрее, чем в синхронном режиме, и данные текстовых полей (и любого другого прогресса на странице (если он, конечно же, есть)) не потеряются, в результате перезагрузки.
В начале функции setup настраиваются: последовательный порт, пины вывода, точка доступа:
Далее имеется обработчик выдающий основную web страницу при первом заходе на неё или её перезагрузке:
После есть обработчик срабатывающий после нажатия на кнопку отправки данных на сервер и получения от него ответа:
Данный обработчик срабатывает в ответ на запрос страницы /update. В нем есть проверка на наличие параметра led1 а также проверка на наличие параметра led2 (т.е. параметров содержащих ШИМы светодиодов) в GET запросе. Есть также получение значений параметров, преобразование их в тип int (приходят они в виде строки) и вывод принятых ШИМов (через функцию analogWrite) на пины к которым подключены светодиоды. После формируется ответ серверу в виде строки содержащей информацию в формате json с двумя параметрами с простыми цифрами которые можно, в последствии, заменить какой либо другой полезной информацией. В конце данная строка передается в фомате json на клиентскую часть, клиентская часть выводит цифры на экран.
В конце функции setup() запускается сервер. В основном цикле т.е. функции loop() пусто.
Посмотреть тест модуля с данным скетчем + данную статью в видеоформате можно на видео:
Недорогой и компактный WIFI модуль ESP8266 можно использовать для управления по WIFI каким либо прибором или получением от него каких либо данных. Данный модуль лучше подойдет для каких нибудь не сложных действий, например включение лампочки по WIFI, чем более современные и сложные ESP32 т.к. имеет более низкую (хотя и не значительно) стоимость а также более компактные (тоже не сильно но всё таки) размеры. Существует некоторое количество вариантов таких модулей. Например ESP-12-F -это один из минималистичных вариантов с антенной, светодиодом, экранирующим корпусом и некоторым количеством выводов. Для того чтобы загрузить в такой модуль скетч можно собрать схему например такую как на фотографии:
На фотографии есть резистор с сопротивлением 100 Ом внизу на перекрученных проводах, он соединяет пин GPIO0 и GND, это сделано для того чтобы перевести модуль в режим программирования. В этот режим модуль перейдет после подачи питания при соединенных GPIO0 и GND. Эти пины можно соединить также обычной перемычкой, однако же резистор создает страховку на случай неправильного соединения. Для того чтобы модуль заработал в обычном рабочем, не загрузочном, режиме, нужно подать питание или перезагрузить модуль при разъединенных пинах GPIO0 и GND. Для того чтобы иметь возможность писать, компилировать и загружать программы, в данный модуль, через Arduino IDE, нужно сначала эту среду настроить. Ниже будут инструкции по настройке, они подходят для Arduino IDE версии 1.8.19 но могут не подходить для других версий. Чтобы настроить Arduino IDE, для работы с модулями ESP8266, нужно её открыть, выбрать пункт "настройки" во вкладке файл:
В открывшемся окне надо найти поле "Дополнительные ссылки для менеджера плат" и если оно пустое то вставить в него ссылку:
для модуля ESP32 (об этом есть отдельная статья в данном блоге) то нужно нажать на кнопку которая находиться справа от этого поля:
и в открывшемся окне дописать данную ссылку в дополнении к тем или той которая уже имеется в данном окне:
После нужно нажать "ОК" на данном окне и том которое появилось до него чтобы перейти в основную часть программы где теперь нужно выбрать пункт "Менеджер плат" в пункте показывающем текущую выбранную плату не вкладке "инструменты":
В открывшемся окне найти пакет ESP8266 чему поможет строка поиска сверху. После того как пакет найден его можно установить нажав соответствующую кнопку с надписью "установка":
После установки можно нажать кнопку "закрыть" в текущем окне, чтобы перейти в основное. В основном окне, на вкладке "инструменты" в пункте "плата" выбрать "Generic 8266 Module" чтобы можно было загружать скетч в модуль ESP-12-F (по крайней мере с моим модулем это сработало):
Чтобы проверить что всё работает, можно открыть пример мигалки:
Или выбрать другой пример, после того как он откроется можно замкнуть GPIO0 на GND на модуле, воткнуть его в USB порт, выбрать правильный COM порт в настройках и нажать кнопку вгрузить:
Другие настройки д.б. примерно такими:
Они могут отличаться и если загрузка не удается то можно попробовать их поменять. После успешной загрузки можно вынуть переходник из USB порта. Разомкнуть GPIO0 от земли. Подать питание 3.3в на модуль и увидеть как мигает встроенный на плату светодиод: