Nodemcu lua: Esp8266 и Lua: первые шаги / Хабр

NodeMCU Lua WiFi для интернета вещей

Артикул: —

Добавить в избранное

Артикул: —

Артикул: —

Добавить в избранное

Соединительные провода

Добавить в избранное

Добавить в избранное

Релейные модули (реле)

Добавить в избранное

Добавить в избранное

Резисторы (10 шт)

Добавить в избранное

Добавить в избранное

Стойки монтажные (с винтом и без винта)

Добавить в избранное

Добавить в избранное

Датчик температуры и влажности DHT11

Добавить в избранное

Добавить в избранное

Макетки (макетка для прототипирования, двухсторонняя)

Добавить в избранное

Добавить в избранное

USB кабель (A — B) для Arduino UNO & Mega

Добавить в избранное

Добавить в избранное

Текстолит для печатных плат

Добавить в избранное

Добавить в избранное

Блок питания 5В 2А

Добавить в избранное

Добавить в избранное

Высокоточный датчик температуры и влажности DHT22

Добавить в избранное

Добавить в избранное

Модуль Bluetooth 3. 0 (Bluetooth HC-06)

Добавить в избранное

  • Преимущества от просто модулей ESP8266 (Ch440)
    1. NodeMCU Lua WiFi — уже содержит интерфейс UART-USB с разъемом micro USB. Поэтому для его подключения к компьютеру нужен лишь кабель MicroUSB.
    2. NodeMCU Lua WiFi — имеет выводы всех доступных сигналов с ESP8266.
    3. Ножки у платы NodeMCU расположены на стандартном расстоянии 2.54 мм, поэтому модуль легко установить на макетной плате.
    4. Программировать NodeMCU и загружать прошивки можно через Arduino IDE.

    5. Напряжение модуля — 3.3В. На плате есть регулятор напряжения, поэтому питать её можно через USB или внешее питание от 3.7 до 20В.

    Характеристики
    Беспроводной интерфейс: Wi-Fi 802.11 b/g/n 2,4 ГГц
    Режимы: P2P (клиент), soft-AP (точка доступа)
    Максимальная выходная мощность: 89 мВт
    Номинальное напряжение: 3.3 В
    Входное напряжение: 3. 7–20В (рекомендуется 10В)
    Максимальный потребляемый ток: 220 мА
    Портов ввода-вывода свободного назначения: 11
    Частота процессора: 80 МГц
    Объём памяти для кода: 64 КБ
    Объём оперативной памяти: 96 КБ

Добавить в избранное

16-ти канальный контроллер для управления серво по I2C

Артикул: A1

Добавить в избранное

Добавить в избранное

Датчик температуры и влажности SHT21 (GY-21)

Добавить в избранное

Добавить в избранное

Программатор ST-LINK V2 STM8/STM32

Добавить в избранное

Добавить в избранное

ROCKETEK CSR 4,0 A2DP Bluetooth-адаптер USB-ключ

Добавить в избранное

Добавить в избранное

Светящиеся маски под музыку и голос

Добавить в избранное

Добавить в избранное

Плата для разработки STM32F401CCU6 411CEU6

Добавить в избранное

Добавить в избранное

Геомагнитный датчик (компас) CJMCU-150 BMM150

Добавить в избранное

Добавить в избранное

Сенсор тока

Добавить в избранное

Добавить в избранное

Лазерный датчик расстояния VL53L0/1XV2 (TOF)

Добавить в избранное

Добавить в избранное

Тестер заряда USB устройств (QC 2. 0/3.0)

Добавить в избранное

Добавить в избранное

Светодиодная панель 12W 120X36mm

Добавить в избранное

Добавить в избранное

Колёса 1:10

Добавить в избранное

Избранное0Избранное

0Корзина0 c

NodeMCU (Lua) — GPIO

Работа с внешними устройствами происходит через порты ввода-вывода (GPIO). С их помощью можно как считывать сигналы, например с различных датчиков, так и управления другими устройствами. ESP8266 не может похвастаться большим количеством свободных портов. В зависимости от исполнения модуля (см. ниже), доступно разное число портов. Например, в ревизии ESP01, если не считать UART, имеется только два порта. Но даже в версиях где все порты выведены (ESP12E), без ограничений доступны только часть их, так как остальные совмещают системные функции (выбор режима загрузки, SPI флешь, вывод из сна).

