Первый взгляд на NodeMCU V3 Lua.

NodeMcu – платформа на основе чипа ESP8266 для создания различных устройств IoT. Это не дорогой модуль по сути состоит из платы ESP-12E  припаянной на шилд с UART-USB контроллером (CH340) и  выводима чипа. Версия 3 (V3) оснащена 4 Mb флешь-памяти и выводом microUsb.

Питание модуля :

Модуль может питаться несколькими способами :

  • В через USB-разъем или контакт VUSB(VU);
  • Подавать 5-12 В через контакт Vin;
  • 3,3В через вывод 3V.

Распиновка модуля :

Модуль V3 имеет 11 контактов ввода-вывода общего назначения. Помимо этого некоторые из выводов обладают дополнительными функциями:

  • D1-D10 – выводы с широтно-импульсной модуляцией;
  • D1, D2– выводы для интерфейса I²C/TWI;
  • D5–D8 – выводы для интерфейса SPI;
  • D9, D10 – UART;
  • A0 – вход с АЦП.

Что такое NodeMCU?

NodeMCU — открытый бесплатный проект на основе скриптового языка Lua. А по сути прошивка для ESP8266. Прошивка умеет исполнять Lua-скрипты как из последовательного UART порта (аналогично AT-командам) так и из внутренней flash памяти (выполняя скрипты). Lua скрипты сохраняются во Flash используя внутреннею файловою систему. Файловая система плоская, упрощенная. Т.е. без подкаталогов. Тем не менее – это круто. Не стоит забывать, что ESP8266 – это всего лишь микроконтроллер. Из скриптов так же можно получить доступ к файлам, читать и сохранять различную информацию.

NodeMCU модульная. Что с одной стороны позволяет наращивать функционал, а с другой собрать прошивку только из требуемых модулей, не расходуя понапрасну память.

На данный момент поддерживается очень большое количество датчиков, акселерометров , таймеры , модули шифрования и т.д  Прочесть подробней можно  на https://nodemcu.readthedocs.io/en/master/

https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_ru

Что такое язык Lua?

Lua –  скриптовый язык программирования, разработанный в подразделении Tecgraf. Интерпретатор языка является свободно распространяемым, с открытыми исходными текстами на языке Си. Интерпретируемый язык, который, как и большинство современных интерпретируемых языков, может хранить скомпилированные версии скриптов. Это позволяет увеличить скорость работы. Он не сложный, и если Вы уже программировали на любом языке, то Lua Вы изучите очень быстро. Есть некоторые особенности при работе с Lua на NodeMCU. В основном это связано с конечным объемом памяти микроконтроллера ESP8266.

Начнем ломать или с чего начать:

В итоге мы имеем 80 MHz 32-bit процессор Tensilica с Wi-FI,  I²C, SPI, UART, АЦП интерфейсами. Заливаем в него прошивку  NodeMCU с нужными модулями и потом пишем скрипт на Lua который выполняет контролер.

Прошивка:

Тут есть два пути. Сложный — скачать исходники и капаться с ними самому, что нам совсем не подходит.  Или воспользоваться сайтом конструктором который выдаст вам готовую прошивку. Например воспользуемся сайтом https://nodemcu-build.com 

  • file — файловая система.
  • GPIO — и в Африке GPIO.
  • node — системная библиотека.
  • net — думаю понятно из названия. Поддержка net.
  • timer — работа с таймерами и задержкой.
  • UART— поддержка UART.
  • WiFI — WiFI.

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

Теперь нам надо загрузить ее в плату. Идем  опять на наш любимый GitHub и качаем от туда NodeMSU flasher  для 32 битной или 64 битной Windows. Хочу заметить что для любителей Linux есть версия и для них 😉

Подключаем плату, в диспетчере устройств смотрим на каком COM порту она определилась.

В закладке  Config выбираем файл прошивки :

И запускаем прошивку, если после нажатия кнопки “Flash” процесс прошивки не начался (не появились МАС-адреса), нажмите кнопку “reset” на плате и повторите попытку.

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

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

  • Подсветка синтаксиса кода LUA и Python
  • Цветовые темы редактора кода: default, dark, Eclipse, IDEA, Visual Studio
  • Функции редакторов отмены/повтора
  • Автозаполнение Кода (Ctrl + Пробел).
  • Smart отправить данные на ESP8266 (без тупой отправить с фиксированной задержкой линии), проверить правильный ответ от ESP8266 после каждой линии.

Тут все просто, выбираем порт , выбираем скорость (у меня это 115200) нажимает Open и подключаемся к плате. Файловая система устроена так что первый скрипт при запуске модуля запускается init.lua (lua это просто расширение скрипта).  В левой стороне мы запишем одну тестовую строчку:

print("Yes it works!") 

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

Циклическая перезагрузка. Это случается если допустить критическую ошибку в скрипте который стартует автоматически. NodeMCU стартует, выполняет “глючный” скрипт, нарывается на критическую ошибку и уходит в перезагрузку. И так до бесконечности.

Ну а теперь конечно же самое главное, проверим как работает WiFI ))) Для начала добавим строчку в init.lua :

dofile(«main.lua»)

И создадим новый скрипт с таким название :

--WiFi Settup
wifi.setmode(wifi.STATION)
local cfg={}
cfg.ssid="MyWiFi"
cfg.pwd="MyWiFiPassword"
wifi.sta.config(cfg)
cfg = nil
print(wifi.sta.getip())
collectgarbage()

collectgarbage()  — сборщик мусора в языке Lua, то есть это команда очищает память от не используемых переменных и т.д. Рекомендуется использовать в конце каждого скрипта, у контролера память не резиновая и быстро заканчивается (

wifi.setmode(mode[, save])  wifi.STATION— подключается к WiFI.  wifi.SOFTAP —  точка доступа.Это позволит вам увидеть устройство в списке WiFi сетей (если Вы не скрыть SSID, конечно). NodeMCU получит локальный IP-адрес 192.168.4.1 и назначит вашему компьютеру следующий доступный IP-адрес, например 192.168.4.2.

local cfg={}  — локальный массив cfg, замете в Lua не надо писать объем массива. Он может меняться как вам надо  ограничиваясь только памятью. local указывает что эта переменную можно использовать только в этом скрипте.

wifi.sta.getip()  — возвращает IP-адрес, маску сети, адрес шлюза как строку, например «192.168.0.111», возвращает nil , если IP-адрес = «0.0.0.0».

Самая замечательная возможность поднять свой сервер :

print("Start Web")
sv = net.createServer(net.TCP) //Создать TCP сервер
sv:listen(80, function(conn) //Слушаем 80 порт
conn:on("receive", receiver) // При событие  подклчение
conn:send("<h1> ESP8266 Web Server</h1>") // Отправляем  <h1> ESP8266 Web Server</h1>
end)
collectgarbage()

Мы затронули самую верхушку возможностей этой платы ))) На этом и закончим обзорную статью…