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()
Мы затронули самую верхушку возможностей этой платы ))) На этом и закончим обзорную статью…