
GPIO Extender uLua: примеры кода
Примеры кода для GPIO Extender uLua: кнопка и реле, порог АЦП и термостат с DHT22. Подключение, код и изменяемые параметры.
Эти примеры можно запустить без изучения всего справочника uLua. Каждый файл решает одну типовую задачу и использует только возможности, доступные в прошивке GPIO Extender uLua.
Как запустить пример
- Откройте uLua веб-IDE и подключите устройство.
- Нажмите «Стоп», если в контроллере уже выполняется программа.
- Скопируйте код выбранного примера в редактор.
- Сначала нажмите «Скомпилировать и запустить» и проверьте схему.
- Только после проверки нажмите «Записать», чтобы программа запускалась после включения питания.
Во всех примерах выход hw.p1 выключен при старте. Они рассчитаны на релейный
модуль с логическим входом 3,3 В, который включается уровнем 1. Для модуля с
активным уровнем 0 поменяйте местами значения 0 и 1 в вызовах
hw.gpio_set.
К GPIO нельзя подключать катушку реле, двигатель или другую силовую нагрузку напрямую. Используйте релейный либо транзисторный модуль и соедините GND схемы с GND контроллера.
Кнопка переключает реле
Подключите кнопку между hw.p6 и GND, а логический вход релейного модуля — к
hw.p1. У входа hw.inp включена внутренняя подтяжка: отпущенная кнопка читается
как 1, нажатая — как 0. Каждое нажатие меняет состояние реле; ожидание
отпускания и пауза 30 мс подавляют дребезг контактов.
Открыть исходник gpio-button-relay.lua
local BUTTON_PIN = hw.p6
local RELAY_PIN = hw.p1
local relay_on = false
hw.gpio_init(RELAY_PIN, hw.out)
hw.gpio_set(RELAY_PIN, 0)
hw.gpio_init(BUTTON_PIN, hw.inp)
while true do
if hw.gpio_get(BUTTON_PIN) == 0 then
relay_on = not relay_on
if relay_on then
hw.gpio_set(RELAY_PIN, 1)
else
hw.gpio_set(RELAY_PIN, 0)
end
while hw.gpio_get(BUTTON_PIN) == 0 do
hw.delay_ms(10)
end
hw.delay_ms(30)
end
hw.delay_ms(10)
end
Чтобы использовать другой вход или выход, измените только BUTTON_PIN и
RELAY_PIN в первых строках.
Аналоговый датчик включает выход по порогу
Подайте сигнал 0–3,3 В на hw.p5, подключите вход релейного модуля к hw.p1 и
объедините земли. АЦП возвращает значение от 0 до 1023. При значении 700 и
выше реле включается, а при снижении до 650 выключается. Разница между
порогами не даёт выходу быстро переключаться около одной точки.
Открыть исходник gpio-adc-threshold.lua
local SENSOR_PIN = hw.p5
local RELAY_PIN = hw.p1
local ON_LEVEL = 700
local OFF_LEVEL = 650
local relay_on = false
hw.gpio_init(RELAY_PIN, hw.out)
hw.gpio_set(RELAY_PIN, 0)
hw.adc_start(SENSOR_PIN, 20)
hw.delay_ms(100)
while true do
local value = hw.adc_read(SENSOR_PIN)
if not relay_on and value >= ON_LEVEL then
relay_on = true
hw.gpio_set(RELAY_PIN, 1)
hw.cdc_write("relay on, adc=" .. value .. "\n")
elseif relay_on and value <= OFF_LEVEL then
relay_on = false
hw.gpio_set(RELAY_PIN, 0)
hw.cdc_write("relay off, adc=" .. value .. "\n")
end
hw.delay_ms(100)
end
Задайте свои пороги в ON_LEVEL и OFF_LEVEL. Сообщения о переключениях можно
увидеть в CDC-терминале IDE.
Термостат с DHT22
Подключите DATA датчика DHT22/AM2302 к hw.p6, VCC — согласно исполнению
датчика, GND — к GND. Если на модуле нет собственной подтяжки, поставьте
резистор 4,7–10 кОм между DATA и питанием. Релейный модуль подключите к hw.p1.
Открыть исходник gpio-dht-thermostat.lua
local SENSOR_PIN = hw.p6
local RELAY_PIN = hw.p1
local ON_TEMP = 300
local OFF_TEMP = 270
local relay_on = false
local last_sample = 0
hw.gpio_init(RELAY_PIN, hw.out)
hw.gpio_set(RELAY_PIN, 0)
hw.gpio_init(SENSOR_PIN, hw.dht22)
while true do
local sample = hw.dht_ts(SENSOR_PIN)
if sample ~= 0 and sample ~= last_sample then
last_sample = sample
local temperature = hw.dht_temp(SENSOR_PIN)
if not relay_on and temperature >= ON_TEMP then
relay_on = true
hw.gpio_set(RELAY_PIN, 1)
elseif relay_on and temperature <= OFF_TEMP then
relay_on = false
hw.gpio_set(RELAY_PIN, 0)
end
hw.cdc_write("temperature x10=" .. temperature .. "\n")
end
hw.delay_ms(100)
end
Температура задаётся в десятых долях градуса: 300 означает 30,0 °C, а 270 —
27,0 °C. Программа ждёт первый корректный пакет DHT22, включает выход при
ON_TEMP и выключает при OFF_TEMP.
Если нужно изменить сценарий
- Полная инструкция GPIO Extender uLua объясняет назначение выводов, загрузку программы и другие исполнения устройства.
- Справочник uLua описывает GPIO, АЦП, DHT22, ШИМ, таймеры, UART и USB CDC.