Андрей Смирнов
Время чтения: ~16 мин.
Просмотров: 23

ESP8266 на девборде NodeMCU v3 и прошивка интерпретатора JS Espruino.

NodeMcu – платформа на основе ESP8266 для создания различных устройств интернета вещей (IoT). Модуль умеет отправлять и получать информацию в локальную сеть либо в интернет при помощи Wi-Fi. Недорогой модуль часто используется для создания систем умного дома или роботов Arduino, управляемых на расстоянии. В этой статье мы рассмотрим описание платы, отличие версий и распиновку последней версии модуля Esp8266 NodeMcu v3. Также мы коротко рассмотрим язык Lua, на котором нужно писать программы для NodeMcu.

Описание ESP8266 NodeMcu v3

nodemcu-v2.jpg

Технические характеристики модуля:

  • Поддерживает Wi-Fi протокол 802.11 b/g/n;
  • Поддерживаемые режимы Wi-Fi – точка доступа, клиент;
  • Входное напряжение 3,7В – 20 В;
  • Рабочее напряжение 3В-3,6В;
  • Максимальный ток 220мА;
  • Встроенный стек TCP/IP;
  • Диапазон рабочих температур от -40С до 125С;
  • 80 МГц, 32-битный процессор;
  • Время пробуждения и отправки пакетов 22мс;
  • Встроенные TR переключатель и PLL;
  • Наличие усилителей мощности, регуляторов, систем управления питанием.

Существует несколько поколений плат NodeMcu – V1(версия 0.9), V2(версия 1.0) и V3 (версия 1.0). Обозначения V1, V2, V3 используются при продаже в интернет-магазинах. Нередко происходит путаница в платах – например, V3 внешне идентична V2. Также все платы работают по принципу open-source, поэтому их могут производить любые фирмы. Но в настоящее время производством плат NodeMcu занимаются Amica, DOIT и LoLin/Wemos.

Отличия от других модификаций

Платы поколения V1 и V2 легко отличить – они обладают различным размером. Также второе поколение оснащено улучшенной модификацией чипа ESP-12 и 4 Мб флэш-памяти. Первая версия, устаревшая, выполнена в виде яркой желтой платформы. Использовать ее неудобно, так как она покрывает собой 10 выходов макетной платы. Плата второго поколения сделана с исправлением этого недостатка – она стала более узкой, выходы хорошо подходят к контактам платы. Платы V3 внешне ничем не отличаются от V2, они обладают более надежным USB-выходом. Выпускает плату V3 фирма LoLin, из отличий от предыдущей платы можно отметить то, что один из двух зарезервированных выходов используется для дополнительной земли, а второй – для подачи USB питания. Также плата отличается большим размером, чем предыдущие виды.

Где купить модули NodeMCU и ESP8266

Сегодня на рынке доступно множество достаточно недорогих модификаций плат на базе ESP8266. Мы сделали небольшую подборку наиболее интересных вариантов:

-font-b-ESP8266-b-font-OLED-preflashed-development-board-Screen-font-b-0-96-b.jpg_220x220.jpgОтличный WiFi модуль (ESP8266) с OLED-экраном и аккумуляторным отсеком 18650. Идеальное решение для автономных элементов умного дома -font-b-0-96-b-font-Inch-OLED-Display-Wemos-font-b-ESP8266-b-font.jpg_220x220.jpgWiFi модуль с OLED экраном 0.96 дюймов на базе Wemos ESP8266 ESP-12F
Маленький, но мощный модуль WeMos D1 mini NodeMcu 4M, базирующийся на ESP8266 WiFi модуль ESP8266 NodeMcu Lua WIFI со встроенной антенной и usb портом
Модуль WiFi-трансивера ESP8266 Модуль ESP-01S ESP8266 serial WIFI model (ESP-01 Updated version)

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

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

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

Преимущества NodeMcu v3

  • Наличие интерфейса UART-USB с разъемом micro USB позволяет легко подключить плату к компьютеру.
  • Наличие флэш-памяти на 4 Мбайт.
  • Возможность обновлять прошивку через USB.
  • Возможность создавать скрипты на LUA и сохранять их в файловой системе.