Для работа с портами ввода-вывода в NodeMCU используется модуль GPIO. Если открыть документацию, первое что бросается в глаза это нумерацией портов GPIO (см. ниже), разработчики решили использовать свою нумерацию, поэтому нумерации портов NodeMCU и официальным обозначением портов ESP8266 отличается. Разрабатывая какое-то устройство при использовании плат NodeMCU или WeMos D1, где порты «правильно» подписаны, нумерация в коде и на самой плате одинаковая, но если разрабатывать на «голом» ESP8266 и руководствуясь официальным обозначением GPOI, то довольно часто приходиться заглядывать в таблицу.

При проектировании устройств на NodeMCU, для себя сделал такую пометку, свободных портов которыми можно пользоваться без каких либо ограничений (вход, выход, прерывания) всего 5 — это GPIO4, GPIO5, GPIO12, GPIO13, GPIO14. При использовании остальных необходимо учитывать их особенности. Поэтому внимательно читайте документацию во избежание проблем.

Для «нормальной» загрузки ESP8266 необходимо чтобы в момент старта (подачи питания) на портах GPIO0, GPIO2 присутствовал высокий, а GPIO15 низкий уровень.

GPIO16 можно настроить только как вход или выход, а если используем режим сна, «будить» его через определенный интервал времени, должен быть соединен с RESET.

Инициализация GPIO

Перед тем как начать работать с портом необходимо его про инициализировать, выбрав один из четырех режимов работы:

  1. Вход (gpio.INPUT)
  2. Выход (gpio.OUTPUT)
  3. Прерывания (gpio.INT)
  4. Открытый сток (gpio.OPENDRAIN)

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

С помощью функции gpio. mode(pin, mode [, pullup]) устанавливается режим работы. Функция принимает два  обязательных параметра (номер порта и режим работы) и один не обязательный (будет ли порт подтянут к питанию, по умолчанию не подтянут)

\-- настроить порт GPIO4 на выход 
gpio.mode(2, gpio.OUTPUT)
-- настроить порт GPIO5 на вход и включить подтяжку к питанию
gpio.mode(1, gpio.INPUT, gpio.PULLUP) 

Вход

Чтобы узнать какой логический уровень присутствует на порту, можно с помощью функции gpio.read(pin). Функции принимает один параметр номер порта который необходимо считать, а возвращает его состояние, 0 или 1 в зависимости от логического уровня на порту.

Считывать состояние порта можно как в режиме вход, так и выход.

pin = 1                       -- GPIO5 (см. в таблицу выше)
mode = gpio.INPUT             -- как вход
pullup = gpio.PULLUP          -- вкл. подтяжку порта к питанию
gpio.mode(pin, mode, pullup)  -- инициализируем порт
result = gpio.read(pin)       -- получаем состояние порта
print(result)                 -- выводим состояние в консоль

Выход

Состояние логического уровня на выходе порта меняется с помощью функции gpio.write(pin, level). В отличии от функции чтения, функция записи ничего не возвращает, а на вход поступает уже два параметра, это номер порта и необходимый логический уровень на его выходе.

pin = 2                       -- GPIO4 (см. в таблицу выше)
mode = gpio.OUTPUT            -- как выход
gpio.mode(pin, mode)          -- инициализируем порт
gpio.write(pin, gpio.HIGH)    -- установить высокий уровень 1
print(gpio. read(pin))         -- выводим состояние порта в консоль
gpio.write(pin, gpio.LOW)     -- установить низкий уровень 0
print(gpio.read(pin))         -- выводим состояние порта в консоль

Прерывания

Разобрав работу функций чтения мы можем проверить текущий уровень порта, но что если нам необходимо отслеживать изменения уровня и как-то на него реагировать. Для этого нам нужно подписатся на какое-то событие, в этом нам поможет функция 

gpio.trig(pin, [type [, callback_function]]). Функция принимает два параметра, номер порта и типа события на который хотим подписаться, а также callback функцию, которая будет вызвана если произойдет данное событие.

Типы событий.

  • up — отслеживание по переднему фронту, то есть будет вызвана в момент перехода от логического низкого уровня на высокий.
  • down — отслеживание по заднему фронту, то есть будет вызвана в момент перехода от логического высокого уровня на низкий.
  • both — отслеживание обоих фронтов, как по переднему так и заднему фронту
  • low — отслеживание низкого логического уровня, то есть будет срабатывать пока присутствует низкий логический уровень
  • high — отслеживание высокого логического уровня, то есть будет срабатывать пока присутствует высокий логический уровень
  • none — отписаться от всех прерываний

