apds9960 — драйвер датчика приближения, жестов и цвета

Этот модуль предоставляет драйвер для цифрового датчика приближения, окружающего света, RGB-цвета и жестов Broadcom/Avago APDS9960 через I2C. Драйвер предоставляет элементы управления включением/отключением для каждой функции, чтение необработанных каналов (clear, R, G, B, приближение) и программный конечный автомат декодирования жестов, который классифицирует свайпы вверх/вниз/влево/вправо и жесты приближения/удаления на основе встроенного FIFO из 4 фотодиодов.

Пример использования:

import time
from machine import I2C, Pin
from apds9960 import uAPDS9960 as APDS9960

bus = I2C(1, scl=Pin("P15"), sda=Pin("P14"))
sensor = APDS9960(bus)

sensor.enableLightSensor()
sensor.enableProximitySensor()

while True:
    r = sensor.readRedLight()
    g = sensor.readGreenLight()
    b = sensor.readBlueLight()
    c = sensor.readAmbientLight()
    p = sensor.readProximity()
    print(r, g, b, c, p)
    time.sleep_ms(100)

Классы

class apds9960.APDS9960(bus: machine.I2C, address: int = 0x39, valid_id: list = [0xAB, 0x9C, 0xA8, -0x55])

Создаёт экземпляр драйвера APDS9960.

  • bus — это настроенный объект шины I2C, используемый для связи с датчиком. Базовый класс выполняет вызовы в стиле SMBus read_byte_data, write_byte_data и read_i2c_block_data; для machine.I2C из MicroPython используйте вместо него uAPDS9960.

  • address — это 7-битный адрес I2C устройства. По умолчанию APDS9960_I2C_ADDR (0x39).

  • valid_id — это список допустимых значений, возвращаемых регистром идентификатора чипа. По умолчанию APDS9960_DEV_ID.

Конструктор считывает идентификатор устройства и вызывает ADPS9960InvalidDevId, если он отсутствует в valid_id. Затем он отключает все функции, программирует значения ATIME/WTIME/PPULSE по умолчанию и применяет конфигурацию по умолчанию для тока светодиода, усиления приближения, усиления ALS, порогов приближения, порогов окружающего света, persistence и конфигурацию движка жестов (пороги входа/выхода, GCONF1, усиление жестов, ток светодиода для жестов, время ожидания жестов, смещения жестов, GPULSE, GCONF3 и включение прерывания жестов).

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

getMode() int

Возвращает необработанное значение регистра ENABLE, кодирующее, какие функции в данный момент включены (питание, ALS, приближение, ожидание, прерывание ALS, прерывание приближения, жесты).

setMode(mode: int, enable: bool = True) None

Включает или отключает отдельную функцию в регистре ENABLE. mode должен быть одним из значений APDS9960_MODE_* (APDS9960_MODE_POWER ..\ APDS9960_MODE_ALL). Когда mode равно APDS9960_MODE_ALL, все биты включаются или отключаются одновременно. Вызывает ADPS9960InvalidMode для значений вне диапазона.

enablePower() None

Включает питание APDS9960 (устанавливает бит PON в ENABLE).

disablePower() None

Отключает питание APDS9960 (сбрасывает бит PON в ENABLE).

Датчик окружающего света / RGB

enableLightSensor(interrupts: bool = True) None

Восстанавливает усиление ALS по умолчанию, настраивает бит включения прерывания ALS, включает питание устройства и включает движок окружающего света/цвета.

disableLightSensor() None

Отключает прерывание ALS и останавливает движок окружающего света/цвета.

readAmbientLight() int

Считывает уровень окружающего света по каналу clear в виде 16-битного беззнакового значения.

readRedLight() int

Считывает уровень красного канала в виде 16-битного беззнакового значения.

readGreenLight() int

Считывает уровень зелёного канала в виде 16-битного беззнакового значения.

readBlueLight() int

Считывает уровень синего канала в виде 16-битного беззнакового значения.

Датчик приближения

enableProximitySensor(interrupts: bool = True) None

Восстанавливает усиление приближения и ток светодиода по умолчанию, настраивает бит включения прерывания приближения, включает питание устройства и включает движок приближения.

disableProximitySensor() None

Отключает прерывание приближения и останавливает движок приближения.

readProximity() int

Считывает уровень приближения в виде 8-битного беззнакового значения.

Движок жестов

enableGestureSensor(interrupts: bool = True) None

Сбрасывает состояние жестов, устанавливает WTIME и количество импульсов для жестов, повышает мощность светодиода до 300%, настраивает бит включения прерывания жестов, переходит в конечный автомат жестов, включает питание устройства и включает режимы ожидания, приближения и жестов.

