Рубрики
HADRWARE SOFTWARE Ну почти "Умный дом"

NodeMCU + lua

В данной заметке будет рассмотрена первичная настройка платы NodeMCU для работы с lua при помощи программ ESP8266Flasher и ESPlorer.

NodeMCU — это микроконтроллер на базе ESP8266. Плата имеет на борту WiFi модуль и позволяет управлять различными электронными схемами и устройствами, а так же разворачивать web-сервисы на различных портах, например компактная страничка на 80ый порт.
TCP подключение к выбранному порту можно использовать для управления микроконтроллером путем отправки команд.

Плата и её распиновка представлены на рисунке 1.

Рисунок 1 — Плата NodeMCU и её распиновка

Общая информация

Для подключения к компьютеру используется 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 изображено окно диспетчера устройств при отсутствии драйвера.

Рисунок 2 — Окно диспетчера устройств при отсутствии драйвера

Нажав правой кнопкой мыши по устройству CP2102 и выбрав пункт меню «Обновить драйвер» откроется окно в котором следует выбрать пункт «Найти драйверы на этом компьютере«. Теперь требуется указать директорию в которую был распакован скачанный архив с драйверами и нажать кнопку «Далее«.

Окно диспетчера устройств с установленным драйвером представлено на рисунке 3.
Обратите внимание и запомните указанный в скобках номер COM порта (может меняться).

Рисунок 3 — Окно диспетчера устройств с установленным драйвером

Прошивка микроконтроллера для работы с lua

Иногда случаются ситуации, когда микроконтроллер NodeMCU поставляется без фирменной прошивки, исправить это можно с помощью программы ESP8266Flasher. Скачать программу для прошивки можно с github репозитория (в директории Win64/Release расположен бинарный файл).

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

На рисунке 4 представлен интерфейс первых трех вкладок программы ESP8266Flasher.

Рисунок 4 — Интерфейс первых трех вкладок программы ESP8266Flasher

В первой вкладке (Operation) необходимо выбрать COM порт который был обозначен в диспетчере устройств. Во второй вкладке (Config) требуется указать адрес до integer файла. В третьей вкладке (Advanced) стоит проверить скорость передачи (Baudrate) — у меня это 115200 (может отличатся на различных контроллерах и вызывать сбои в работе ESPlorer).
После завершения настроек можно нажать кнопку Flash в первой вкладке (Operation).

В случае возникновения ошибок можно обратится к пятой вкладке (Log).

Работа в программе ESPlorer

Исходные тексты программы можно скачать с github репозитория. Релизную сборку можно загрузить по ссылке.
Интерфейс программы представлен на рисунке 5.

Рисунок 5 — Интерфейс программы ESPlorer

В левой части расположено окно для работы с исходными тестами скриптов на 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)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.