Например, чтобы отследить нажатие кнопки достаточно нескольких строк кода. Для этого нужно создать событие и функцию обработки события. Когда кнопка будет нажата, будет запущена наша функция.

pin = 1                           -- GPIO5 (см. в таблицу выше)
mode = gpio.INT                   -- режим прерывания
gpio.mode(pin, mode, gpio.PULLUP) -- инициализируем порт
function callback(level, time)    -- callback функция
    print(level, time)            -- выводим в консоль уровень и время
end
gpio.trig(pin, "down", callback)  -- подписываемся на событие 

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

pin = 1                                    -- GPIO5 (см. в таблицу выше)
mode = gpio.INT                            -- режим прерывания
function debounce(pin)                     -- callback функция
  local last, delay = 0, 200000            -- устанавливаем задержку в 0,2 сек 
  return function (level, time)
    if time - last < delay then return end
    if gpio. read(pin) == 0 then            -- проверяем текущий уровень 
      last = time
      print("OK")
    end
  end
end
gpio.mode(pin, mode, gpio.PULLUP)          -- инициализируем порт
gpio.trig(pin, 'down', debounce(pin))      -- подписываемся на событие

В случае если необходимо отписаться от всех событий, сделать это можно с помощью той же функции gpio.trig(pin, type), но указав в качестве второго параметра none.

pin = 1
gpio.trig(pin, "none")

Как видно модуль GPIO и асинхронность LUA упрощает работу с портами ввода-вывода, достаточно пары строк кода чтобы узнать, изменить состояние порта или повесить на него событие, этого более чем достаточно для простых задач. Но что касается генерации или замера цифрового сигнала, то тут не все так радужно. Если для генерацией сигналов с последними обновлениями появились новые функции (gpio. serout и gpio.pulse), которые позволяют формировать различные импульсы с минимальными интервалами по времени, то вот с подсчетом их дела обстоят немного хуже. При максимально возможной частоте, подсчет занимает все ресурсное время не оставляя его для других операций. Но и даже при подсчете коротких импульсов одного и того же сигнала можно наблюдать разный результат, особенно это заметно в нагруженных проектах. Эта расплата за асинхронность

При изучении модулей NodeMCU в первую очередь руководствуйтесь официальной документацией, т.к. постоянно вносятся изменения и возможно что некоторая информация потеряет свою актуальность.

Использование NodeMCU Lua | Adafruit HUZZAH ESP8266 прорыв

Сохранить Подписаться

Пожалуйста, войдите, чтобы подписаться на это руководство.

После входа в систему вы будете перенаправлены обратно к этому руководству и сможете подписаться на него.

Мы обнаружили, что Lua лучше всего подходит для ввода коротких команд для тестирования, мы предлагаем Arduino IDE как лучший и наиболее проверенный программный интерфейс!

Каждый коммутационный блок HUZZAH ESP8266 предварительно запрограммирован с помощью интерпретатора NodeMCU Lua. На момент написания этой статьи мы отправляем NodeMCU 0.9.5, сборка 20150318 на основе Lua 5.1.4 , но может быть более поздней версии

Lua все еще находится в стадии разработки, поэтому мы настоятельно рекомендуем посетить NodeMCU и обновить версию Lua до самой последней, поскольку у них есть такая возможность. чтобы сделать вам последнюю непрерывную сборку. Затем следуйте их руководству по обновлению Lua!

Интерпретатор Lua работает на ESP8266, и вы можете вводить команды и считывать результаты через последовательный порт. Последовательный консольный кабель идеально подходит для этого! Используйте либо кабель FTDI, либо любой консольный кабель, вы можете использовать логику и питание 3 В или 5 В, поскольку на выводе RX есть сдвиг уровня.

Не забудьте посетить esp8266.com, чтобы быть в курсе последних новостей, программного обеспечения и слухов об ESP8266!

Подключите консольный кабель или кабель FTDI. При использовании FTDI убедитесь, что черный провод идет к контакту GND (земля)

.

При использовании консольного кабеля подключите черный провод к земле, красный провод к V+ , белый провод к TX и зеленый провод к RX

Вы увидите, как красный и синий светодиоды на плате мигают при включении питания, но они не будут гореть постоянно.

