NodeMCU — это микроконтроллер на базе ESP8266. Плата имеет на борту WiFi модуль и позволяет управлять различными электронными схемами и устройствами, а так же разворачивать web-сервисы на различных портах, например компактная страничка на 80ый порт.
TCP подключение к выбранному порту можно использовать для управления микроконтроллером путем отправки команд.
Плата и её распиновка представлены на рисунке 1.
Общая информация
Для подключения к компьютеру используется Micro-USB кабель.
Питание платы — 5В, в отличии от контроллера ESP — 3.3В, что позволяет использовать для питания блоки питания (зарядки) смартфонов. Имеются выходы питания как на 3.3, так и на 5 вольт.
Микропроцессор имеет тактовую частоту 80 МГц. На плате имеется 4 мегабайта Flash-памяти и 11 портов ввода-вывода общего назначения.
Порты могут быть использованы в качестве:
- D9, D10 — UART;
- D1, D2 — I²C;
- D1-D10 — выходы с ШИМ (PWM);
- A0 — аналоговый вход с АЦП.
Размеры 3 на 6 сантиметров.
Первое подключение
Для работы с устройством потребуется драйвер для чипа CP2102. Скачать его можно по ссылке с официального сайта Silicon Labs (Software & Tools -> CP210x Windows Drivers).
На рисунке 2 изображено окно диспетчера устройств при отсутствии драйвера.
Нажав правой кнопкой мыши по устройству CP2102 и выбрав пункт меню «Обновить драйвер» откроется окно в котором следует выбрать пункт «Найти драйверы на этом компьютере«. Теперь требуется указать директорию в которую был распакован скачанный архив с драйверами и нажать кнопку «Далее«.
Окно диспетчера устройств с установленным драйвером представлено на рисунке 3.
Обратите внимание и запомните указанный в скобках номер COM порта (может меняться).
Прошивка микроконтроллера для работы с lua
Иногда случаются ситуации, когда микроконтроллер NodeMCU поставляется без фирменной прошивки, исправить это можно с помощью программы ESP8266Flasher. Скачать программу для прошивки можно с github репозитория (в директории Win64/Release расположен бинарный файл).
Прошивку можно собрать на сайте nodemcu-build.com. В процессе можно выбрать различные модули для сборки. По завершению сборки на почту должно прийти письмо со ссылками на загрузку.
На рисунке 4 представлен интерфейс первых трех вкладок программы ESP8266Flasher.
В первой вкладке (Operation) необходимо выбрать COM порт который был обозначен в диспетчере устройств. Во второй вкладке (Config) требуется указать адрес до integer файла. В третьей вкладке (Advanced) стоит проверить скорость передачи (Baudrate) — у меня это 115200 (может отличатся на различных контроллерах и вызывать сбои в работе ESPlorer).
После завершения настроек можно нажать кнопку Flash в первой вкладке (Operation).
В случае возникновения ошибок можно обратится к пятой вкладке (Log).
Работа в программе ESPlorer
Исходные тексты программы можно скачать с github репозитория. Релизную сборку можно загрузить по ссылке.
Интерфейс программы представлен на рисунке 5.
В левой части расположено окно для работы с исходными тестами скриптов на lua, а в правой — интерфейс подключения с терминалом.
Для подключения требуется выбрать нужный COM порт (номер можно уточнить в диспетчере устройств) из выпадающего списка вверху и нажать кнопку Open. После этого необходимо дважды нажать кнопку RST для перезагрузки NodeMCU.
В случае если в правой части выводятся «кракозябры» необходимо попробовать изменить скорость записи (Baudrate) в выпадающем списке справа от кнопки Open. На рисунке 5 выбрано значение 115200.
Для загрузки скрипта на устройство используется комбинация клавиш CTRL+S.
Простой вариант lua скрипта на NodeMCU
Входной точкой для программы на NodeMCU с использованием lua является файл с названием init.lua. Так как NodeMCU уходит в перезагрузку при обнаружении ошибки во время исполнения скрипта (неизвестная функция, опечатка, незакрытая скобка и т.д.) необходимо выполнять задержку в файле init.lua, и по истечению задержки загружать пользовательский скрипт.
Пример простого init.lua скрипта:
print("Wait. . .")
mytimer = tmr.create()
mytimer:register(10000, tmr.ALARM_SINGLE, function(t)
mytimer:unregister();
print("Starting. . .\n")
dofile("main.lua")
end)
mytimer:start()
В примере выше функция print используется для вывода сообщений в терминал ESPlorer. На строках 2 и 3 создается таймер и регистрируется callback функция, которая сработает единожды через 10000 миллисекунд (10 секунд). В callback функции выводится сообщение и вызывается выполнение файла main.lua. На последней строке запускается таймер.
Для теста файл main.lua может содержать одну строку print(«main.lua»)
В результате по истечению 10 секунд происходит загрузка пользовательского скрипта main.lua, в случае наличия критических ошибок времени достаточно для загрузки исправленной версии на устройство.
Иногда в процессе отладки могут возникнуть ошибки «out of memory» которые можно разрешить перезагрузкой NodeMCU (двойное нажатие по кнопке RST в интерфейсе ESPlorer)