Основные материалы по NodeMCU мы собираем на нашей WIKI
OverviewBasicsReferenceFAQsWhitepapers |
Lua Modules |
C Modules |
Начало работы c NodeMCU
Основной процесс начала работы с 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» являются вашим ориентиром. Ты:
- собрать прошивку на облачном конструкторе
- загрузите и запустите NodeMCU PyFlasher, чтобы перенести прошивку на устройство
- загрузите и запустите ESPlorer, для которого требуется Java, для передачи файлов Lua из вашей системы на устройство
Отсутствуют инструменты?
Наше намерение - как можно быстрее познакомить вас с программированием на Lua на ESP8266, поэтому мы свели количество упомянутых здесь инструментов к минимуму; frightanic.com: Инструменты и IDE обсуждают другие инструменты и опции.
Осторожность
Следующие ниже главы не предназначены для изучения по очереди. Выберите задачу из приведенной выше матрицы, и вы перейдете к соответствующей главе.
Cloud Builder
Конструктор облака на https://nodemcu-build.com позволяет выбрать ветку NodeMCU, модули и несколько других параметров конфигурации (например, SSL да / нет). После завершения сборки вы получите электронное письмо с двумя ссылками для загрузки пользовательской прошивки:
- один для NodeMCU с плавающей поддержкой
- один для NodeMCU без поддержки плавающих чисел, т.е. двоичный файл, состоящий только из целых чисел
Мы рекомендуем использовать сборку с плавающей запятой, даже если целочисленный вариант использует меньше оперативной памяти для хранения переменных, так как между двумя вариантами существует небольшая разница во времени выполнения. Кроме того, вариант с плавающей запятой правильно обрабатывает нецелочисленные значения, что значительно упрощает числовые вычисления.
Во всем остальном графический интерфейс конструктора облаков не требует пояснений. Следовательно, здесь нет необходимости в дополнительных объяснениях.
Для LFS
- Разверните панель «Параметры LFS».
- Выберите размер LFS, 64 КБ, вероятно, будет достаточно большим
- Выберите другие варианты и соберите
Обратите внимание, что эта служба не поддерживается командой NodeMCU. Тем не менее, им управляет член команды NodeMCU как физическое лицо.
NodeMCU PyFlasher
Автономный флешер NodeMCU с графическим интерфейсом на основе Python, esptool.py (см. Ниже) и wxPython. Доступен исполняемый файл .exe для Windows и .dmg для macOS.
В Windows и macOS установка не требуется! Инструкции по запуску на других платформах доступны на сайте проекта.
- Установите драйверы для USB-последовательного порта . Какой драйвер вам нужен, зависит от используемого модуля ESP8266 или преобразователя USB-последовательный порт.
- Подключите USB-кабель к устройству и компьютеру.
- Загрузите и запустите PyFlasher
- Выберите последовательный порт, найдите двоичный файл прошивки и установите параметры флэш-памяти.
Обратите внимание, что этот инструмент не является официальным предложением NodeMCU. Тем не менее, он поддерживается членом команды NodeMCU как физическим лицом.
esptool.py
esptool.py был начат как усилие сообщества ESP8266, но с тех пор был принят Espressif. Это их официально рекомендуемый способ прошивки микропрограмм на чипы ESPxxx.
- 58586Установите драйверы для USB-последовательного порта . Какой драйвер вам нужен, зависит от используемого модуля ESP8266 или преобразователя USB-последовательный порт.
- Установите в вашей системе Python 2.7 или Python> = 3.4 , если он еще не доступен.
- Подключите USB-кабель к устройству и компьютеру.
$ 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.
ESPlorer
TBD https://github.com/4refr0nt/ESPlorer
NodeMCU-Инструмент
Возможно, NodeMCU-Tool , для которого требуется Node.js, является лучшим инструментом для загрузки и выполнения кода, чем ESPlorer. Кроме того, в отличие от прежнего, он содержится в очень хорошем состоянии. Однако мы также понимаем, что пользователи Windows в целом предпочитают графический интерфейс, а не командную строку.
Список возможностей довольно долго , но по существу предложения NodeMCU-Tool:
- загружать (Lua) файлы из вашей хост-системы на устройство
- управлять файловой системой устройства (удалять, загружать / скачивать и т. д.)
- запускать файлы на NodeMCU и отображать вывод через UART / последовательный порт
Быстрый старт:
- Установите Node.js и NPM, если они еще не доступны
- Установите NodeMCU-Tool глобально
$ npm install nodemcu-tool -g
- Проверить установку, запустив
$ nodemcu-tool --version
- Загрузить в файл Lua
$ nodemcu-tool upload --port=/dev/ttyUSB0 helloworld.lua
- Запустить его
$ nodemcu-tool run helloworld.lua
Обратите внимание, что вам может потребоваться использовать sudo
префикс для установки инструмента на шаге 2, а также, возможно, добавить –unsafe-perm
флаг после команды установки.
Докер
Сборки изображение Docker NodeMCU это самый простой способ для создания NodeMCU связанных компонентов локально на предпочтительной платформе.
Предложение:
- сборка прошивки NodeMCU на основе локально клонированных источников и конфигурации
- локально компилировать файлы Lua в образ LFS
Подробные инструкции доступны в README изображения. Что касается доступных параметров конфигурации, проверьте документацию и изучите комментарии в app/include/user_config.h
.
Для LFS
- В
app/include/user_config.h
отредактируйте строку#define LUA_FLASH_STORE 0x0
и отрегулируйте размер до необходимого. Обратите внимание, что это должно быть кратно 4 Кбайт. - Выполните сборку так, как вы бы иначе создавали это изображение (т.е. см. Его README)
Обратите внимание, что этот образ Docker не является официальным предложением NodeMCU. Тем не менее, он поддерживается членом команды NodeMCU как физическим лицом.
Строить luac.cross
Локальная копия luac.cross
необходима только в том случае, если вы хотите самостоятельно скомпилировать файлы Lua в образ LFS и не используете Docker.
Окна
Пользователи Windows могут скомпилировать локальную копию luac.cross
исполняемого файла для использования на ПК для разработки. Для этого вам понадобятся:
- Чтобы загрузить текущие исходные коды NodeMCU (этот ZIP-файл разработчика или ZIP-файл выпуска ) и распаковать в локальную папку, скажем
C:\nodemcu-firmware
; выберите версии master / dev в соответствии с версией прошивки, которую вы хотите использовать. Если вам нужен целочисленный элемент, отредактируйтеapp/includes/user_config.h
файл, чтобы выбрать его. - Выберите предпочтительный набор инструментов для создания
luac.cross
исполняемого файла. Здесь у вас есть несколько вариантов: - Если вы являетесь пользователем Windows 10 с уже установленной подсистемой Windows для Linux (WSL), то это среда Linux, поэтому вы можете следовать приведенным ниже инструкциям по сборке Linux .
- Менее ресурсоемкий вариант, который работает во всех вариантах ОС Windows, - это использование Cygwin или MinGW, которые являются альтернативными портами Коллекции компиляторов GNU для Windows и оба могут компилироваться в собственные исполняемые файлы Windows. В случае Cygwin установите Cygwin (выбрав Cygwin core + gcc-core + gnu make в меню установки). В случае MinGW вам снова понадобится только очень простая среда сборки C, поэтому установите MINGW ; вам нужно только ядро GCC и mingw32-make. Оба они создают приглашение Cmd, которое указывает пути в соответствующей инструментальной цепочке GCC. Переключитесь на
app/lua/luac_cross
и запустите make, чтобы собрать компилятор в корневом каталоге прошивки NodeMCU. Вы делаете это, позвонивmake
в Cygwin иmingw32-make -f mingw32-Makefile.mak
MinGW. - Вы также можете использовать MS Visual Studio (доступна бесплатная версия сообщества). Просто откройте прилагаемый файл решения MS (msvc \ hosttools.sln) и соберите его, чтобы получить файл luac.cross.exe Lua 5.1. В настоящее время для версии Lua 5.3 нет sln-файла.
- Когда у вас есть встроенный
luac.cross
исполняемый файл, вы можете использовать его для компиляции кода Lua в образ LFS. Возможно, вы захотите переместить его из иерархии nodemcu-firmware, поскольку эта иерархия папок больше не требуется и может быть удалена.
Linux
- Убедитесь, что у вас установлен набор инструментов GCC, необходимый для сборки.
- Загрузите текущие исходные коды NodeMCU (этот ZIP-файл разработчика или ZIP-файл выпуска ) и распакуйте в локальную папку; выберите версии master / dev в соответствии с версией прошивки, которую вы хотите использовать. Если вам нужен целочисленный элемент, отредактируйте
app/includes/user_config.h
файл, чтобы выбрать его. - Измените каталог на
app/lua/luac_cross
подпапку - Выполните
make
сборку исполняемого файла. - Когда у вас есть встроенный
luac.cross
исполняемый файл, вы можете использовать его для компиляции кода Lua в образ LFS. Возможно, вы захотите переместить это из иерархии nodemcu-firmware, поскольку эта иерархия папок больше не требуется и может быть удалена.
macOS
Что касается Linux
Скомпилируйте Lua в образ LFS
Выберите файлы Lua для запуска из LFS
Самый простой подход - сохранить все файлы Lua для вашего проекта в одном каталоге на вашем хосте. (Эти файлы будут скомпилированы luac.cross
для создания образа LFS на следующем шаге.)
Например, чтобы запустить Telnet и FTP-серверы из LFS, поместите следующие файлы в каталог проекта:
- lua_examples / lfs / _init.lua . Вспомогательные процедуры и функции LFS.
- lua_examples / lfs / dummy_strings.lua . Перемещение общих строк в LFS.
- lua_examples / telnet / telnet_fifosock.lua . Простой telnet- сервер (пример 1).
- lua_examples / telnet / telnet_pipe.lua . Простой telnet- сервер (пример 2).
- lua_modules / ftp / ftpserver.lua . Простой FTP- сервер.
Вы всегда должны включать первые два модуля, но оставшиеся файлы обычно заменяются файлами вашего собственного проекта. Также помните, что это примеры и что вы можете изменять или заменять их для собственных нужд приложения.
Примечание
Вам нужно будет взять компилятор luac.cross, который соответствует вашей конфигурации в отношении float / integer, Lua 5.1 / 5.3 и, возможно, выпуска.
Веб-служба кросс-компиляции LFS Lua Терри
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 (например 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)
- LFS теперь находится в требуемом пути, поэтому
require 'myModule'
работает должным образом.
Сделайте защищенный вызов этого _init
кода: pcall(node.LFS._init())
и проверьте статус ошибки. См. Более подробное описание в разделе « Методы и подходы к программированию» в техническом описании LFS.
Минимальный пример 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 , вместе, конечно, с эффективной проверкой ошибок.