При работе с модулем io
в LUA обязательно загружать библиотеку командой:
require "io"
Инициализирует модуль io
. Выполняется в init.lua
io.begin(use_mqtt)
-- use_mqtt: BOOL - использование MQTT:
-- true - использовать
-- false - не использовать
После инициализации в веб интерфейсе управления появится меню IO
Здесь:
- Ident - имя пина, которое назначено при его создании
- Info - состояние пина
- Last Active Time - время, прошедшее с последнего изменения состояния пина
Создает выход
io.addGPIOOutput(name, pin[, ioOutputType = 0])
-- name - STR, имя выхода
-- pin - INT, номер контакта
-- ioOutputType - INT, тип выхода:
-- SWITCH = 0
-- PWM = 1
Типы выходов:
- SWITCH. В данном режиме пин имеет одно состояние
state
со значениями ON или OFF - PWM. В данном режиме пин имеет состояния:
- brightness
- state
- pwm_freq 100-15000
- pwm_res 8-12
- pwm_min 1-max
- pwm_max min-phys_max
- pwm_raw
- brightness_scale
Создает вход
io.addGPIOInput(Name, pin, pinMode, pinType[, debounceDelay[, sendDelay[, holdDelay]]])
-- name - STR, имя входа
-- pin - INT, номер контакта
-- pinMode - STR, режим работы входа:
-- gpio.INPUT: ввод
-- gpio.INPUT_PULLUP: подтянуть к VCC
-- gpio.INPUT_PULLDOWN: подтянуть к GND
-- pinType - INT, тип входа (см. далее в таблице)
-- debounceDelay - INT, защита от дребезга контакта. По умолчанию = 50 мс
-- sendDelay - INT, время ожидания второго/следующего клика. По умолчанию = 300 мс
-- holdDelay - INT, время когда фиксируется долгое удержание. По умолчанию = 1000 мс
mode | Режим | Описание |
---|---|---|
0 | SWITCH | В данном режиме шлюз контролирует текущее состояние входа, поэтому в этом режиме можно подключать датчики откр., движ., протечек, классические выкл. с фиксацией. |
1 | COUNTER | Простой подсчет событий, новое событие фиксируется по состоянию размыкания контакта, можно подключать например счетчики воды, газа и др. |
2 | MULTI_SWITCH | Предназначен для подключения выкл. без фиксации. Поддерживает следующие события: короткие (одиночное, двойное, тройное, четверное, и так до 255), длительное, короткое, а затем длительное, а так же завершение длительного нажатия. При завершении длительного фиксируется его длительность. Итого 767 разных событий. Можно строить очень сложную логику, имея всего 1 кнопку! |
3 | MOMENTARY | Режим фиксирует без задержки, присущей режиму MULTI_SWITCH события нажатия и отпускания кнопки без фиксации, при этом при отпускании фиксируется длительность нажатия. |
4 | TOGGLE | Для кнопок без фиксации, каждое нажатие переключает состояние входа. |
Например, создание входа для геркона |
io.addGPIOInput("gerkon", 28, gpio.INPUT_PULLUP, 2)
value = io.get(objName, stateName)
io.set(objName, stateName, value)
Управление контактами ввода/вывода (GPIO) чипа ESP32.
Управление режимом контакта:
- gpio.INPUT: ввод
- gpio.OUTPUT: вывод
- gpio.INPUT_PULLUP: подтянуть к VCC
- gpio.INPUT_PULLDOWN: подтянуть к GND
gpio.mode(pin, mode)
-- pin: номер контакта
-- mode: режим контакта - gpio.INPUT, gpio.INPUT_PULLUP, gpio.INPUT_PULLDOWN, gpio.OUTPUT
Чтение сигнала с GPIO
gpio.read(pin[, ADC)
-- pin: номер контакта
-- ADC: true - чтение ADC; false - чтение цифрового сигнала
Задать каналу 2 режим входа, получить его значение:
gpio.mode(25, gpio.INPUT)
local value = gpio.read(25)
print(value)
Запись уровня в GPIO
gpio.write(pin, level)
-- pin: номер контакта
-- level: уровень - gpio.HIGH - высокий, gpio.LOW - низкий
Например, задать каналу 4 режим выхода и включить его на 100мс:
gpio.mode(27, gpio.OUTPUT)
gpio.write(27, 1)
os.delay(100)
gpio.write(27, 0)
ШИМ-контроллер ESP32 имеет 16 независимых каналов, которые можно настроить для генерации ШИМ-сигналов с различными свойствами. Все выводы, которые могут выступать в качестве выходов, могут использоваться в качестве выводов ШИМ (GPIO с 34 по 39 не могут генерировать ШИМ).
Настройка ШИМ
gpio.pwmSetup(channel, pin[, freq = 5000[, resolution = 8]])
-- chanel: канал ШИМ - 0-15
-- pin: номер контакта
-- resolution: разрешение 1-16 bits
-- freq: частота
Управление ШИМ
gpio.pwm(channel, value)
-- channel: канал 0-15
-- value: значение ШИМ
Например, задать каналу 1 режим выхода и включить ШИМ со скважностью 50%
gpio.pwmSetup(3, 32)
gpio.pwm(3, 255/100*50)