Як читати документацію на прошивку NodeMCU і мову програмування LUA

Якщо ви тільки почали знайомитися з мікроконтролерною платформою ESP8266 у поєднанні з прошивкою NodeMCU та мовою програмування Lua на борту, скоріш за все не знаєте з якого боку підступитися, щоб оволодіти необхідними знаннями, а потім і практичними навичками. Ми вирішили написати спеціальну статтю, у якій буде викладено логіку, яка, як нам здається, може допомогти поєднати різні джерела інформації і скласти загальну картину.

В тумані інформаційного простору стосовно NodeMCU існує три+один острови. Щоправда, раніше їх було чотири, але один з островів пішов під воду декілька років тому і виринув у якості великої кількості менших та незалежних. Давайте їх перерахуємо.

Острів №1. Компанія Espressif – виробник електронного чіпу ESP8266.

Острів №2. Спільнота що розробляє програмну прошивку з відкритим вихідним кодом під назвою NodeMCU, яка також включає вбудовану мову програмування Lua, як одну з глибоко інтегрованих бібліотек.

Острів №3. Розробники мови Lua

Острів №4. Апаратна платформа NodeMCU, що була початково розроблена і випускалася засновниками спільноти прошивки NodeMCU і зараз випускається за ліцензією іншими китайськими виробникам. Безліч виробників апаратної платформи на базі чіпу ESP8266 все ж приблизно дотримуються початкової ідеї і випускають схожі на 99% апаратні пристрої, що є сумісними з програмною прошивкою і з чіпом ESP8266 компанії Espressif. До таких виробників апаратних пристроїв сумісних з ідеями NodeMCU можемо віднести як саму Espressif, так і компанії Amica, AI-Thinker, Wemos та багато інших. Є багато компаній, які на базі ESP8266 випускають власні успішні комерційні продукти. Наприклад під брендом Sonoff компанія Itead випускає лінійку своїх розумних пристроїв, дуже поширених в Україні.

Лебідь, рак і щука

  • На острові компанії Espressif розробляють і виготовляють ESP8266 та декілька версій спеціальної прошивки ESP8266 NONOS SDK з мовою програмування Сі або RTOS з AT-командами. Якщо купити у будь-якому магазині апаратний пристрій NodeMCU, то на ньому буде встановлено одну з таких “фабричних” прошивок з AT-командами. Компанія Espressif займається виключно екосистемою своїх апаратних та програмних продуктів і їх абсолютно не цікавить, що таке NodeMCU або Lua. Це суттєвий нюанс – ви не знайдете у оригінальній документації на чіп ESP8266 будь-яких пояснень чи навіть згадок щодо Lua, або про особливості реалізації апаратної чи програмної платформи NodeMCU. 

Посилання на GitHub прошивки виробника: https://github.com/espressif/ESP8266_NONOS_SDK

На базі саме цієї версії прошивки Espressif, побудовано прошивку NodeMCU.

  • На острові спільноти, що розробляє програмну прошивку NodeMCU, є доволі багато згадувань середовища ESP8266-SDK та посилань на мову Lua, але оскільки спільнота є волонтерською організацією Сі-спеціалістів високого класу, ви там не знайдете докладної документації чи покрокових навчальних матеріалів для початківців. Вважається, що все і так зрозуміло, а все що треба знати викладено у документації на GitHub. Окрім того, стосовно мови програмування Lua, теж все не просто. До складу NodeMCU входить не класична мова Lua, а її вбудований варіант з невеличкими обмеженнями і відмінностями, які було об’єктивно продиктовано тим, що вона виконується в середовищі мікроконтролера з відмінною від звичайного персонального комп’ютера архітектурою та ресурсами.

Посилання на GitHub прошивки NodeMCU:

  1. https://github.com/nodemcu/nodemcu-firmware/releases
  2. https://nodemcu.readthedocs.io/en/master/
  3. https://nodemcu.readthedocs.io/en/master/lua-developer-faq/
  • На острові розробників мови програмування Lua взагалі все спокійно і просто. Ці “островитяни” роблять (нам невідомо чи зараз вони продовжують працювати над проектом Lua) якісну і класну мову програмування. Так, вони взагалі не в курсі, що таке ESP8266 та NodeMCU. На сайтах, що пов’язані зі спільнотою Lua, ви зможете знайти достатньо матеріалів про класичну мову Lua. Також можливо знайти сайти, які розвивають відгалуження з назвами типу Embed-Lua, micro-Lua і тому подібне. Але які саме версії мови там створюють і чи це той самий движок, що в NodeMCU, пересвідчитися доволі важко без того, щоб не залазити у файли вихідного коду. То ж ми радимо не гаяти часу, а користуватися довідниками і книгами про класичний варіант Lua. Тим більше, що декілька книг по Lua написано одним із авторів мови безпосередньо.

Посилання:

https://www.lua.org/

  • На острові апаратної платформи NodeMCU вже декілька років суттєвих змін не відбувається (хіба що, окрім появи нового чіпу ESP32 в продуктових лінійках). Це середньо- та крупно- серійні виробники мікроелектронних компонентів. Їм немає різниці, що буде встановлено на їх модуль “NodeMCU” – чи то ESP8266-SDK з мовою Сі, чи то прошивку NodeMCU з Lua. 

Варто звернути увагу, що коли кажуть модуль NodeMCU, то найчастіше мають на увазі саме готову плату з встановленим модулем ESP8266-12E/F/S…. Серед продуктів китайських виробників є й інші варіанти модуля (саме модуля) на цьому ж самому чіпі Espressif: 

ESP8266-01; ESP8266-02; ESP8266-03; ESP8266-04; ESP8266-5; ESP8266-06; ESP8266-7; ESP8266-08; ESP8266-09; ESP8266-10; ESP8266-11; ESP8266-12;ESP8266-13; ESP8266-14;

Відрізняються вони лише додатковою начинкою на модулі – об’єм флеш пам’яті, кількістю вивідних пінів, з антеною чи без і так далі. Так от для апаратної та програмної платформи NodeMCU найкращим чином пасує модуль ESP8266-12 як з точки зору інтерфейсів так і з точки зору наявної пам’яті під капотом.

Посилання:

У підсумку маємо декілька майже ізольованих інформаційних острівків. Звісно ж, між ними є якесь слабке і непомітне сполучення, але немає єдиної, зрозумілої системи. Не варто засмучуватися! Як і у будь-якій добровольчій і безкоштовній темі, яка нікому не належить і ніким не керується централізовано, є свої недоліки і переваги. З одного боку все непрозоро і не структуровано, з іншого боку – сукупна ціна готової до комерційної розробки системи дуже низька. Згодиться як для комерційних продуктів стартапів, так і для приватного некомерційного використання.

Пиріжок NodeMCU власного приготування з багатошаровою начинкою на будь-який смак

  • Шар №1. Модуль NodeMCU (ESP8266-12 + Flash Memory + Power Conv + UART/USB)
Шар №1.1 Апаратний чіп ESP8266EXШар №1.1.1 Базова прошивка NONOS SDK
  • Шар №2. Прошивка NodeMCU
Шар №2.1 Інтерпретатор/компілятор Lua інтегровані у прошивку NodeMCUШар №2.2 С-модулі прошивки NodeMCU як API інтерфейси Lua<->C
  • Шар №3. Скрипти розробника на мові Lua
Шар №3.1 Виклики C-модулів та Lua-модулыв з контексту мови LuaШар №3.2 Середовище, логіка, синтаксис та методи Lua

Хай там як, а у нас цей контролер у виконанні NodeMCU дуже надійно працює і дозволяє нам реалізувати майже всі задачі що виникають.

То ж, як правильно читати документацію?

Рекомендуємо наступний підхід:

УВАГА! Ми не радимо встановлювати Lua на персональний комп’ютер з метою подальшого програмування контролера – просто змарнуєте свій час. Якщо ви хочете програмувати комп’ютер, замість контролера ESP8266, то проаналізуйте, навіщо вам Lua? Є набагато популярніші і перспективніші мови програмування 😉 

Lua на ПК не допоможе вам зрозуміти особливості “вбудованого” програмування. Пам’ятайте, мікроконтролер це ПК, але без клавіатури, без монітора, без миші, з пам’яттю 16 кб, купою аналогових і цифрових інтерфейсів, драйвери до більшості з яких ще потрібно написати самостійно.

  1. Потрібно запустити і прошити контролер щоб все перевіряти на практиці одразу ж. Читайте докладніше інструкцію тут: Як швидко почати працювати з контролером NodeMCU/ESP8266
  2. Бажано придбати книгу по Lua. Це справді дуже корисна книга. Інтернетом ходить її переклад. https://www.lua.org/pil/
  1. Вивчати офіційну документацію на сайті мови Lua: https://www.lua.org/docs.html . Всі методи, синтаксис, логіка, конструкції  працює в NodeMCU так як і у класичному Lua. Окрім кількох модулів і команд. В NodeMCU немає окремих бібліотек OS, Math, але є інші – модуль Node. як заміна OS, наприклад.
  1. Вивчати офіційну документацію на сайті прошивки: https://nodemcu.readthedocs.io/en/master/ . Вивчення документації не лише дозволить вам програмувати на Lua, а ви зрозумієте які потужні можливості вам надає NodeMCU. Зверніть особливу увагу на C-модулі в документації, на яких будується будь-який розумний пристрій. Наприклад:
    • NODE.;
    • GPIO.;
    • WIFI.;
    • I2C.;
    • SPI.;
    • HTTP.;
    • FILE.;
    • NET.;
    • SNTP.;
    • TMR. 
  1. Бажано читати інші наші публікації.
  1. Головне! Практика. Ознайомитися з прикладами з офіційного Git прошивки: https://github.com/nodemcu/nodemcu-firmware/tree/master/lua_examples

Спробуйте їх завантажити у свій NodeMCU та запустити на виконання.

Бажаємо успіхів!