Основные материалы по NodeMCU мы собираем на нашей WIKI
Overview |
|
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>.bin
flash-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.mak
MinGW.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 -v
pwd:/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 , вместе, конечно, с эффективной проверкой ошибок.