Перейти к содержанию
Материалы раздела

О модуле

Модуль предоставляет единый API для датчиков, поддерживаемых Lua RTOS:

-- Подключить датчик DHT11, подключенный к GPIO4
s1 = sensor.attach("DHT11", pio.GPIO4)

-- Считать температуру и влажность
s1:read("temperature")
s1:read("humidity")

Набор доступных датчиков зависит от модели устройства и версии прошивки. Получить его во время выполнения можно функцией sensor.list().

Функции этого модуля организованы в следующие категории:

Ключевые концепции

Датчики измеряют температуру, влажность, движение, освещённость и другие физические величины. Модуль предоставляет для них единый порядок подключения, настройки и чтения данных.

Чтобы использовать датчик:

  1. Создайте объект датчика функцией sensor.attach().

    -- Подключить датчик DHT11, подключенный к GPIO4
    s1 = sensor.attach("DHT11", pio.GPIO4)
    
  2. Считывайте нужные величины методом read().

    -- Считать данные, предоставляемые датчиком
    s1:read("temperature")
    s1:read("humidity")
    
  3. Освободите ресурсы методом 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