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.I2CMicroPython використовуйте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для значень поза діапазоном.
Датчик навколишнього освітлення / RGB¶
- enableLightSensor(interrupts: bool = True) None¶
Відновлює підсилення ALS за замовчуванням, налаштовує біт увімкнення переривань ALS, вмикає пристрій та увімкнює рушій навколишнього освітлення/кольору.
- disableLightSensor() None¶
Вимикає переривання ALS та зупиняє рушій навколишнього освітлення/кольору.
Датчик близькості¶
Рушій жестів¶
- 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-буфер жестів, дельти, лічильники, лічильники наближення/віддалення, стан та останній декодований рух.
Пороги близькості¶
- 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_*.
Компенсація підсилення близькості та маска фотодіодів¶
Конфігурація жестів¶
- setGestureEnterThresh(threshold: int) None¶
Встановлює поріг близькості, необхідний для входу в режим жестів.
- 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 мс).
Пороги переривань навколишнього освітлення¶
- getLightIntLowThreshold() int¶
Повертає 16-бітний нижній поріг для переривань навколишнього освітлення.
- setLightIntLowThreshold(threshold: int) None¶
Встановлює 16-бітний нижній поріг для переривань навколишнього освітлення.
Увімкнення та очищення переривань¶
- getAmbientLightIntEnable() bool¶
Повертає
True, якщо переривання навколишнього освітлення увімкнені.
- 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_GESTURE_THRESHOLD_OUT: int¶
Мінімальна амплітуда зразка (на фотодіод), що використовується декодером жестів при пошуку першого/останнього зразка FIFO в діапазоні.
- apds9960.APDS9960_GESTURE_SENSITIVITY_1: int¶
Поріг на накопичені дельти U/D і L/R, вище якого декодер фіксує напрямок свайпу.
Режими функцій¶
Ці значення передаються до APDS9960.setMode().
- apds9960.APDS9960_MODE_AMBIENT_LIGHT: int¶
Біт увімкнення рушія навколишнього освітлення/кольору (
1).
- apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int¶
Біт увімкнення переривань навколишнього освітлення (
4).
- apds9960.APDS9960_MODE_ALL: int¶
Сигнальне значення (
7), що повідомляєAPDS9960.setMode()про необхідність увімкнути або вимкнути всі біти в регістрі ENABLE одночасно.
Струми LED¶
Підсилення близькості (PGAIN)¶
Підсилення навколишнього освітлення (AGAIN)¶
Підсилення жестів (GGAIN)¶
Підсилення імпульсу LED¶
- apds9960.APDS9960_LED_BOOST_300: int¶
Підсилення імпульсу LED 300% (
3). Застосовується автоматичноAPDS9960.enableGestureSensor().
Час очікування жестів¶
Напрямки жестів¶
Ці значення повертаються APDS9960.readGesture().
Стани жестів¶
Внутрішні значення станів, що повідомляються автоматом жестів.