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, используемый для связи с датчиком. Базовый класс выполняет вызовы в стиле SMBusread_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для значений вне диапазона.
Датчик окружающего света / RGB¶
- enableLightSensor(interrupts: bool = True) None¶
Восстанавливает усиление ALS по умолчанию, настраивает бит включения прерывания ALS, включает питание устройства и включает движок окружающего света/цвета.
Датчик приближения¶
Движок жестов¶
- 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 жестов, дельты, счётчики, счётчики приближения/удаления, состояние и последнее декодированное движение.
Пороги приближения¶
- 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_*.
Компенсация усиления приближения и маска фотодиодов¶
Конфигурация жестов¶
- setGestureEnterThresh(threshold: int) None¶
Устанавливает порог приближения, необходимый для входа в режим жестов.
- setGestureExitThresh(threshold: int) None¶
Устанавливает порог приближения, необходимый для выхода из режима жестов.
- getGestureGain() int¶
Возвращает усиление фотодиодов, используемое в режиме жестов. Кодируется одним из значений
APDS9960_GGAIN_*(0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).
- getGestureLEDDrive() int¶
Возвращает ток светодиода, используемый в режиме жестов. Кодируется одним из значений
APDS9960_LED_DRIVE_*.
- getGestureWaitTime() int¶
Возвращает время ожидания с низким энергопотреблением между обнаружениями жестов. Кодируется одним из значений
APDS9960_GWTIME_*(0 = 0 мс .. 7 = 39,2 мс).
Пороги прерывания окружающего света¶
- getLightIntLowThreshold() int¶
Возвращает 16-битный нижний порог, используемый для прерывания окружающего света.
- setLightIntLowThreshold(threshold: int) None¶
Устанавливает 16-битный нижний порог, используемый для прерывания окружающего света.
Включение и очистка прерываний¶
- class apds9960.uAPDS9960(bus: machine.I2C, address: int = 0x39, valid_id: list = [0xAB, 0x9C, 0xA8, -0x55])¶
Подкласс
APDS9960для MicroPython. Идентичный публичный API, но базовый доступ к регистрам использует вызовы в стилеmachine.I2Creadfrom_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_GESTURE_THRESHOLD_OUT: int¶
Минимальная величина образца (на фотодиод), используемая декодером жестов при поиске первого/последнего образца FIFO в диапазоне.
- apds9960.APDS9960_GESTURE_SENSITIVITY_1: int¶
Порог для накопленных дельт U/D и L/R, выше которого декодер фиксирует направление свайпа.
Режимы функций¶
Эти значения передаются в APDS9960.setMode().
- apds9960.APDS9960_MODE_ALL: int¶
Сигнальное значение (
7), указывающееAPDS9960.setMode()включить или отключить все биты в регистре ENABLE одновременно.
Токи светодиода¶
Усиление приближения (PGAIN)¶
Усиление окружающего света (AGAIN)¶
Усиление жестов (GGAIN)¶
Буст светодиода¶
- apds9960.APDS9960_LED_BOOST_300: int¶
Буст светодиода 300% (
3). Применяется автоматически методомAPDS9960.enableGestureSensor().
Время ожидания жестов¶
Направления жестов¶
Эти значения возвращаются методом APDS9960.readGesture().
Состояния жестов¶
Внутренние значения состояния, сообщаемые конечным автоматом жестов.