Недостатки модуля NodeMcu

Основным недостатком является возможность исполнять только LUA скрипты, расположенные в оперативной памяти. Этого типа памяти мало, объем составляет всего 20 Кбайт, поэтому написание больших скриптов вызывает ряд трудностей. В первую очередь, весь алгоритм придется разделять на линейные блоки. Эти блоки необходимо записать в отдельные файлы системы. Все эти модули исполняются при помощи оператора dofile.

При написании нужно соблюдать правило – при обмене данными между модулями нужно пользоваться глобальными переменными, а при вычислении внутри модулей – локальными. Также важно в конце каждого написанного скрипта вызывать функцию collectgarbage (сборщик мусора).

Распиновка NodeMcu v3

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

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

Подключение NodeMCU к компьютеру

Для начала работы с NodeMcu нужно подключить плату к компьютеру. Первым шагом будет установка драйвера CP2102 и открытие Arduino IDE. Затем нужно найти в «Файл» – «Настройки» и в окно «дополнительные ссылки для менеджера плат» вставить ссылку http://arduino.esp8266.com/versions/2.3.0/package_esp8266com_index.json.

После этого в меню «документы» – «плата» «менеджер плат» выбрать «esp8266» и установить последнюю версию. После проделанных действий в меню «инструменты» – «плата» нужно найти NodeMCU.

После того, как все необходимые данные будут установлены и скопированы, можно будет начать работать.

Пример подключения светодиода к NodeMCU

Принципиальная схема подключения представлена на рисунке.

Итоговый макет макет выглядит следующим образом:

Сама плата работает от напряжения 3.3 В, поэтому для подключения светодиода нужно использовать резистор. В данном примере для красного светодиода берется резистор номиналом 65 Ом.

Похожим способом к плате подключается и фотодиод:

Плату NodeMCU можно использовать и для управления по ИК каналу. Для управления нужен пульт дистанционного управления с ИК приемником и сама платформа. Инфракрасный приемник подключается по схеме, представленной ниже:

Прошивки для esp8266 NodeMcu

В основу платформы загружена стандартная прошивка Node MCU, в которую встроен интерпретатор языка Lua. При помощи Lua-команд можно выполнять следующие действия:

  • Подключение к Wi-Fi точке доступа;
  • Работа в роли Wi-Fi точки доступа;
  • Переход в режим глубокого сна для уменьшения потребления энергии;
  • Включение или выключения светодиода на выходе GPIO16;
  • Выполнение различные операции с файлами во флэш-памяти;
  • Поиск открытой Wi-Fi сети, подключение к ней;
  • Вывод MAC адреса;
  • Управление пользовательскими таймерами.

Для программирования NodeMCU можно использовать Arduino IDE или комплекс средств разработки SDK – ESPlorer. Этот комплекс обладает рядом отличий:

  • Он может работать на множестве различных платформ;
  • Обладает поддержкой нескольких открытых файлов;
  • Позволяет подсвечивать код языка Lua;
  • Возможность умной отправки файлов;
  • Возможность поддержки нескольких видов прошивки одновременно.

Для обеспечения корректной и стабильной работы нужно обновить прошивку до последней версии. Существует несколько способов обновления – облачный сервис, Docker Image и компилирование в Linux. Каждый из этих способов обладает своими плюсами и минусами. Наиболее простым и понятным является первый способ.

Сбор прошивки в облачном сервисе

Облачный сервис обладает простым и удобным интерфейсом. Работа начинается с ввода email. Далее будет предложено выбрать тип прошивки – стабильная прошивка или тестируемая. Первая используется для обучения и создания большого количества объектов, поэтому рекомендуется выбирать именно ее. Следующим шагом будет подключение нужных модулей. По умолчанию уже записано несколько основных пунктов, остальные нужно включать только по необходимости. Затем выбираются дополнительные опции. Среди них есть поддержка FatFS для чтения sd-карты или включение режима отладки.

