О модуле
Модуль предоставляет единый API для датчиков, поддерживаемых Lua RTOS:
-- Подключить датчик DHT11, подключенный к GPIO4
s1 = sensor.attach("DHT11", pio.GPIO4)
-- Считать температуру и влажность
s1:read("temperature")
s1:read("humidity")
Набор доступных датчиков зависит от модели устройства и версии прошивки. Получить его во время выполнения можно функцией sensor.list().
Функции этого модуля организованы в следующие категории:
Ключевые концепции
Датчики измеряют температуру, влажность, движение, освещённость и другие физические величины. Модуль предоставляет для них единый порядок подключения, настройки и чтения данных.
Чтобы использовать датчик:
Создайте объект датчика функцией
sensor.attach().-- Подключить датчик DHT11, подключенный к GPIO4 s1 = sensor.attach("DHT11", pio.GPIO4)Считывайте нужные величины методом
read().-- Считать данные, предоставляемые датчиком s1:read("temperature") s1:read("humidity")Освободите ресурсы методом
detach(), когда датчик больше не нужен.s1:detach()
Параметры датчика, например разрешение измерения или порог срабатывания, задаются методом set():
-- Создать экземпляр датчика DS1820, подключенного к GPIO4
s1 = sensor.attach("DS1820", pio.GPIO4, 0x28ff900f, 0xb316041a)
-- Настроить разрешение датчика
s1:set("resolution", 10)
-- Считать температуру
s1:read("temperature")
Функции перечисления
Функции перечисления показывают, какие датчики доступны на устройстве, и помогают получить параметры подключённых датчиков.
sensor.list([table])
Перечислить датчики, поддерживаемые вашей прошивкой Lua RTOS.
Аргументы:
- table: если true, список датчиков возвращается в таблице Lua, если false, список датчиков выводится на консоль.
Возвращает:
если table равно false: ничего или исключение.
если table равно true: таблицу Lua с результатом списка датчиков или исключение. Эта таблица представляет собой массив таблиц. Каждая запись соответствует датчику. Каждый датчик предоставляет следующие поля:
id: идентификатор датчика.
interface: имя интерфейса датчика.
provides: массив с величинами, предоставляемыми датчиком. Каждая величина имеет следующие поля:
- id: имя величины.
- type: тип данных величины. Может быть int, float или double.
settings: массив с параметрами настройки, поддерживаемыми датчиком. Каждая настройка имеет следующие поля:
- id: имя настройки.
- type: тип данных величины. Может быть int, float или double.
-- Перечислить датчики, поддерживаемые прошивкой Lua RTOS, на консоли
/ > sensor.list()
SENSOR INTERFACE PROVIDES SETTINGS
-------------------------------------------------------------------------------
DHT11 GPIO temperature,humidity
PING28015 GPIO distance temperature
TMP36 ADC temperature
-- Перечислить датчики, поддерживаемые прошивкой Lua RTOS, в таблицу
sensors = sensor.list(true)
sensor.enumerate(type, interface, [table])
Для некоторых интерфейсов, например 1-WIRE, можно получить список датчиков на шине. Так можно узнать адрес, необходимый для вызова sensor.attach().
Аргументы:
- type: тип перечисления. Поддерживается только
sensor.OWire. - interface: номер GPIO шины 1-WIRE.
- table: если true, список перечисления возвращается в таблице Lua, если false, список перечисления выводится на консоль.
Возвращает:
если table равно false: ничего или исключение.
если table равно true: таблицу Lua с результатом списка перечисления или исключение. Эта таблица представляет собой массив таблиц. Каждая запись соответствует датчику. Каждый датчик предоставляет следующие поля для 1-WIRE:
- id: идентификатор датчика.
- device: номер устройства на шине.
- addressh: старшее слово адреса устройства.
- addressl: младшее слово адреса устройства.
- model: строка, содержащая название модели устройства.
-- Перечислить датчики, подключенные к GPIO4, используя шину 1-WIRE
/ > sensor.enumerate(sensor.OWire, pio.GPIO4)
SENSOR DEVICE ADDRESS MODEL
-------------------------------------------------------
DS1820 01 28ff900fb316041a DS18B20
DS1820 02 28ffc1acb2160596 DS18B20
DS1820 03 28fff919b316034a DS18B20
DS1820 04 28ffad17b31603d5 DS18B20
-- Перечислить датчики, подключенные к GPIO4, используя шину 1-WIRE, в таблицу
owire = sensor.enumerate(sensor.OWire, pio.GPIO4, true)
Функции конфигурации
s = sensor.attach(id, …)
Подключить датчик к его аппаратному интерфейсу.
Аргументы:
Аргументы для этой функции варьируются в зависимости от типа аппаратного интерфейса.
Для GPIO:
- id: строка, содержащая идентификатор датчика, например DHT11.
- gpio: GPIO, к которому подключен датчик. Используйте pio.GPIOx, определенный для этой цели.
Для ADC:
- id: строка, содержащая идентификатор датчика, например TMP36.
- adc: блок АЦП. Используйте adc.xxx, определенный для этой цели, например adc.ADC1.
- channel: канал АЦП.
Для UART:
- id: строка, содержащая идентификатор датчика, например GPS.
- uart: идентификатор блока UART. Используйте uart.UARTx, определенный для этой цели.
- baud rate (необязательно): желаемая скорость передачи, выраженная в бодах. Если не указано, скорость передачи устанавливается на 9600.
- data bits (необязательно): количество бит данных, может быть 8 или 9. Если не указано, биты данных устанавливаются на 8.
- parity (необязательно): четность, может быть uart.PARNONE (без четности), uart.PAREVEN (четная четность) или uart.PARODD (нечетная четность). Если не указано, четность устанавливается на uart.PARNONE.
- stop bits (необязательно): количество стоповых бит, может быть uart.STOP1 (1 стоповый бит) или uart.STOP2 (2 стоповых бита). Если не указано, стоповые биты устанавливаются на uart.STOP1.
Для I2C:
- id: строка, содержащая идентификатор датчика, например BME280.
- i2c: блок i2c. Используйте i2c.I2Cx, определенный для этой цели.
- address: адрес устройства i2c. Если 0, применяется адрес устройства по умолчанию.
Для 1-WIRE:
- id: строка, содержащая идентификатор датчика, например DS1820.
- gpio: GPIO, к которому подключен датчик. Используйте pio.GPIOx, определенный для этой цели.
- position: позиция устройства, которую устройство занимает на шине
Возвращает: экземпляр датчика или исключение. Вы должны сохранить этот экземпляр в переменной для дальнейших операций с ним.
-- Подключить датчик DHT11 (датчик gpio) к GPIO4
s = sensor.attach("DHT11", pio.GPIO4)
-- Подключить датчик TMP36 (датчик adc), используя модуль ADC1, канал 6
s = sensor.attach("TMP36", adc.ADC1)
-- Подключить датчик DS1820 (датчик 1-WIRE) к GPIO26 в позиции 3
s = sensor.attach("DS1820",pio.GPIO26, 3)
instance:detach()
Отключить датчик и освободить все ресурсы, используемые датчиком.
Аргументы: нет.
Возвращает: ничего или исключение.
instance:callback(function)
Регистрирует обработчик новых значений. Метод доступен для датчиков, которые обновляют данные автоматически, включая дискретные входы GPIO. Для одного объекта можно зарегистрировать до восьми обработчиков; при изменении данных вызывается каждый из них.
Аргументы:
- function: обработчик, принимающий таблицу со всеми значениями датчика. Список доступных величин можно получить функцией перечисления.
Возвращает: ничего или исключение.
-- Подключить переключатель на эффекте Холла к GPIO26
s = sensor.attach("HALL_SWITCH", pio.GPIO26)
-- Зарегистрировать обратный вызов
s:callback(
function(magnitude)
if (magnitude["on"] == 1) then
print("включен")
else
print("выключен")
end
end
)
Устранение дребезга
Для кнопок и переключателей PUSH_SWITCH, TILT_SWITCH, 2P_TOGGLE_SWITCH и 3P_TOGGLE_SWITCH дребезг контактов подавляется автоматически. Обычно внешняя RC-цепочка не требуется.
Типичное время подтверждения состояния — около 10 мс для кнопок и тумблеров и около 100 мс для датчика наклона. HALL_SWITCH передаёт изменения без программной задержки.
Функции чтения
instance:read(magnitude)
Считывает указанную величину из экземпляра датчика, ранее созданного функцией sensor.attach.
Аргументы:
- magnitude: имя величины для чтения. Вы можете использовать функцию перечисления, чтобы узнать, какие величины предоставляются датчиком. Специальная величина “all” определена для чтения всех величин, предоставляемых датчиком.
Возвращает: значение величины или исключение.
-- Подключить BME280 к I2C0 со значениями по умолчанию
s1 = sensor.attach("BME280", i2c.I2C0)
-- Считать температуру
temp = s1:read("temperature")
-- Считать давление
press = s1:read("pressure")
-- Считать все свойства
temp, hum, press = s1:read("all")
Функции установки
instance:set(property, value)
Устанавливает значение для указанного свойства для экземпляра датчика, ранее созданного функцией sensor.attach. С помощью функции set вы можете установить разрешение, которое вы хотите для датчика DS1820.
Аргументы:
property: имя свойства для установки. Вы можете использовать функцию перечисления, чтобы узнать, какие свойства предоставляются датчиком.
value: значение свойства.
-- Подключить второй датчик DS1820, подключенный к GPIO26
s1 = sensor.attach("DS1820", pio.GPIO26, 2)
-- Установить разрешение 8 бит
s1:set("resolution", 8)
-- Считать температуру
s1:read("temperature")
Поддерживаемые датчики
Вот список датчиков, которые в настоящее время изначально поддерживаются в Lua RTOS.
| Тип | Датчик |
|---|---|
| Качество воздуха | SDS011 |
| Расстояние | 2Y0A21 PING))) 28015 ультразвуковой датчик US015 ультразвуковой датчик |
| Географическое положение | GPS |
| Влажность | BME280 DHT11 DHT22 DHT23 |
| Освещенность | BH1620FVC BH1721FVC LDR |
| Магнитное поле | AH49E |
| Влажность почвы | VH400 |
| Потенциометры | Линейный потенциометр |
| Присутствие | AM412 |
| Давление | BME280 |
| Вращение | Относительный поворотный энкодер |
| Переключатели | Клавиатурная матрица 4x4 2-ПОЗИЦИОННЫЙ ТУМБЛЕР 3-ПОЗИЦИОННЫЙ ТУМБЛЕР АНАЛОГОВЫЙ ДЖОЙСТИК ЭФФЕКТ ХОЛЛА КНОПОЧНЫЙ ПЕРЕКЛЮЧАТЕЛЬ ДАТЧИК НАКЛОНА |
| Температура | BDE0600G BME280 DHT11 DHT22 DHT23 DS1820 LM35 ТЕРМИСТОР 10К TMP36 |
| УФ | GUVA-S12SD ML8511 |