Затем на вашем компьютере используйте программу последовательной консоли, такую ​​как CoolTerm (Mac) или Putty (Windows) или screen (linux). Teraterm, кажется, не любит исходный поток данных 115,2 кбит/с от ESP8266, поэтому вы можете попробовать, но вам, возможно, потребуется сбросить программное обеспечение терминала.

Подключитесь к COM или последовательному порту, используемому вашим кабелем, на скорости 9600 бод

Убедитесь, что вы отключили аппаратное квитирование или управление потоком0014 окончание строки установлено в CRLF «\r\n» Вы также можете включить межсимвольную задержку, если вы вставляете большие фрагменты кода. Программное обеспечение каждого терминала отличается в настройке, проверьте руководство для программного обеспечения, которое вы используете!

 

После подключения программного обеспечения терминала нажмите кнопку Reset на плате HUZZAH ESP, чтобы сбросить его и распечатать приветственное сообщение:

Если вы не получили это сообщение, сначала убедитесь, что красный/синий светодиоды мигают при нажатии кнопки сброса. Если они этого не сделали, убедитесь, что плата питается через В+ или Вбат . Если они мерцают, убедитесь, что в программном обеспечении выбрана правильная скорость передачи данных (9600), а контакты RX/TX/GND подключены правильно.

Хорошо, теперь мы можем включить светодиод. На каждой плате есть красный светодиод, подключенный к GPIO #0

Распиновка NodeMCU отличается от распиновки Arduino/gcc. Мы печатаем распиновку Arduino на плате, так что будьте осторожны!

Примечания по выводам

Печатная плата/Arduino

NodeMCU/Lua

Никаких подтягиваний!

0

3

2

4

3

9

4

1

5

2

9

11

10

12

12

6

13

7

14

5

15

8

16

0

Таким образом, чтобы включить и выключить светодиод на выводе № 0, сначала сделайте его выводом, набрав (не копируя и вставляя)

 gpio. mode(3, gpio.OUTPUT) 

Включите светодиод, набрав (не копировать и вставить)

 gpio.write(3, gpio.LOW) 

И отключить, набрав (не копировать и вставить)

 gpio.write(3, gpio.HIGH) 

Вы можете сделать это немного более автоматизированным запустив более длинный скрипт.

Для более длинного текста вставка может быть затруднена, поскольку интерпретатору lua требуется небольшая задержка между символами, а также требуются настройки CR-LF. По этой причине вы можете вставить каждую строку, а затем нажать «Ввод» вручную.

 gpio.mode(3, gpio.OUTPUT)
пока я делаю
  gpio.write(3, gpio.HIGH)
  tmr.delay(1000000) -- ждать 1 000 000 мкс = 1 секунда
  gpio.write(3, gpio.LOW)
  tmr.delay(1000000) -- ждать 1 000 000 мкс = 1 секунда
конец 

Теперь светодиод будет мигать.

Обратите внимание, что, поскольку он находится в цикле, его невозможно остановить с помощью интерпретатора. Чтобы остановить его, нажмите кнопку Reset еще раз!

Этот код останавливает процессор во время tmr. delay, более разумный способ мигать светодиодом — использовать возможность таймера для включения управления светодиодом (код отсюда)

 -- Определение контакта
локальный контакт = 3
локальный статус = gpio.LOW
локальная продолжительность = 1000 -- 1 секунда для таймера
-- Инициализация булавки
gpio.mode(pin, gpio.OUTPUT)
gpio.write(pin, статус)
-- Создать интервал
tmr.alarm(0, продолжительность, 1, функция ()
    если статус == gpio.LOW тогда
        статус = gpio.HIGH
    еще
        статус = gpio.LOW
    конец
    gpio.write(pin, статус)
конец) 

Мы продолжим краткую демонстрацию поиска WiFi и подключения.

Когда вы вернетесь к подсказке Lua, установите ESP8266 в режим WiFi-клиента с помощью

 wifi.setmode(wifi.STATION) 

Затем вы можете запустить сканер и распечатать доступные точки доступа

 -- распечатать список приложений
список функций(t)
      для k, v в парах (t) сделать
        напечатать(к.." : "..в)
      конец
конец
wifi.sta. getap(listap) 

или для более подробной информации…

 -- распечатать список приложений
список функций(t)
      для ssid,v попарно(t) делать
        режим авторизации, rssi, bssid, канал =
          string.match(v, "(%d),(-?%d+),(%x%x:%x%x:%x%x:%x%x:%x%x:%x%x) ,(%d+)")
        печать (ssid, authmode, rssi, bssid, канал)
      конец