После начала сборки придет письмо на почту, сигнализирующее о начале запуска процесса. Через некоторое время придет и второе письмо – будет предложено выбрать версию float (дробные числа) или integer (целые числа).

После перехода по полученной ссылке нужно будет скачать файл bin и поместить его в Resources – Binaries. Там будет расположен файл nodemcu_integer_0.9.5_20150318.bin, который нужно удалить. В итоге содержимое папки будет выглядеть следующим образом.

Обновление прошивки Node Mcu

Для правильной и стабильной работы платы требуется перезаписать esp_init_data_default.bin. Скачать его можно на официальном сайте. Нужный файл нужно поместить снова в систему для прошивки NodeMCU Flasher по пути Resources – Binaries, предварительно удалив из него старый файл.

Затем можно подключать  NodeMCU и приступить к обновлению. Для начала нужно поменять настройки – в NodeMCU Flasher во вкладке Config нужно выбрать файл собранной прошивки вместо INTERNAL://NODEMCU.

Остальное оставить без изменений, перейти на Operations и нажать Flash. Как только окончится прошивка, нужно снова перейти на Config и в первой строке указать путь esp_init_data_default.bin. Также дополнительно указывается адрес, куда нужно переместить этот файл. Для модуля NodeMCU следует выбрать адрес 0x3FC000. После этого нужно снова вернуться на Operations и нажать Flash.

После этого нужно переформатировать всю файловую систему млаты. Для этого нужно запустить ESPlorer, обязательно поставить скорость обмена 115200 и перезагрузить NodeMCU. После всех вышеописанных действий будет новая версия прошивки. Отладочная плата полностью перепрошита и готова к работе.

Краткое описание языка Lua

Язык Lua обладает простым синтаксисом и мощными конструкциями описания данных, которые основаны на массивах и расширяемой семантике.  Этот мощный язык программирования используется для создания программного обеспечения, расширения различных игр. В отличие от остальных языков Lua обладает более гибкими и более мощными конструкциями.

Мигание светодиодами на Lua

Можно рассмотреть простейшую схему – мигание светодиодом. Этот пример поможет изучить работы с контактами GPIO. Светодиод нужно подключить как показано на схеме.

Затем нужно записать следующий скетч в левое окно ESPlorer:

pin_number = 1

gpio.mode (pin_number, gpio.OUTPUT) // установка рабочего режима на выход

gpio.write (pin_number, gpio.HIGH)// установка высокого уровня

gpio.write (pin_number, gpio.LOW)// установка низкого уровня

gpio.serout (1, gpio.HIGH, {+990000,990000}, 10, 1) // установка мигания светодиодом 10 раз

После нужно сохранить скрипт с названием init.lua. Сразу после этого начнется автоматическая загрузка написанного кода в отладочную плату и его выполнение. Если операция выполнена успешно, отладочная плата начнет мигать светодиодом.

Важно отметить, что плата самостоятельно выполняет скрипт, подключение к компьютеру нужно только для подачи питания.

К изучению возможностей микросхемы ESP8266 я приступил пару месяцев назад. Первоначально приобрел, как и большинство, модуль ESP-01, но почти сразу нашел новое на тот момент решение на основе модуля ESD-12 в виде DEVKIT и прошивкой nodeMCU, в которую встроена VM LUA версии 5.1.4(без debug и OS*модулей). Есть несколько способов приобщиться к миру прекрасного — «интернета вещей». Можно взять модуль ESP-01, в котором 512 Кбайт флеш, есть UART интерфейс, пара контактов ESP, добавить к нему интерфейс на USB в последствии перепаять флеш на больший объем. Для тех, у кого нет желания, либо умения заниматься доработкой модуля, но хочется приобщиться и начать сразу программировать, есть другой способ — это указанная выше плата DEVKIT. Если учесть разность цен решения в 10 долларов — выбор за вами.

Что же хорошего в данном модуле DEVKIT?