disableGestureSensor() None

Сбрасывает состояние жестов, отключает прерывание жестов и конечный автомат, а также останавливает движок жестов.

isGestureAvailable() bool

Возвращает True, если установлен бит GVALID регистра состояния жестов, что указывает на готовность данных FIFO жестов к чтению.

readGesture() int

Опустошает FIFO жестов, запускает встроенный декодер жестов и возвращает одну из констант направления APDS9960_DIR_*. Возвращает APDS9960_DIR_NONE, если движок не запущен, нет доступных корректных данных или данные не соответствуют распознанному жесту.

resetGestureParameters() None

Очищает внутренний буфер FIFO жестов, дельты, счётчики, счётчики приближения/удаления, состояние и последнее декодированное движение.

processGestureData() bool

Обрабатывает необработанные образцы FIFO U/D/L/R, буферизованные в данный момент, для обновления дельт U/D и L/R и счётчиков приближения/удаления. Возвращает True, если было обнаружено событие приближения или удаления, в противном случае False.

decodeGesture() bool

Преобразует текущие счётчики U/D и L/R и накопленные дельты в направление, сохраняемое во внутреннем поле gesture_motion_. Возвращает True, когда направление распознано, в противном случае False.

Пороги приближения

getProxIntLowThresh() int

Возвращает нижний порог прерывания приближения (регистр PILT).

setProxIntLowThresh(threshold: int) None

Устанавливает нижний порог прерывания приближения.

getProxIntHighThresh() int

Возвращает верхний порог прерывания приближения (регистр PIHT).

setProxIntHighThresh(threshold: int) None

Устанавливает верхний порог прерывания приближения.

getProximityIntLowThreshold() int

Псевдоним для getProxIntLowThresh().

setProximityIntLowThreshold(threshold: int) None

Псевдоним для setProxIntLowThresh().

getProximityIntHighThreshold() int

Псевдоним для getProxIntHighThresh().

setProximityIntHighThreshold(threshold: int) None

Псевдоним для setProxIntHighThresh().

Ток светодиода, усиление и буст

getLEDDrive() int

Возвращает силу тока светодиода, используемую для приближения и ALS. Кодируется одним из значений APDS9960_LED_DRIVE_* (0 = 100 мА, 1 = 50 мА, 2 = 25 мА, 3 = 12,5 мА).

setLEDDrive(drive: int) None

Устанавливает силу тока светодиода, используемую для приближения и ALS. drive — это одно из значений APDS9960_LED_DRIVE_*.

getProximityGain() int

Возвращает усиление приёмника приближения. Кодируется одним из значений APDS9960_PGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setProximityGain(drive: int) None

Устанавливает усиление приёмника приближения. drive — это одно из значений APDS9960_PGAIN_*.

getAmbientLightGain() int

Возвращает усиление датчика окружающего света. Кодируется одним из значений APDS9960_AGAIN_* (0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x).

setAmbientLightGain(drive: int) None

Устанавливает усиление датчика окружающего света. drive — это одно из значений APDS9960_AGAIN_*.

getLEDBoost() int

Возвращает буст тока светодиода. Кодируется одним из значений APDS9960_LED_BOOST_* (0 = 100%, 1 = 150%, 2 = 200%, 3 = 300%).

setLEDBoost(boost: int) None

Устанавливает буст тока светодиода. boost — это одно из значений APDS9960_LED_BOOST_*.

Компенсация усиления приближения и маска фотодиодов

getProxGainCompEnable() bool

Возвращает True, если компенсация усиления приближения включена.

setProxGainCompEnable(enable: bool) None

Включает или отключает компенсацию усиления приближения.

getProxPhotoMask() int

Возвращает 4-битную маску отключённых фотодиодов приближения. Биты соответствуют 3=UP, 2=DOWN, 1=LEFT, 0=RIGHT; 1 отключает фотодиод, а 0 включает его.

setProxPhotoMask(mask: int) None

Устанавливает 4-битную маску отключённых фотодиодов приближения (см. кодировку выше).

Конфигурация жестов

getGestureEnterThresh() int

Возвращает порог приближения, необходимый для входа в режим жестов.

setGestureEnterThresh(threshold: int) None

Устанавливает порог приближения, необходимый для входа в режим жестов.

getGestureExitThresh() int

Возвращает порог приближения, необходимый для выхода из режима жестов.

setGestureExitThresh(threshold: int) None

Устанавливает порог приближения, необходимый для выхода из режима жестов.

getGestureGain() int

Возвращает усиление фотодиодов, используемое в режиме жестов. Кодируется одним из значений APDS9960_GGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setGestureGain(gain: int) None

Устанавливает усиление фотодиодов, используемое в режиме жестов.

getGestureLEDDrive() int

Возвращает ток светодиода, используемый в режиме жестов. Кодируется одним из значений APDS9960_LED_DRIVE_*.

setGestureLEDDrive(drive: int) None

Устанавливает ток светодиода, используемый в режиме жестов.

getGestureWaitTime() int

Возвращает время ожидания с низким энергопотреблением между обнаружениями жестов. Кодируется одним из значений APDS9960_GWTIME_* (0 = 0 мс .. 7 = 39,2 мс).

setGestureWaitTime(time: int) None

Устанавливает время ожидания с низким энергопотреблением между обнаружениями жестов.

getGestureMode() bool

Возвращает True, если конечный автомат жестов в данный момент запущен.

setGestureMode(enable: bool) None

Входит в конечный автомат жестов или выходит из него.

Пороги прерывания окружающего света

getLightIntLowThreshold() int

Возвращает 16-битный нижний порог, используемый для прерывания окружающего света.

setLightIntLowThreshold(threshold: int) None

Устанавливает 16-битный нижний порог, используемый для прерывания окружающего света.

getLightIntHighThreshold() int

Возвращает 16-битный верхний порог, используемый для прерывания окружающего света.

setLightIntHighThreshold(threshold: int) None

Устанавливает 16-битный верхний порог, используемый для прерывания окружающего света.

Включение и очистка прерываний

getAmbientLightIntEnable() bool

Возвращает True, если прерывания окружающего света включены.

setAmbientLightIntEnable(enable: bool) None

Включает или отключает прерывания окружающего света.

getProximityIntEnable() bool

Возвращает True, если прерывания приближения включены.

setProximityIntEnable(enable: bool) None

Включает или отключает прерывания приближения.

getGestureIntEnable() bool

Возвращает True, если прерывания жестов включены.

setGestureIntEnable(enable: bool) None

Включает или отключает прерывания жестов.

clearAmbientLightInt() None

Очищает ожидающее прерывание окружающего света.

clearProximityInt() None

Очищает ожидающее прерывание приближения.

class apds9960.uAPDS9960(bus: machine.I2C, address: int = 0x39, valid_id: list = [0xAB, 0x9C, 0xA8, -0x55])

Подкласс APDS9960 для MicroPython. Идентичный публичный API, но базовый доступ к регистрам использует вызовы в стиле machine.I2C readfrom_mem и writeto_mem вместо методов в стиле SMBus. Это класс, который следует использовать на устройствах OpenMV / MicroPython.

Исключения

exception apds9960.ADPS9960InvalidDevId(id: int, valid_ids: list)

Подкласс ValueError. Вызывается конструктором APDS9960, когда значение, считанное из регистра идентификатора чипа, отсутствует в списке valid_id.

exception apds9960.ADPS9960InvalidMode(mode: int)

Подкласс ValueError. Вызывается методом APDS9960.setMode(), когда аргумент mode находится вне диапазона APDS9960_MODE_POWER..\ APDS9960_MODE_ALL.

Константы

Адрес I2C и идентификаторы устройства

apds9960.APDS9960_I2C_ADDR: int

Адрес I2C по умолчанию (7-битный) для APDS9960 (0x39).

apds9960.APDS9960_DEV_ID: list

Список допустимых значений регистра идентификатора устройства по умолчанию ([0xAB, 0x9C, 0xA8, -0x55]).

Настройка жестов

apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int

Минимальная величина образца (на фотодиод), используемая декодером жестов при поиске первого/последнего образца FIFO в диапазоне.

apds9960.APDS9960_GESTURE_SENSITIVITY_1: int

Порог для накопленных дельт U/D и L/R, выше которого декодер фиксирует направление свайпа.

apds9960.APDS9960_GESTURE_SENSITIVITY_2: int

Порог для пошаговых дельт U/D и L/R, ниже которого декодер считает образец кандидатом на приближение/удаление, а не свайпом.

apds9960.APDS9960_TIME_FIFO_PAUSE: int

Миллисекунды, на которые цикл жестов засыпает между опустошениями FIFO.

Режимы функций

Эти значения передаются в APDS9960.setMode().

apds9960.APDS9960_MODE_POWER: int

Бит включения питания (0).

apds9960.APDS9960_MODE_AMBIENT_LIGHT: int

Бит включения движка окружающего света/цвета (1).

apds9960.APDS9960_MODE_PROXIMITY: int

Бит включения движка приближения (2).

apds9960.APDS9960_MODE_WAIT: int

Бит включения состояния ожидания (3).

apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int

