Якщо ви тільки почали знайомитися з мікроконтролерною платформою 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:
- https://github.com/nodemcu/nodemcu-firmware/releases
- https://nodemcu.readthedocs.io/en/master/
- https://nodemcu.readthedocs.io/en/master/lua-developer-faq/
- На острові розробників мови програмування Lua взагалі все спокійно і просто. Ці “островитяни” роблять (нам невідомо чи зараз вони продовжують працювати над проектом Lua) якісну і класну мову програмування. Так, вони взагалі не в курсі, що таке ESP8266 та NodeMCU. На сайтах, що пов’язані зі спільнотою Lua, ви зможете знайти достатньо матеріалів про класичну мову Lua. Також можливо знайти сайти, які розвивають відгалуження з назвами типу Embed-Lua, micro-Lua і тому подібне. Але які саме версії мови там створюють і чи це той самий движок, що в NodeMCU, пересвідчитися доволі важко без того, щоб не залазити у файли вихідного коду. То ж ми радимо не гаяти часу, а користуватися довідниками і книгами про класичний варіант Lua. Тим більше, що декілька книг по Lua написано одним із авторів мови безпосередньо.
Посилання:
- На острові апаратної платформи 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 як з точки зору інтерфейсів так і з точки зору наявної пам’яті під капотом.
Посилання:
- https://www.nodemcu.com/index_en.html
- https://www.ai-thinker.com/product/esp8266
- https://docs.wemos.cc/en/latest/d1/index.html
- https://www.adafruit.com/product/2471
- https://www.dfrobot.com/product-1634.html
- https://www.itead.cc/wiki/S20_Smart_Socket
У підсумку маємо декілька майже ізольованих інформаційних острівків. Звісно ж, між ними є якесь слабке і непомітне сполучення, але немає єдиної, зрозумілої системи. Не варто засмучуватися! Як і у будь-якій добровольчій і безкоштовній темі, яка нікому не належить і ніким не керується централізовано, є свої недоліки і переваги. З одного боку все непрозоро і не структуровано, з іншого боку – сукупна ціна готової до комерційної розробки системи дуже низька. Згодиться як для комерційних продуктів стартапів, так і для приватного некомерційного використання.
Пиріжок 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 кб, купою аналогових і цифрових інтерфейсів, драйвери до більшості з яких ще потрібно написати самостійно.
- Потрібно запустити і прошити контролер щоб все перевіряти на практиці одразу ж. Читайте докладніше інструкцію тут: Як швидко почати працювати з контролером NodeMCU/ESP8266
- Бажано придбати книгу по Lua.
Це справді дуже корисна книга. Інтернетом ходить її переклад. https://www.lua.org/pil/
- Вивчати офіційну документацію на сайті мови Lua: https://www.lua.org/docs.html . Всі методи, синтаксис, логіка, конструкції працює в NodeMCU так як і у класичному Lua. Окрім кількох модулів і команд. В NodeMCU немає окремих бібліотек OS, Math, але є інші – модуль Node. як заміна OS, наприклад.
- Вивчати офіційну документацію на сайті прошивки: https://nodemcu.readthedocs.io/en/master/ . Вивчення документації не лише дозволить вам програмувати на Lua, а ви зрозумієте які потужні можливості вам надає NodeMCU. Зверніть особливу увагу на C-модулі в документації, на яких будується будь-який розумний пристрій. Наприклад:
- NODE.;
- GPIO.;
- WIFI.;
- I2C.;
- SPI.;
- HTTP.;
- FILE.;
- NET.;
- SNTP.;
- TMR.
- Бажано читати інші наші публікації.
- Головне! Практика. Ознайомитися з прикладами з офіційного Git прошивки: https://github.com/nodemcu/nodemcu-firmware/tree/master/lua_examples
Спробуйте їх завантажити у свій NodeMCU та запустити на виконання.
Бажаємо успіхів!