конец
      
wifi.sta.getap(список) 

Мы можем подключиться к точке доступа с wifi.sta.config и wifi.sta.connect — для завершения соединения потребуется секунда или две, вы можете запросить модуль, чтобы узнать статус с wifi. sta.status () — когда вы получаете 5, это означает, что соединение установлено и DHCP успешно

 wifi.sta.config («имя точки доступа», «ваш пароль»)
wifi.sta.connect ()
tmr.delay(1000000) -- ждать 1 000 000 мкс = 1 секунда
печать (wifi.sta.status ())
печать (wifi.sta.getip())
     

Получив IP-адрес, вы можете подключиться, например, к adafruit, прочитать веб-страницу и распечатать ее:

 sk=net. createConnection(net.TCP, 0)
sk:on("получить", function(sck, c) print(c) end )
ск:подключить(80,"104.236.193.178")
sk:send("GET /testwifi/index.html HTTP/1.1\r\nHost: wifitest.adafruit.com\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n" ) 

Вы также можете сделать так, чтобы модуль выполнял DNS за вас, просто дайте ему имя хоста вместо IP-адреса:

 ск=net.createConnection(net.TCP, 0)
sk:on("получить", function(sck, c) print(c) end )
ск:подключить(80,"wifitest.adafruit.com")
sk:send("GET /testwifi/index.html HTTP/1.1\r\nHost: wifitest.adafruit.com\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n" ) 

Это всего лишь краткий обзор тестирования вашего прорыва HUZZAH ESP! Чтобы узнать больше, посетите страницу документации NodeMCU https://nodemcu.readthedocs.io/, чтобы узнать, какие функции вам доступны, а также http://www.lua.org, чтобы узнать больше о языке сценариев Lua.

Сборка Использование Arduino IDE

Это руководство было впервые опубликовано 24 апреля 2015 г. обновлено 24 апреля 2015 г.

Эта страница (использование NodeMCU Lua) последний раз обновлялась 24 апреля 2015 г.

Текстовый редактор на базе tinymce.

ESP8266 Lua Учебники | Hackaday.io

Lua — это мощный и простой язык сценариев, используемый во многих различных приложениях. Он добился большого успеха в разработке игр и теперь находит новый дом в разработке IoT. NodeMCU создал прошивку для ESP8266, основанную на интерпретаторе Lua. Мы поможем вам начать работу с Lua на этой популярной платформе Интернета вещей!

Детали

Ссылки на другие руководства этой серии:

Учебное пособие по ESP8266 SDK Узнайте, как использовать ESP8266 SDK. Этим пользуются профессионалы!
Учебное пособие по ESP8266 Lua/NodeMCU
(Вы здесь!)
Взгляд на интерпретатор NodeMCU Lua для ESP8266. Узнайте, как добраться до Блинки!
ESP8266 Учебное пособие по Arduino Используйте Arduino IDE, чтобы упростить разработку и быстро освоиться!

А вот ссылки на другие руководства в Часть 2 :

