Основные материалы по NodeMCU мы собираем на нашей WIKI
OverviewBasicsReferenceFAQsWhitepapers |
Lua Modules |
C Modules |
Основной процесс начала работы с NodeMCU состоит из следующих трех шагов.
Обычно вы выполняете шаги 1 и 2 только один раз, а затем повторяете шаг 3 по мере разработки приложения. Если ваше приложение перерастает ограниченную внутреннюю оперативную память, вы можете использовать Lua Flash Store (LFS) для перемещения кода Lua во флэш-память, освобождая намного больше оперативной памяти для переменных данных. Вот почему рекомендуется включить LFS для шага 1, если вы разрабатываете более крупное приложение. Как описано ниже, существует другой подход к загрузке кода Lua.
Осторожность
Для каждой задачи у вас есть несколько вариантов выбора инструментов в зависимости от используемой вами ОС. Цветные прямоугольники представляют собой уверенный путь к началу вашего пути - так сказать, самый быстрый путь к успеху. Не стесняйтесь переходить по ссылкам выше, чтобы получить более подробную информацию.
| Задача \ ОС | Окна
| macOS
| Linux
|
|---|---|---|---|
| Сборка прошивки | облачный строитель | облачный строитель | облачный строитель |
| Докер | Докер | Докер | |
| родной | |||
| Прошивка прошивки | NodeMCU PyFlasher | NodeMCU PyFlasher | |
| esptool.py | esptool.py | esptool.py | |
| Загрузить код | ESPlorer (Java) | ESPlorer (Java) | ESPlorer (Java) |
| NodeMCU-Tool (Node.js) | NodeMCU-Tool (Node.js) | NodeMCU-Tool (Node.js) | |
| Задачи LFS ниже | |||
| Сборка прошивки с поддержкой LFS |
облачный строитель | облачный строитель | облачный строитель |
| Докер | Докер | Докер | |
| родной | |||
| Сборка luac.cross | не требуется, если вы используете веб-сервис Терри или Docker для последующей компиляции образа LFS | не требуется, если вы используете веб-сервис Терри или Docker для последующей компиляции образа LFS | не требуется, если вы используете веб-сервис Терри или Docker для последующей компиляции образа LFS |
| родной | родной | родной | |
| скачать из релиза | |||
| Скомпилируйте Lua в образ LFS |
веб-сервис | веб-сервис | веб-сервис |
| Докер | Докер | Докер | |
| родной | родной | родной | |
| Загрузить образ LFS | общий | общий | общий |
Как читать это
Пример использования: вы только начинаете работу с NodeMCU, и ваша ОС - Windows (и вы не используете LFS), тогда синие поля в столбце «Windows» являются вашим ориентиром. Ты:
Отсутствуют инструменты?
Наше намерение - как можно быстрее познакомить вас с программированием на Lua на ESP8266, поэтому мы свели количество упомянутых здесь инструментов к минимуму; frightanic.com: Инструменты и IDE обсуждают другие инструменты и опции.
Осторожность
Следующие ниже главы не предназначены для изучения по очереди. Выберите задачу из приведенной выше матрицы, и вы перейдете к соответствующей главе.
Конструктор облака на https://nodemcu-build.com позволяет выбрать ветку NodeMCU, модули и несколько других параметров конфигурации (например, SSL да / нет). После завершения сборки вы получите электронное письмо с двумя ссылками для загрузки пользовательской прошивки:
Мы рекомендуем использовать сборку с плавающей запятой, даже если целочисленный вариант использует меньше оперативной памяти для хранения переменных, так как между двумя вариантами существует небольшая разница во времени выполнения. Кроме того, вариант с плавающей запятой правильно обрабатывает нецелочисленные значения, что значительно упрощает числовые вычисления.
Во всем остальном графический интерфейс конструктора облаков не требует пояснений. Следовательно, здесь нет необходимости в дополнительных объяснениях.
Обратите внимание, что эта служба не поддерживается командой NodeMCU. Тем не менее, им управляет член команды NodeMCU как физическое лицо.
Автономный флешер NodeMCU с графическим интерфейсом на основе Python, esptool.py (см. Ниже) и wxPython. Доступен исполняемый файл .exe для Windows и .dmg для macOS.
В Windows и macOS установка не требуется! Инструкции по запуску на других платформах доступны на сайте проекта.

Обратите внимание, что этот инструмент не является официальным предложением NodeMCU. Тем не менее, он поддерживается членом команды NodeMCU как физическим лицом.
esptool.py был начат как усилие сообщества ESP8266, но с тех пор был принят Espressif. Это их официально рекомендуемый способ прошивки микропрограмм на чипы ESPxxx.
$ pip install esptool (также устанавливает pySerial)$ esptool.py --port <serial-port-of-ESP8266> --baud <baud-rate> write_flash -fm <flash-mode> 0x00000 <nodemcu-firmware>.binflash-modeявляется qioдля большинства ESP8266 ESP 01-/ 07 (512 КБайт модулей) и dioдля большинства ESP32 и ESP8266 ESP-12 (> = 4 МБайт модули). ESP8285 требует dout.
Скорость передачи по умолчанию - 115200 бод. Большинство конфигураций оборудования должны работать с 230400 в зависимости от ОС, драйвера и модуля. Модули NodeMCU и WeMos обычно подходят для 921600.
Более подробная информация доступна в репозитории esptool.py на GitHub.
TBD https://github.com/4refr0nt/ESPlorer
Возможно, NodeMCU-Tool , для которого требуется Node.js, является лучшим инструментом для загрузки и выполнения кода, чем ESPlorer. Кроме того, в отличие от прежнего, он содержится в очень хорошем состоянии. Однако мы также понимаем, что пользователи Windows в целом предпочитают графический интерфейс, а не командную строку.
Список возможностей довольно долго , но по существу предложения NodeMCU-Tool:
Быстрый старт:
$ npm install nodemcu-tool -g$ nodemcu-tool --version$ nodemcu-tool upload --port=/dev/ttyUSB0 helloworld.lua$ nodemcu-tool run helloworld.luaОбратите внимание, что вам может потребоваться использовать sudoпрефикс для установки инструмента на шаге 2, а также, возможно, добавить –unsafe-permфлаг после команды установки.
Сборки изображение Docker NodeMCU это самый простой способ для создания NodeMCU связанных компонентов локально на предпочтительной платформе.
Предложение:
Подробные инструкции доступны в README изображения. Что касается доступных параметров конфигурации, проверьте документацию и изучите комментарии в app/include/user_config.h.
app/include/user_config.hотредактируйте строку #define LUA_FLASH_STORE 0x0и отрегулируйте размер до необходимого. Обратите внимание, что это должно быть кратно 4 Кбайт.Обратите внимание, что этот образ Docker не является официальным предложением NodeMCU. Тем не менее, он поддерживается членом команды NodeMCU как физическим лицом.
luac.crossЛокальная копия luac.crossнеобходима только в том случае, если вы хотите самостоятельно скомпилировать файлы Lua в образ LFS и не используете Docker.
Пользователи Windows могут скомпилировать локальную копию luac.crossисполняемого файла для использования на ПК для разработки. Для этого вам понадобятся:
C:\nodemcu-firmware; выберите версии master / dev в соответствии с версией прошивки, которую вы хотите использовать. Если вам нужен целочисленный элемент, отредактируйте app/includes/user_config.hфайл, чтобы выбрать его.luac.crossисполняемого файла. Здесь у вас есть несколько вариантов:app/lua/luac_crossи запустите make, чтобы собрать компилятор в корневом каталоге прошивки NodeMCU. Вы делаете это, позвонивmakeв Cygwin и mingw32-make -f mingw32-Makefile.makMinGW.luac.crossисполняемый файл, вы можете использовать его для компиляции кода Lua в образ LFS. Возможно, вы захотите переместить его из иерархии nodemcu-firmware, поскольку эта иерархия папок больше не требуется и может быть удалена.app/includes/user_config.hфайл, чтобы выбрать его.app/lua/luac_crossподпапкуmakeсборку исполняемого файла.luac.crossисполняемый файл, вы можете использовать его для компиляции кода Lua в образ LFS. Возможно, вы захотите переместить это из иерархии nodemcu-firmware, поскольку эта иерархия папок больше не требуется и может быть удалена.Что касается Linux
Самый простой подход - сохранить все файлы Lua для вашего проекта в одном каталоге на вашем хосте. (Эти файлы будут скомпилированы luac.crossдля создания образа LFS на следующем шаге.)
Например, чтобы запустить Telnet и FTP-серверы из LFS, поместите следующие файлы в каталог проекта:
Вы всегда должны включать первые два модуля, но оставшиеся файлы обычно заменяются файлами вашего собственного проекта. Также помните, что это примеры и что вы можете изменять или заменять их для собственных нужд приложения.
Примечание
Вам нужно будет взять компилятор luac.cross, который соответствует вашей конфигурации в отношении float / integer, Lua 5.1 / 5.3 и, возможно, выпуска.
https://blog.ellisons.org.uk/article/nodemcu/a-lua-cross-compile-web-service/
Примечание: сначала прочтите о выборе файлов Lua
Загрузите ZIP-файл со всеми вашими файлами Lua, готовыми для LFS. Веб-сервис перекрестно скомпилирует их в .imgготовый для загрузки на устройство. Он поддерживает образы LFS как для вариантов прошивки с плавающей запятой, так и для целочисленных.
Более подробная информация доступна на сайте сервиса.
Обратите внимание, что эта служба не поддерживается командой NodeMCU. Тем не менее, им управляет член команды NodeMCU как физическое лицо.
Примечание: сначала прочтите о выборе файлов Lua
Тот же образ Docker, который вы использовали для сборки прошивки NodeMCU, можно использовать для компиляции файлов Lua в образ LFS .
$ cd <your-nodemcu-firmware-folder>$ docker run --rm -ti -vpwd:/opt/nodemcu-firmware -v {PathToLuaSourceFolder}:/opt/lua marcelstoer/nodemcu-build lfs-imageПримечание: сначала прочтите о выборе файлов Lua
Для Windows, если вы создали с помощью WSL / Cygwin, вы сделаете это из соответствующего командного окна, оба из которых используют bashоболочку. Если вы использовали Visual Studio, просто используйте окно cmd windows.
$ cd <project-dir>$ luac.cross -o lfs.img -f *.luaВам нужно будет настроить imgи luaпуть в соответствии с их местоположением, и убедитесь , что luac.crossв вашем $PATHсписке поиска. Например, если вы используете WSL и файлы вашего проекта находятся внутри, D:\myprojectтогда путь Lua будет /mnt/d/myproject/*.lua(для cygwin заменить mntна cygwin). Это создаст lfs.imgфайл, если нет ошибок компиляции Lua (при необходимости снова укажите явный путь к каталогу).
Вы также можете добавить в свой ~/binкаталог простой однострочный файл сценария, чтобы завершить эту команду.
Скомпилированный файл образа LFS (например lfs.img) загружается как обычный файл в файловую систему устройства (SPIFFS). Вы делаете это так же, как с файлами Lua, например, с помощью ESPlorer или NodeMCU -Tool . Также есть новый пример HTTP_OTA.lua , lua_examplesкоторый может извлекать изображения из стандартной веб-службы.
Как только файл образа LFS находится в SPIFFS, вы можете выполнить команду node.flashreload (), и загрузчик загрузит его во флэш-память и немедленно перезапустит модуль ESP с новой загруженной LFS, если файл образа действителен. Однако вызов вернется с ошибкой, если файл окажется недействительным, поэтому ваш код перепрошивки должен включать логику для обработки такого возврата ошибки.
init.luaфайлinit.lua- это файл, который первым запускается прошивкой NodeMCU. Обычно он устанавливает соединение Wi-Fi и запускает основное приложение Lua. Предполагая, что вы включили _initфайл, о котором говорилось выше, при его выполнении будет добавлен простой API для доступа к модулю LFS:
LFS.myfunc(a,b)require 'myModule'работает должным образом.Сделайте защищенный вызов этого _initкода: pcall(node.LFS._init())и проверьте статус ошибки. См. Более подробное описание в разделе « Методы и подходы к программированию» в техническом описании LFS.
Ниже приведен краткий обзор построения и запуска простейшей системы на основе LFS.
Чтобы использовать LFS, начните с версии прошивки NodeMCU с включенной LFS. См. Раздел матрицы «Сборка встроенного ПО с поддержкой LFS», чтобы узнать, как это сделать. Загрузите его в ESP8266 обычным способом (независимо от вашей настройки).
Затем создайте файловую систему LFS. Это можно сделать несколькими способами, как обсуждалось выше; один из самых простых - использовать luac.cross -o lfs.img -f *luaна хост-машине. Убедитесь, что вы включили файл с именем hello_world.luaсо следующим однострочным содержимым: print("Hello ESP8266 world!") Файл lua_examples / lfs / _init.lua обязательно должен быть включен в образ, поскольку это самый простой способ интеграции системы LFS. Затем lfs.imgфайл можно загрузить в ESP8266, как и любой другой файл.
Следующий шаг - сообщить ESP8266 о существовании LFS. Это делается с помощью node.LFS.reload ("lfs.img") , который запускает сброс, за которым следует node.LFS._init () для лучшей интеграции LFS; вход в esp8266 и выполнение следующих команд дает обзор последовательности команд.
>
> node.LFS.reload("lfs.img")
-- node.LFS.reload() triggers one or two resets here.
-- Call the LFS hello_world.
> node.LFS.hello_world()
Hello ESP8266 world!
-- DONE!
-- now for some more insights and helpers
-- List the modules in the LFS.
> print(node.LFS.list)
function: 3fff0728
> for k,v in pairs(node.LFS.list()) do print(k,v) end
1 dummy_strings
2 _init
3 hello_world
-- integrate LFS with SPIFFS
> node.LFS._init()
-- We now can run and load files from SPIFFS or LFS using `dofile` and `loadfile`.
> dofile("hello_world.lua")
Hello ESP8266 world!
-- `require()` also works the same way now.
-- if there was a file called "hello_world.lua" in SPIFFS the that would be executed. But if there isn't a lookup in LFS is made.
-- _init.lua also sets a global LFS as a copy of node.LFS. This is somewhat backwards compatibility and might get removed in the future.
> print(LFS)
table: 3fff06e0
>
Обратите внимание, что исправление ошибок не использовалось, поскольку команды предназначены для ввода с терминала, и ошибки станут очевидными.
Затем вы должны настроить процесс загрузки ESP8266, чтобы проверить наличие образа LFS и запустить нужный модуль. После того как таблица модуля LFS была зарегистрирована, запустив lua_examples / LFS / _init.lua , работающий модуль LFS это просто вопрос , например: LFS.hello_world().
node.LFS.reload () необходимо перезапустить только в случае обновления образа LFS; после загрузки образа LFS во флэш-память исходный файл (в SPIFFS) больше не используется и может быть удален.
Если известно, что LFS работает, можно добавить такие модули, как lua_examples / lfs / dummy_strings.lua , вместе, конечно, с эффективной проверкой ошибок.