Во-первых, он уже содержит интерфейс UART-USB с разъемом micro USB. Поэтому для его подключения к компьютеру нужен лишь кабель USB-microUSB.Во вторых, он имеет выводы всех доступных сигналов с ESP8266. Вот моя схема подключения к модулю различных датчиков: Для подключения датчиков к контактам платы DEVKIT я использовал шлейф от старого компьютера для подключения периферии (дисков, CDROM, портов и т.д.) Как видите, я подключил к модулю все или почти все. В проекте — частотное управление двигателем и ПИД регулирование силовыми установками (нагревателями и выключателями).В-третьих, модуль уже имеет flash 4 Mбайт, а NODEMCU имеет встроенную файловую систему spiffs.В-четвертых, есть возможность обновлять прошивку из облака или через USB.В-пятых, можно создать множество скриптов на LUA и записать их в файловую систему. После чего через WIFI можно вызывать нужные скрипты на исполнение. Библиотека расширения LUA содержит следующие модули:json, file, timer, pwm, i2c, spi, 1-wire, net, mqtt, coap, gpio, wifi, adc, uart и system api. Контракты платы могут быть запрограммированы для gpio, i2c, pwm. Доступны две версии прошивки с форматом целых, либо вещественных чисел. Следует отметить, что можно программировать свои разработки на СИ. Но проблема в том, что для отладки каждого изменения в своей программе необходимо собирать прошивку объемом 200 KБ и грузить в модуль примерно 1 минуту. Т.е. сколько ошибок — столько минут. Другой путь — отладка модулей на LUA и в последствии (если есть необходимость) перенос их на СИ с помощью API CИ для LUA (я, собственно, так и делаю). Одна ошибка — это примерно 1-2КБ и загрузка 1-2 сек. Т.е. сколько ошибок — столько секунд.

Какие же недостатки есть у данного модуля

Основной недостаток в том, что VM LUA исполняет LUA скрипты лишь размещенные в оперативной памяти кристалла. А этой памяти для скриптов всего лишь 20 Кбайт. Этого объема памяти хватает на исполнение скрипта примерно в 110 строк. Поэтому создание сравнительно больших скриптов для данного модуля имеет свою специфику.Во-первых, необходимо алгоритм разделить на линейные блоки.Во вторых, записать эти блоки в отдельные файлы файловой системы модуляВ-третьих, исполнять эти модули с помощью оператора dofile. При написании модулей надо придерживаться следующих правил: — В конце каждого модуля явно вызвать сборщик мусора; — Для обмена данными между модулями использовать глобальные переменные, а для вычислений внутри модулей -локальные. В результате основная программа на lua выглядит примерно так (один из рабочих вариантов): — dofile(‘nk_start.lc’) — вызов модуля начальной инициализации датчиков — function cb() — колбек функция периодического измерения показаний датчиковcollectgarbage() — вызов сборщика мусораif ip==nil thendofile(‘wifi_1.lua’) — функция инициализации wifi станции либо сервераendif ip~=nil and is==nil thendofile(‘srv_1.lua’); — в данном варианте реализуется web серверis=1;enddofile(‘cbAM2302.lc’); — получение данных с датчика влажности и температуры AM2302dofile(‘cb18b20.lua’); — получение показаний с датчиков температуры DS18B20(у меня их три)dofile(‘get_tp.lc’); dofile(‘norm.lc’); —получение показаний с датчика давления и температуры(BMP180)endtmr.alarm(3,1000,1,cb) — таймер дискретизации — вызывает колбек функцию. частота дискретизации 1 Гц Так как в этой программе каждый модуль занимает место предыдущего, то таких модулей может быть много. Все они хранятся в файловой системе. Если реализовать алгоритм данной программы без использование разбивки на модули, то в памяти модуля сможет разместиться программа лишь для одного датчика (либо AM2302, либо 18b20, либо BMP180).

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("") // Отправляем   end) collectgarbage()

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

Используемые источники:

  • https://arduinomaster.ru/platy-arduino/esp8266-nodemcu-v3-lua/
  • https://habr.com/post/255625/
  • https://xn--90aeniddllys.xn--p1ai/pervyj-vzglyad-na-nodemsu-v3-lua/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации