ESP8266 NodeMCU. UART
ESP8266 має один UART порт. NodeMCU дозволяє використовувати ще один UART порт, який може тільки передавати дані, але нас цікавить тільки повноцінний порт. Невеличка складність використання UART виникає через те, що цей порт використовується для програмування плати NodeMCU. Коли запускається скрипт, який використовує UART, скрипт перехоплює всі данні які йдуть по порту UART, і NodeMCU вже не виконуватиме ніяких команд, поки скрипт не «відпустить" UART. Щоб уникнути блокування NodeMCU і забезпечити можливість відправляти команди, застосовуємо прийом, описаний в статті "ESP8266 NodeMCU Прошивка. Робимо WiFi розетку". Тобто, робимо авто-запуск головного скрипта з затримкою. Це дасть нам кілька секунд контролю над NodeMCU щоб виправити ситуацію якщо щось пішло не так. Приклад скрипта init.lua:
print("Waiting ...")
tmr.register(0, 5000, tmr.ALARM_SINGLE, function(t) tmr.unregister(0); print("Starting..."); dofile("uart1.lua") end)
tmr.start(0)
Примітка: NodeMCU дозволяє передавати інтерпретатору дані прийняті скриптом по порту UART. Для цього в функції
uart.on (method, [number / end_char], [function], [run_input])
останній параметр run_input повинен бути 1. Детальніше в документації https://nodemcu.readthedocs.io/en/master/en/modules/uart/ У більшості випадків порт UART використовують для прийому і відправки даних і, як правило, ця опція вимкнута.
Стандартна швидкість UART порту 115200bps. NodeMCU автоматично налаштовує коректну швидкість порта. Якщо до UART підключити, скажімо, GPS модуль, то NodeMCU підбере потрібну швидкість для коректної роботи. Це дуже зручно, оскільки різні модулі можуть працювати на різних швидкостях. Автоматичний підбір швидкості позбавляє від необхідності зберігати налаштування порту. Проте, можна чітко вказати параметри роботи UART порту за допомогою функції:
uart.setup (id, baud, databits, parity, stopbits [, echo])
Для читання даних з порту UART виконується реєстрація callback функції, якій передається прийняті символи. callback функція "чіпляється" на подію "data". Інших подій поки що немає. При реєстрації можна вказати, коли викликати функцію. При отриманні певної кількості символів або коли буде отримано вказаний символ, наприклад, символ кінця рядка. Коли така подія виникає, викликається функція і їй як параметр передається весь рядок, який був прийнятий. Приклад:
print(`Please enter parameter: `)
uart.on("data", "\r",
function(data)
print("Received from uart:", data)
uart.on("data") -- unregister callback function
end, 0)
Такий прийом введення параметрів використовується в деяких рішеннях для попередніх налаштувань, наприклад для налаштування WiFi мережі для підключення. Зверніть увагу, скрипт не очікує закінчення введення, а продовжує роботу. Описана функція буде викликана при отриманні символу "\r".
На LUA не прийнято використовувати "нескінченні цикли" для очікування будь-якого події, наприклад, для очікування завершення введення параметра. Тому, коли буде потрібно від користувача ввести послідовно два і більше параметра, доведеться використовувати рекурсивний виклик функції, як це зроблено в наступному прикладі:
-- Init Parameters
pCount = 2
pNames = {}
pNames[0] = "Parameter 1"
pNames[1] = "Parameter 2"
pValues = {}
pValues[0] = `default value`
pValues[1] = `default value`
function input(pNumber)
print(`Please enter `..pNames[pNumber]..`: `)
uart.on("data", "\r",
function(data)
-- Trim
data = string.gsub(data, "%s+", "")
-- If not empty
if data ~= `` then
pValues[pNumber] = data
end
print("Received from uart:", pValues[pNumber])
uart.on("data") -- unregister callback function
if (pNumber < pCount-1 ) then
input(pNumber+1)
else
print("Done.")
print(`-----------`)
for i=0,pCount-1,1 do
print(pNames[i]..`=`..pValues[i])
end
print(`-----------`)
end
end, 0)
end
input(0)
У наступній статті ми підключимо до ESP8266 GPS приймач і зробимо простий GPS трекер.
Детальна інформація про модуль UART у документації NodeMCU
Бажаю успіхів.
Дивись також:
- ESP8266 NodeMCU Перше знайомство. Робимо WiFi розетку
- ESP8266 NodeMCU. PWM
- ESP8266 NodeMCU. ADC
- ESP8266 NodeMCU. timer, rtc, SNTP, cron
- ESP8266 NodeMCU. файлова система, SD Card
- ESP8266 NodeMCU. UART
- GPS-трекер на базі ESP8266
- GPS-трекер + Дисплей SSD1306
- ESP8266 NodeMCU. SSD1306. U8G
- ESP-01 (ESP8266) upgrade flash memory to 4MB
- ESP8266 NodeMCU. I2C. BME280/
- Метеостанція на ESP8266
Недавні записи
- FOC - своя реалізація векторного керування. Підбиваю підсумки 2022 року
- Конструктор регуляторів моторів. Підбиваю підсумки 2022 року.
- Чому трифазні мотори стали такими популярними?
- FOC & Polar coordinates
- Конструктор регуляторів PMSM, BLDC двигунів
- Своя бібліотека для векторного керування безколекторними моторами
- Not Allowed
- Адаптивний ПІД регулятор
- Конструктор регуляторів моторів. Структура.
- Конструктор регуляторів моторів. Анонс.
Tags
st-link 3d-printer encoder servo solar java-script git wifi uart mpu-9250 sensors capture motor esp8266 nodemcu usb usart piezo rfid css atmega bmp280 bkp avr displays brushless watchdog battery sms rs-232 tim mpu-6050 barometer examples nvic pmsm dc-dc eb-500 soldering meteo rtc gpio books websocket docker dht11 led smd stm32 web timer dma lcd mpx4115a hih-4000 bldc ssd1306 adc mongodb python options eeprom raspberry-pi remap max1674 programmator ethernet foc ngnix ssd1331 gps flash exti bluetooth html bme280 i2c pwm flask
Архіви