Бит включения прерывания окружающего света (4).

apds9960.APDS9960_MODE_PROXIMITY_INT: int

Бит включения прерывания приближения (5).

apds9960.APDS9960_MODE_GESTURE: int

Бит включения движка жестов (6).

apds9960.APDS9960_MODE_ALL: int

Сигнальное значение (7), указывающее APDS9960.setMode() включить или отключить все биты в регистре ENABLE одновременно.

Токи светодиода

apds9960.APDS9960_LED_DRIVE_100MA: int

Ток светодиода 100 мА (0).

apds9960.APDS9960_LED_DRIVE_50MA: int

Ток светодиода 50 мА (1).

apds9960.APDS9960_LED_DRIVE_25MA: int

Ток светодиода 25 мА (2).

apds9960.APDS9960_LED_DRIVE_12_5MA: int

Ток светодиода 12,5 мА (3).

Усиление приближения (PGAIN)

apds9960.APDS9960_PGAIN_1X: int

Усиление приближения 1x (0).

apds9960.APDS9960_PGAIN_2X: int

Усиление приближения 2x (1).

apds9960.APDS9960_PGAIN_4X: int

Усиление приближения 4x (2). Применяется конструктором по умолчанию.

apds9960.APDS9960_PGAIN_8X: int

Усиление приближения 8x (3).

Усиление окружающего света (AGAIN)

apds9960.APDS9960_AGAIN_1X: int

Усиление ALS 1x (0).

apds9960.APDS9960_AGAIN_4X: int

Усиление ALS 4x (1). Применяется конструктором по умолчанию.

apds9960.APDS9960_AGAIN_16X: int

Усиление ALS 16x (2).

apds9960.APDS9960_AGAIN_64X: int

Усиление ALS 64x (3).

Усиление жестов (GGAIN)

apds9960.APDS9960_GGAIN_1X: int

Усиление жестов 1x (0).

apds9960.APDS9960_GGAIN_2X: int

Усиление жестов 2x (1).

apds9960.APDS9960_GGAIN_4X: int

Усиление жестов 4x (2). Применяется конструктором по умолчанию.

apds9960.APDS9960_GGAIN_8X: int

Усиление жестов 8x (3).

Буст светодиода

apds9960.APDS9960_LED_BOOST_100: int

Буст светодиода 100% (0).

apds9960.APDS9960_LED_BOOST_150: int

Буст светодиода 150% (1).

apds9960.APDS9960_LED_BOOST_200: int

Буст светодиода 200% (2).

apds9960.APDS9960_LED_BOOST_300: int

Буст светодиода 300% (3). Применяется автоматически методом APDS9960.enableGestureSensor().

Время ожидания жестов

apds9960.APDS9960_GWTIME_0MS: int

0 мс (0).

apds9960.APDS9960_GWTIME_2_8MS: int

2,8 мс (1). Применяется конструктором по умолчанию.

apds9960.APDS9960_GWTIME_5_6MS: int

5,6 мс (2).

apds9960.APDS9960_GWTIME_8_4MS: int

8,4 мс (3).

apds9960.APDS9960_GWTIME_14_0MS: int

14,0 мс (4).

apds9960.APDS9960_GWTIME_22_4MS: int

22,4 мс (5).

apds9960.APDS9960_GWTIME_30_8MS: int

30,8 мс (6).

apds9960.APDS9960_GWTIME_39_2MS: int

39,2 мс (7).

Направления жестов

Эти значения возвращаются методом APDS9960.readGesture().

apds9960.APDS9960_DIR_NONE: int

Жест не обнаружен (0).

apds9960.APDS9960_DIR_LEFT: int

Свайп влево (1).

apds9960.APDS9960_DIR_RIGHT: int

Свайп вправо (2).

apds9960.APDS9960_DIR_UP: int

Свайп вверх (3).

apds9960.APDS9960_DIR_DOWN: int

Свайп вниз (4).

apds9960.APDS9960_DIR_NEAR: int

Событие приближения (5).

apds9960.APDS9960_DIR_FAR: int

Событие удаления (6).

apds9960.APDS9960_DIR_ALL: int

Сигнальное значение (7), используемое внутренне для представления «любого направления».

Состояния жестов

Внутренние значения состояния, сообщаемые конечным автоматом жестов.

apds9960.APDS9960_STATE_NA: int

Нет состояния (0).

apds9960.APDS9960_STATE_NEAR: int

Обнаружено состояние приближения (1).

apds9960.APDS9960_STATE_FAR: int

Обнаружено состояние удаления (2).

apds9960.APDS9960_STATE_ALL: int

Сигнальное значение (3), используемое внутренне для представления «любого состояния».