Ссылки на Часть 3 :

  • Спросите в разделе обсуждения под статьей
  • Присоединяйтесь к каналу ##esp8266 на Freenode IRC и отправьте пинг мне (MrAureliusR) или спросите любого, кто там находится. Если ваш вопрос конкретно связан с языком Lua, вы также можете попробовать #lua
  • Сообщение на форумах сообщества ESP8266 (учтите, что получение ответа может занять некоторое время!)
  • Отправьте мне личное сообщение здесь, на Hackaday
  • ESP8266 уже давно пользуется популярностью. Низкая стоимость модуля в сочетании с его мощностью и надежностью привела к тому, что продажи чипа взлетели до небес. Там много ресурсов, но я хотел объединить всю эту информацию в одном месте. Итак, приступим!

    ESP8266 был разработан китайской полупроводниковой компанией Espressif. Fabless означает, что они просто создают дизайн чипа, и они привлекают другую компанию для фактического производства кремния (Atmel также была полупроводниковой компанией без фабрики). В то время как Wi-Fi на чипе с микроконтроллером не был новой идеей, концепция простого последовательного канала для управления им из коробки была таковой. Любители со всего мира начали экспериментировать с чипом, чтобы посмотреть, на что он способен. Без необходимости программировать ESP можно разрабатывать сложные приложения IoT, используя ESP просто как внешний чип Wi-Fi. Это самый простой способ для тех, кто не хочет углубляться в сам ESP. Вы можете использовать AT-команды по последовательному каналу для управления чипом. Это единственный способ управлять модулями ESP, которые имеют только 8 контактов. Полный список набора AT-команд можно найти здесь. Это вполне приемлемое решение для многих хакеров, и если это все, что вам нужно, то отлично! Я построил модуль регистрации данных, который использовал сервер Sparkfun phant в качестве бэкэнда, используя только AT-команды. Подключить его к моей сети Wi-Fi и отправить данные было очень просто.

    Тем не менее, многие из вас здесь, потому что хотят погрузиться глубже в мощь, лежащую в основе ESP8266. Вы хотите запрограммировать модуль с помощью Arduino или SDK. Вам интересно поиграть с Lua и узнать, как его можно использовать во встроенной системе, подобной этой. Обычно я рекомендую людям, плохо знакомым с ESP8266, покупать готовый модуль от таких компаний, как SparkFun или Adafruit.

    The Adafruit Feather HUZZAH с ESP8266

    Это значительно упрощает вращение собственной доски. Но если вы хотите раскрутить свою собственную доску, используя, скажем, модуль ESP-12F, вот несколько советов (пропустите раздел с руководством, если вы купили HUZZAH Feather, SparkFun Thing или что-то подобное):

    • Решите, какой модуль вы хотите использовать. Модули изначально были разработаны компанией AI Thinker, но теперь их широко клонируют. Некоторые из них имеют встроенные регуляторы напряжения 3,3 В, другие — нет. Найдите время, чтобы найти надежный источник, и внимательно изучите требования к…

    Подробнее »

    Посмотреть все подробности

    nodemcu-master-23-modules-2018-07-30-03-07-45-float.bin

    Копия прошивки, созданной сборщиком облачных прошивок NodeMCU, с предлагаемыми модулями в соответствии с руководством. Здесь для удобства тех, кто хочет пропустить этап сборки.

    поток октетов — 476,77 КБ — 26.09.2018 в 18:56

    Скачать

    lubuntu_esp8266.ova.торрент

    Lubuntu VM для разработки ESP8266. Образы SDK, Arduino и Lua уже установлены/готовы к использованию.

    x-битторрент — 38,24 КБ — 03. 08.2018 в 18:50

    Скачать
    • 1

      Получение прошивки NodeMCU

      Многие платы ESP8266 поставляются с предустановленным интерпретатором Lua. NodeMCU — это и название прошивки, и плата для разработки ESP8266, которая поставляется с предустановленной прошивкой NodeMCU. Прошивка может быть собрана из множества различных модулей, которые изменят размер прошивки. Это удобно, поскольку не все модули имеют одинаковый размер флэш-памяти. С ESP-12F у нас есть 32 Мбит или 4 Мбайт флэш-памяти, что довольно много.

      Плата разработки NodeMCU

      Существует онлайн-сервис, который создаст для вас прошивку NodeMCU! Просто выберите нужные параметры, введите адрес электронной почты и нажмите «Создать». Хорошую универсальную прошивку можно собрать с помощью следующих опций:

      Не стесняйтесь добавлять или удалять ненужные вам вещи, но будьте осторожны и не добавляйте слишком много модулей. Возможно, вы не сможете разместить его на своем устройстве. Не выбирайте какие-либо другие варианты. Когда вы будете готовы, нажмите «Создать». Когда сервер не занят, вам обычно требуется меньше минуты, чтобы получить электронное письмо со ссылкой на прошивку. Если сервер очень загружен, это может занять больше времени.

      После того, как вы загрузили прошивку, мы можем запрограммировать ее на плату. Во всех ОС мы можем использовать esptool для его установки. Вам понадобится уже установленный Python 2.7 или 3.4+. Идите вперед и установите его:

      pip install esptool 

      В Windows у вас также есть опция графического интерфейса, которая называется NodeMCU Flasher. Это установит прошивку с параметрами по умолчанию, но вы также можете установить собственную прошивку, используя вкладку «Конфигурация». Инструкции есть на странице GitHub, расположенной здесь.

      С помощью esptool нам сначала нужно перейти в каталог, в который была загружена прошивка. Затем прошейте его с помощью этой команды:

      esptool.py --port [порт] write_flash -fm=dio -fs=32m 0x00000 nodemcu-master...-float.bin 

      Замените [порт] портом, к которому подключено ваше устройство. В Linux это обычно /dev/ttyUSB0, а в Windows это COM-порт. Проверьте диспетчер устройств, чтобы узнать, какой порт ему был назначен. Также убедитесь, что выбран правильный размер вспышки. Если у вас другой модуль, у вас может быть 1 МБ флэш-памяти, и в этом случае вы должны использовать -fs=8m, а некоторые модули имеют только 512 КБ флэш-памяти, и в этом случае вы должны использовать -fs=4m. Эту информацию должно быть легко найти там, где вы приобрели модуль.

      После завершения прошивки мы готовы подключиться к терминалу Lua! Нам понадобится некоторое программное обеспечение для доступа к последовательному порту. Окончательный выбор последовательного терминала остается за читателем, но в интересах целесообразности вот несколько рекомендаций:

      В Windows я настоятельно рекомендую RealTerm . Пользовательский интерфейс немного сложен, но он очень стабилен и имеет множество опций. Для Linux я рекомендую использовать minicom , если вы хотите использовать последовательный терминал командной строки. Обязательно отключите программное/аппаратное управление потоком данных в minicom — оно включено по умолчанию! Для графического интерфейса я рекомендую gtkterm . CuteCom слишком прост, и мне не удалось заставить moserial работать под Budgie, хотя вам, возможно, повезет больше. Я слышал, что на OSX CoolTerm вполне хорош. Он также доступен для Windows и Linux. В OSX есть много других вариантов, но у меня недостаточно опыта работы с ними, чтобы рекомендовать один из них другому.

      Подсказка NodeMCU после сброса

      Используйте любой последовательный терминал, который вы выберете, для подключения к ESP8266 на скорости 115200 бод, 8 бит, 1 стоповый бит, без четности, без аппаратного управления потоком. нет программного управления потоком. После подключения нажмите Enter, и вы должны увидеть приглашение Lua:

      > 

      Теперь мы готовы перейти к Блинки! Если вы не видите подсказку или получаете ошибки при попытке подключения, наиболее распространенными проблемами являются:

      • В Linux убедитесь, что ваш пользователь является членом группы дозвона. Вы можете добиться этого с помощью команды sudo usermod -a -G dialout username
      • В Windows убедитесь, что у вас правильный последовательный порт. Убедитесь, что никакое другое приложение не пытается его использовать. Проверьте Диспетчер устройств, чтобы убедиться, что установлены правильные драйверы. Здесь же вы можете увидеть номер порта, который ему был назначен
      • Попробуйте использовать другую программу последовательного терминала
      • В крайнем случае вы можете попробовать запустить последовательный терминал с правами суперпользователя. В Linux используйте sudo, а в Windows щелкните правой кнопкой мыши и выберите «Запуск от имени администратора».
    • 2

      Блинки с Lua!

      Теперь, когда у нас установлена ​​прошивка, пора начать играть с Lua. Lua — это язык сценариев, который существует уже много лет. Он был разработан в 1993 в Бразилии группой университетских исследователей. Им нужен был расширяемый, простой в использовании язык программирования, а Python в то время находился в зачаточном состоянии и не получил широкого распространения. Кроме того, торговые ограничения означали, что им приходилось разрабатывать большую часть программного обеспечения с нуля. Так родился Луа. В нем есть элементы, заимствованные из многих других языков. Он чем-то похож на Python и Ruby, но имеет много особенностей, которые делают его очень привлекательным для многих различных приложений. Он чрезвычайно легкий и быстрый для интерпретируемого языка. Он может взаимодействовать с C изначально, что дает ему большую гибкость.

      Однако для начала вам не нужно знать Lua. Вы очень быстро освоите основы. Тем не менее, я настоятельно рекомендую потратить час или два на изучение основ Lua. Вот отличный онлайн-учебник, предназначенный для начинающих. Это принесет свои плоды по мере того, как мы будем двигаться дальше в изучении того, как использовать NodeMCU.

      Те из вас, кто знаком с Python, знают, что приглашение интерпретатора хоть и полезно, но не там, где пишутся настоящие программы. Это отличный способ протестировать небольшие фрагменты кода или поэкспериментировать при изучении новых концепций. Но, как и в большинстве языков, реальная сила заключается в написании полных скриптов в отдельном файле. На компьютере это затем передается интерпретатору, который выполняет сценарий вместо открытия приглашения. На ESP8266 нам нужно записать файл во флэш-память и указать интерпретатору Lua выполнить его при запуске. Но прежде всего давайте взглянем на нашу программу Blinky:

      led = 3 -- NodeMCU использует другую схему нумерации
      tmr. alarm(1, 1000, tmr.ALARM_AUTO, функция()
          gpio.write(светодиод, gpio.LOW)
          tmr.delay(100000)
          gpio.write(светодиод, gpio.HIGH)
      конец) 

      Это показывает мощность NodeMCU. Это самое короткое и лаконичное приложение Blinky из трех вариантов, которые мы представляем в этих руководствах. Одна загвоздка в том, что NodeMCU использует систему нумерации для платы NodeMCU независимо от того, какой модуль вы используете. Поэтому вам нужно обратиться к схеме выводов NodeMCU и проверить, какой GPIO соответствует какому выводу. Как мы видим, GPIO0 сопоставляется с контактом 3, GPIO2 сопоставляется с контактом 4, а GPIO5 сопоставляется с контактом 1. Это наиболее распространенные места для светодиодов.

      Схема выводов NodeMCU

      В этом примере используется интересная особенность Lua, заключающаяся в том, что мы можем объявлять функции где угодно. Функция tmr.alarm() принимает четыре аргумента. Первый — идентификатор таймера (0-6), второй — период в мс, третий — тип таймера (либо tmr. ALARM_SINGLE для одноразового таймера, либо tmr.ALARM_SEMI для таймера, запускаемого вручную, либо tmr. ALARM_AUTO для автоматически повторяющегося таймера) и функцию обратного вызова для вызова при срабатывании таймера. Вместо указания имени функции мы просто объявляем функцию в качестве четвертого аргумента. Эта функция устанавливает низкий уровень на выводе GPIO, ждет 100 мс, а затем снова устанавливает высокий уровень. Это повторяется каждые 1000 мс, и мы получаем мигающий светодиод!

      Отлично, но теперь нам нужно установить это как файл init.lua на ESP8266. Для этого нам нужен последний инструмент под названием luatool.py. Его можно клонировать с GitHub здесь. Я клонирую его в свою папку ~/workspace/ESP8266. Таким образом, он легко доступен. Вы можете клонировать его в любом удобном и легко запоминающемся месте. Как я уже говорил ранее, я настоятельно рекомендую создать папку под названием workspace, независимо от того, какую ОС вы используете, и хранить в ней все инструменты разработки, проекты и документацию.

      После клонирования перейдите в подкаталог luatool, и вы увидите несколько файлов. Среди них пример init.lua и сам инструмент luatool.py. Откройте init.lua в любом редакторе, удалите весь код, который там есть, а затем введите или скопируйте/вставьте в наш пример Blinky. Сохраните его и прошейте в ESP8266:

      .
      python2 luatool.py --port [порт] --src init.lua --dest init.lua --verbose 
      Предупреждение: параметр —src должен быть либо файлом в текущем каталоге, либо должен быть абсолютным путем . Он не будет принимать относительные пути, т.е. ./projects/init.lua. Это ловило меня несколько раз! Кроме того, мне пришлось выполнить сброс, затем отключить и снова подключить мой Feather HUZZAH, а затем запустить luatool.py дважды подряд, чтобы заставить его запрограммировать init.lua. Если вы получили сообщение об ошибке «Нет правильного ответа от MCU», попробуйте перезагрузить плату, снова подключить USB-кабель и запустить luatool несколько раз подряд. Это может быть связано с особенностями USB-контроллера моего ноутбука, но если у вас возникнут похожие проблемы, дайте мне знать!

      Замените порт на порт, к которому подключен ваш ESP8266. Вернитесь к первому шагу, чтобы узнать, как его найти. После этого вам может потребоваться перезагрузить плату вручную, нажав кнопку сброса. Затем вы должны увидеть мигающий светодиод! Довольно круто, правда?

      Этот пример показывает нам несколько вещей, которые останутся верными, независимо от того, какой язык или метод вы используете для программирования ESP8266:

      • Номера выводов и номера GPIO не всегда совпадают. Обязательно ознакомьтесь с документацией или схемами, которые прилагаются к вашей плате!
      • Даже с NodeMCU, довольно высокоуровневым слоем абстракции, мы все еще можем писать код в простом редакторе и загружать его с помощью командной строки. Мы также могли бы настроить продвинутую IDE со всевозможными функциями, но красота ESP8266 заключается в гибкости, которую предоставляют инструменты.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *