Основные материалы по NodeMCU мы собираем на нашей WIKI

Overview

Basics

Reference

FAQs

Whitepapers

Lua Modules

C Modules

Начало работы c NodeMCU

Основной процесс начала работы с NodeMCU состоит из следующих трех шагов.

  1. Соберите прошивку с нужными вам модулями
  2. Прошить прошивку на чип
  3. Загрузите код на устройство.

Обычно вы выполняете шаги 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

  1. Разверните панель «Параметры LFS».
  2. Выберите размер LFS, 64 КБ, вероятно, будет достаточно большим
  3. Выберите другие варианты и соберите

↑ назад к матрице

Обратите внимание, что эта служба не поддерживается командой NodeMCU. Тем не менее, им управляет член команды NodeMCU как физическое лицо.

NodeMCU PyFlasher

Автономный флешер NodeMCU с графическим интерфейсом на основе Python, esptool.py (см. Ниже) и wxPython. Доступен исполняемый файл .exe для Windows и .dmg для macOS.

В Windows и macOS установка не требуется! Инструкции по запуску на других платформах доступны на сайте проекта.

  1. Установите драйверы для USB-последовательного порта . Какой драйвер вам нужен, зависит от используемого модуля ESP8266 или преобразователя USB-последовательный порт.
  2. Подключите USB-кабель к устройству и компьютеру.
  3. Загрузите и запустите PyFlasher
  4. Выберите последовательный порт, найдите двоичный файл прошивки и установите параметры флэш-памяти.

↑ назад к матрице

Обратите внимание, что этот инструмент не является официальным предложением NodeMCU. Тем не менее, он поддерживается членом команды NodeMCU как физическим лицом.

esptool.py

esptool.py был начат как усилие сообщества ESP8266, но с тех пор был принят Espressif. Это их официально рекомендуемый способ прошивки микропрограмм на чипы ESPxxx.

  1. 58586Установите драйверы для USB-последовательного порта . Какой драйвер вам нужен, зависит от используемого модуля ESP8266 или преобразователя USB-последовательный порт.
  2. Установите в вашей системе Python 2.7 или Python> = 3.4 , если он еще не доступен.
  3. Подключите USB-кабель к устройству и компьютеру.
  4. $ pip install esptool (также устанавливает pySerial)
  5. $ 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 / последовательный порт

Быстрый старт:

  1. Установите Node.js и NPM, если они еще не доступны
  2. Установите NodeMCU-Tool глобально $ npm install nodemcu-tool -g
  3. Проверить установку, запустив $ nodemcu-tool --version
  4. Загрузить в файл Lua $ nodemcu-tool upload --port=/dev/ttyUSB0 helloworld.lua
  5. Запустить его $ nodemcu-tool run helloworld.lua

Обратите внимание, что вам может потребоваться использовать sudoпрефикс для установки инструмента на шаге 2, а также, возможно, добавить –unsafe-permфлаг после команды установки.

↑ назад к матрице

Докер

Сборки изображение Docker NodeMCU это самый простой способ для создания NodeMCU связанных компонентов локально на предпочтительной платформе.

Предложение:

  • сборка прошивки NodeMCU на основе локально клонированных источников и конфигурации
  • локально компилировать файлы Lua в образ LFS

Подробные инструкции доступны в README изображения. Что касается доступных параметров конфигурации, проверьте документацию и изучите комментарии в app/include/user_config.h.

Для LFS

  1. В app/include/user_config.hотредактируйте строку #define LUA_FLASH_STORE 0x0и отрегулируйте размер до необходимого. Обратите внимание, что это должно быть кратно 4 Кбайт.
  2. Выполните сборку так, как вы бы иначе создавали это изображение (т.е. см. Его 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.makMinGW.
  • Вы также можете использовать 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, поместите следующие файлы в каталог проекта:

Вы всегда должны включать первые два модуля, но оставшиеся файлы обычно заменяются файлами вашего собственного проекта. Также помните, что это примеры и что вы можете изменять или заменять их для собственных нужд приложения.

Примечание

Вам нужно будет взять компилятор 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 .

  1. $ cd <your-nodemcu-firmware-folder>
  2. $ 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.

  1. $ cd <project-dir>
  2. $ 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 , вместе, конечно, с эффективной проверкой ошибок.