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