apds9960 — Драйвер датчика близькості, жестів і кольору

Цей модуль надає драйвер для цифрового датчика близькості, навколишнього освітлення, RGB-кольору та жестів Broadcom/Avago APDS9960 через I2C. Драйвер надає поканальне керування увімкненням/вимкненням, зчитування сирих каналів (прозорий, 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, що використовується для зв’язку з датчиком. Базовий клас виконує виклики read_byte_data, write_byte_data та read_i2c_block_data у стилі SMBus; для machine.I2C MicroPython використовуйте uAPDS9960 натомість.

  • address — 7-бітна I2C-адреса пристрою. За замовчуванням APDS9960_I2C_ADDR (0x39).

  • valid_id — список допустимих значень, що повертаються регістром ID чипа. За замовчуванням APDS9960_DEV_ID.

Конструктор зчитує ідентифікатор пристрою та викликає ADPS9960InvalidDevId, якщо він не міститься у valid_id. Потім вимикає кожну функцію, програмує значення ATIME/WTIME/PPULSE за замовчуванням та застосовує налаштування за замовчуванням: струм LED, підсилення близькості, підсилення ALS, пороги близькості, пороги навколишнього освітлення, персистентність і конфігурацію рушія жестів (пороги входу/виходу, GCONF1, підсилення жестів, струм LED жестів, час очікування жестів, зсуви жестів, 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

Зчитує рівень навколишнього освітлення прозорого каналу як 16-бітне беззнакове значення.

readRedLight() int

Зчитує рівень червоного каналу як 16-бітне беззнакове значення.

readGreenLight() int

Зчитує рівень зеленого каналу як 16-бітне беззнакове значення.

readBlueLight() int

Зчитує рівень синього каналу як 16-бітне беззнакове значення.

Датчик близькості

enableProximitySensor(interrupts: bool = True) None

Відновлює підсилення близькості та струм LED за замовчуванням, налаштовує біт увімкнення переривань близькості, вмикає пристрій та увімкнює рушій близькості.

disableProximitySensor() None

Вимикає переривання близькості та зупиняє рушій близькості.

readProximity() int

Зчитує рівень близькості як 8-бітне беззнакове значення.

Рушій жестів

enableGestureSensor(interrupts: bool = True) None

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

disableGestureSensor() None

Скидає стан жестів, вимикає переривання жестів і автомат жестів, та зупиняє рушій жестів.

isGestureAvailable() bool

Повертає True, якщо біт GVALID регістра статусу жестів встановлений, що вказує на готовність даних FIFO жестів до читання.

readGesture() int

Спустошує FIFO жестів, запускає декодер жестів на чипі та повертає одну з констант напрямку APDS9960_DIR_*. Повертає APDS9960_DIR_NONE, якщо рушій не запущений, дані недоступні або дані не вдалося розпізнати як жест.

resetGestureParameters() None

Очищає внутрішній FIFO-буфер жестів, дельти, лічильники, лічильники наближення/віддалення, стан та останній декодований рух.

processGestureData() bool

Обробляє сирі зразки U/D/L/R FIFO, що зараз буферизовані, для оновлення дельт 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().

Струм LED, підсилення та підсилення імпульсу

getLEDDrive() int

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

setLEDDrive(drive: int) None

Встановлює силу струму LED для близькості та 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

Повертає підсилення імпульсу LED. Кодується як одне зі значень APDS9960_LED_BOOST_* (0 = 100%, 1 = 150%, 2 = 200%, 3 = 300%).

setLEDBoost(boost: int) None

Встановлює підсилення імпульсу LED. 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

Повертає струм LED, що використовується під час режиму жестів. Кодується як одне зі значень APDS9960_LED_DRIVE_*.

setGestureLEDDrive(drive: int) None

Встановлює струм LED, що використовується під час режиму жестів.

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

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

Виключення

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

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

exception apds9960.ADPS9960InvalidMode(mode: int)

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

Константи

I2C-адреса та ідентифікатори пристрою

apds9960.APDS9960_I2C_ADDR: int

Стандартна 7-бітна I2C-адреса 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 одночасно.

Струми LED

apds9960.APDS9960_LED_DRIVE_100MA: int

Струм LED 100 мА (0).

apds9960.APDS9960_LED_DRIVE_50MA: int

Струм LED 50 мА (1).

apds9960.APDS9960_LED_DRIVE_25MA: int

Струм LED 25 мА (2).

apds9960.APDS9960_LED_DRIVE_12_5MA: int

Струм LED 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).

Підсилення імпульсу LED

apds9960.APDS9960_LED_BOOST_100: int

Підсилення імпульсу LED 100% (0).

apds9960.APDS9960_LED_BOOST_150: int

Підсилення імпульсу LED 150% (1).

apds9960.APDS9960_LED_BOOST_200: int

Підсилення імпульсу LED 200% (2).

apds9960.APDS9960_LED_BOOST_300: int

Підсилення імпульсу LED 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), що використовується внутрішньо для позначення «будь-якого стану».