Skip to content

Latest commit

 

History

History
189 lines (138 loc) · 6.67 KB

io.md

File metadata and controls

189 lines (138 loc) · 6.67 KB

Работа с IO/GPIO

IO

При работе с модулем io в LUA обязательно загружать библиотеку командой:

require "io"

io.begin()

Инициализирует модуль io. Выполняется в init.lua

io.begin(use_mqtt)
-- use_mqtt: BOOL - использование MQTT:
  -- true - использовать
  -- false - не использовать

После инициализации в веб интерфейсе управления появится меню IO

Здесь:

  • Ident - имя пина, которое назначено при его создании
  • Info - состояние пина
  • Last Active Time - время, прошедшее с последнего изменения состояния пина

io.addGPIOOutput()

Создает выход

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()

Создает вход

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)

io.get()

value = io.get(objName, stateName)

io.set()

io.set(objName, stateName, value)

GPIO

Управление контактами ввода/вывода (GPIO) чипа ESP32.

gpio.mode()

Управление режимом контакта:

  • 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.read()

Чтение сигнала с GPIO

gpio.read(pin[, ADC)
-- pin: номер контакта
-- ADC: true - чтение ADC; false - чтение цифрового сигнала

Задать каналу 2 режим входа, получить его значение:

gpio.mode(25, gpio.INPUT)
local value = gpio.read(25)
print(value)

gpio.write()

Запись уровня в 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)

PWM (ШИМ)

ШИМ-контроллер ESP32 имеет 16 независимых каналов, которые можно настроить для генерации ШИМ-сигналов с различными свойствами. Все выводы, которые могут выступать в качестве выходов, могут использоваться в качестве выводов ШИМ (GPIO с 34 по 39 не могут генерировать ШИМ).

gpio.pwmSetup()

Настройка ШИМ

gpio.pwmSetup(channel, pin[, freq = 5000[, resolution = 8]])
-- chanel: канал ШИМ - 0-15
-- pin: номер контакта
-- resolution: разрешение 1-16 bits
-- freq: частота

gpio.pwm()

Управление ШИМ

gpio.pwm(channel, value)
-- channel: канал 0-15
-- value: значение ШИМ

Например, задать каналу 1 режим выхода и включить ШИМ со скважностью 50%

gpio.pwmSetup(3, 32)
gpio.pwm(3, 255/100*50)