apds9960 — controlador de sensor de proximidad, gestos y color

Este módulo proporciona un controlador para el sensor digital de proximidad, luz ambiental, color RGB y gestos APDS9960 de Broadcom/Avago a través de I2C. El controlador expone controles de habilitación/deshabilitación por característica, lecturas de canal sin procesar (clear, R, G, B, proximidad) y una máquina de estados de decodificación de gestos por software que clasifica deslizamientos hacia arriba/abajo/izquierda/derecha y gestos de acercamiento/alejamiento a partir de la FIFO de 4 fotodiodos del chip.

Ejemplo de uso:

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)

Clases

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

Construye una instancia del controlador APDS9960.

  • bus es un objeto de bus I2C configurado que se utiliza para comunicarse con el sensor. La clase base emite llamadas read_byte_data, write_byte_data y read_i2c_block_data al estilo SMBus; para el machine.I2C de MicroPython usa uAPDS9960 en su lugar.

  • address es la dirección I2C de 7 bits del dispositivo. El valor predeterminado es APDS9960_I2C_ADDR (0x39).

  • valid_id es una lista de valores aceptables devueltos por el registro de ID del chip. El valor predeterminado es APDS9960_DEV_ID.

El constructor lee el ID del dispositivo y genera ADPS9960InvalidDevId si no está en valid_id. A continuación, deshabilita todas las características, programa los valores predeterminados de ATIME/WTIME/PPULSE y aplica la configuración predeterminada de excitación del LED, ganancia de proximidad, ganancia ALS, umbrales de proximidad, umbrales de luz ambiental, persistencia y configuración del motor de gestos (umbrales de entrada/salida, GCONF1, ganancia de gestos, excitación del LED de gestos, tiempo de espera de gestos, desplazamientos de gestos, GPULSE, GCONF3 y habilitación de interrupción de gestos).

Control de modo y alimentación

getMode() int

Devuelve el valor sin procesar del registro ENABLE, que codifica qué características están actualmente habilitadas (alimentación, ALS, proximidad, espera, interrupción ALS, interrupción de proximidad, gestos).

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

Habilita o deshabilita una característica individual en el registro ENABLE. mode debe ser uno de los valores APDS9960_MODE_* (APDS9960_MODE_POWER ..\ APDS9960_MODE_ALL). Cuando mode es APDS9960_MODE_ALL, todos los bits se activan o desactivan a la vez. Genera ADPS9960InvalidMode para valores fuera de rango.

enablePower() None

Enciende el APDS9960 (establece el bit PON en ENABLE).

disablePower() None

Apaga el APDS9960 (borra el bit PON en ENABLE).

Sensor de luz ambiental / RGB

enableLightSensor(interrupts: bool = True) None

Restaura la ganancia ALS predeterminada, configura el bit de habilitación de interrupción ALS, enciende el dispositivo y habilita el motor de luz ambiental/color.

disableLightSensor() None

Deshabilita la interrupción ALS y detiene el motor de luz ambiental/color.

readAmbientLight() int

Lee el nivel de luz ambiental del canal clear como un valor sin signo de 16 bits.

readRedLight() int

Lee el nivel del canal rojo como un valor sin signo de 16 bits.

readGreenLight() int

Lee el nivel del canal verde como un valor sin signo de 16 bits.

readBlueLight() int

Lee el nivel del canal azul como un valor sin signo de 16 bits.

Sensor de proximidad

enableProximitySensor(interrupts: bool = True) None

Restaura la ganancia de proximidad y la excitación del LED predeterminadas, configura el bit de habilitación de interrupción de proximidad, enciende el dispositivo y habilita el motor de proximidad.

disableProximitySensor() None

Deshabilita la interrupción de proximidad y detiene el motor de proximidad.

readProximity() int

Lee el nivel de proximidad como un valor sin signo de 8 bits.

Motor de gestos

enableGestureSensor(interrupts: bool = True) None

Reinicia el estado de gestos, establece WTIME y el recuento de pulsos de gestos, aumenta el LED al 300%, configura el bit de habilitación de interrupción de gestos, entra en la máquina de estados de gestos, enciende el dispositivo y habilita los modos de espera, proximidad y gestos.

disableGestureSensor() None

Reinicia el estado de gestos, deshabilita la interrupción de gestos y la máquina de estados, y detiene el motor de gestos.

isGestureAvailable() bool

Devuelve True si el bit GVALID del registro de estado de gestos está establecido, lo que indica que los datos de la FIFO de gestos están listos para leerse.

readGesture() int

Vacía la FIFO de gestos, ejecuta el decodificador de gestos integrado y devuelve una de las constantes de dirección APDS9960_DIR_*. Devuelve APDS9960_DIR_NONE si el motor no está en ejecución, no hay datos válidos disponibles o los datos no se resolvieron en un gesto reconocido.

resetGestureParameters() None

Borra el búfer interno de la FIFO de gestos, los deltas, los recuentos, los contadores de acercamiento/alejamiento, el estado y el último movimiento decodificado.

processGestureData() bool

Procesa las muestras sin procesar U/D/L/R de la FIFO actualmente almacenadas en búfer para actualizar los deltas U/D y L/R y los contadores de acercamiento/alejamiento. Devuelve True si se detectó un evento de acercamiento o alejamiento, False en caso contrario.

decodeGesture() bool

Convierte los recuentos actuales U/D y L/R y los deltas acumulados en una dirección almacenada en el campo interno gesture_motion_. Devuelve True cuando se reconoce una dirección, False en caso contrario.

Umbrales de proximidad

getProxIntLowThresh() int

Devuelve el umbral bajo de interrupción de proximidad (registro PILT).

setProxIntLowThresh(threshold: int) None

Establece el umbral bajo de interrupción de proximidad.

getProxIntHighThresh() int

Devuelve el umbral alto de interrupción de proximidad (registro PIHT).

setProxIntHighThresh(threshold: int) None

Establece el umbral alto de interrupción de proximidad.

getProximityIntLowThreshold() int

Alias de getProxIntLowThresh().

setProximityIntLowThreshold(threshold: int) None

Alias de setProxIntLowThresh().

getProximityIntHighThreshold() int

Alias de getProxIntHighThresh().

setProximityIntHighThreshold(threshold: int) None

Alias de setProxIntHighThresh().

Excitación del LED, ganancia y refuerzo

getLEDDrive() int

Devuelve la intensidad de excitación del LED utilizada para proximidad y ALS. Codificada como uno de los valores APDS9960_LED_DRIVE_* (0 = 100 mA, 1 = 50 mA, 2 = 25 mA, 3 = 12.5 mA).

setLEDDrive(drive: int) None

Establece la intensidad de excitación del LED utilizada para proximidad y ALS. drive es uno de los valores APDS9960_LED_DRIVE_*.

getProximityGain() int

Devuelve la ganancia del receptor de proximidad. Codificada como uno de los valores APDS9960_PGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setProximityGain(drive: int) None

Establece la ganancia del receptor de proximidad. drive es uno de los valores APDS9960_PGAIN_*.

getAmbientLightGain() int

Devuelve la ganancia del sensor de luz ambiental. Codificada como uno de los valores APDS9960_AGAIN_* (0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x).

setAmbientLightGain(drive: int) None

Establece la ganancia del sensor de luz ambiental. drive es uno de los valores APDS9960_AGAIN_*.

getLEDBoost() int

Devuelve el refuerzo de corriente del LED. Codificado como uno de los valores APDS9960_LED_BOOST_* (0 = 100%, 1 = 150%, 2 = 200%, 3 = 300%).

setLEDBoost(boost: int) None

Establece el refuerzo de corriente del LED. boost es uno de los valores APDS9960_LED_BOOST_*.

Compensación de ganancia de proximidad y máscara de fotodiodos

getProxGainCompEnable() bool

Devuelve True si la compensación de ganancia de proximidad está habilitada.

setProxGainCompEnable(enable: bool) None

Habilita o deshabilita la compensación de ganancia de proximidad.

getProxPhotoMask() int

Devuelve la máscara de 4 bits de los fotodiodos de proximidad deshabilitados. Los bits se asignan como 3=UP, 2=DOWN, 1=LEFT, 0=RIGHT; 1 deshabilita un fotodiodo y 0 lo habilita.

setProxPhotoMask(mask: int) None

Establece la máscara de 4 bits de los fotodiodos de proximidad deshabilitados (consulta la codificación anterior).

Configuración de gestos

getGestureEnterThresh() int

Devuelve el umbral de proximidad necesario para entrar en el modo de gestos.

setGestureEnterThresh(threshold: int) None

Establece el umbral de proximidad necesario para entrar en el modo de gestos.

getGestureExitThresh() int

Devuelve el umbral de proximidad necesario para salir del modo de gestos.

setGestureExitThresh(threshold: int) None

Establece el umbral de proximidad necesario para salir del modo de gestos.

getGestureGain() int

Devuelve la ganancia de los fotodiodos utilizada durante el modo de gestos. Codificada como uno de los valores APDS9960_GGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setGestureGain(gain: int) None

Establece la ganancia de los fotodiodos utilizada durante el modo de gestos.

getGestureLEDDrive() int

Devuelve la corriente de excitación del LED utilizada durante el modo de gestos. Codificada como uno de los valores APDS9960_LED_DRIVE_*.

setGestureLEDDrive(drive: int) None

Establece la corriente de excitación del LED utilizada durante el modo de gestos.

getGestureWaitTime() int

Devuelve el tiempo de espera de bajo consumo entre detecciones de gestos. Codificado como uno de los valores APDS9960_GWTIME_* (0 = 0 ms .. 7 = 39.2 ms).

setGestureWaitTime(time: int) None

Establece el tiempo de espera de bajo consumo entre detecciones de gestos.

getGestureMode() bool

Devuelve True si la máquina de estados de gestos está actualmente en ejecución.

setGestureMode(enable: bool) None

Entra o sale de la máquina de estados de gestos.

Umbrales de interrupción de luz ambiental

getLightIntLowThreshold() int

Devuelve el umbral bajo de 16 bits utilizado para la interrupción de luz ambiental.

setLightIntLowThreshold(threshold: int) None

Establece el umbral bajo de 16 bits utilizado para la interrupción de luz ambiental.

getLightIntHighThreshold() int

Devuelve el umbral alto de 16 bits utilizado para la interrupción de luz ambiental.

setLightIntHighThreshold(threshold: int) None

Establece el umbral alto de 16 bits utilizado para la interrupción de luz ambiental.

Habilitaciones y borrados de interrupciones

getAmbientLightIntEnable() bool

Devuelve True si las interrupciones de luz ambiental están habilitadas.

setAmbientLightIntEnable(enable: bool) None

Habilita o deshabilita las interrupciones de luz ambiental.

getProximityIntEnable() bool

Devuelve True si las interrupciones de proximidad están habilitadas.

setProximityIntEnable(enable: bool) None

Habilita o deshabilita las interrupciones de proximidad.

getGestureIntEnable() bool

Devuelve True si las interrupciones de gestos están habilitadas.

setGestureIntEnable(enable: bool) None

Habilita o deshabilita las interrupciones de gestos.

clearAmbientLightInt() None

Borra una interrupción de luz ambiental pendiente.

clearProximityInt() None

Borra una interrupción de proximidad pendiente.

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

Subclase de APDS9960 para MicroPython. API pública idéntica, pero el acceso a registros subyacente utiliza llamadas readfrom_mem y writeto_mem al estilo de machine.I2C en lugar de métodos al estilo SMBus. Esta es la clase a utilizar en plataformas OpenMV / MicroPython.

Excepciones

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

Subclase de ValueError. La genera el constructor de APDS9960 cuando el valor leído del registro de ID del chip no está presente en la lista valid_id.

exception apds9960.ADPS9960InvalidMode(mode: int)

Subclase de ValueError. La genera APDS9960.setMode() cuando el argumento mode está fuera del rango APDS9960_MODE_POWER..\ APDS9960_MODE_ALL.

Constantes

Dirección I2C e IDs de dispositivo

apds9960.APDS9960_I2C_ADDR: int

Dirección I2C de 7 bits predeterminada del APDS9960 (0x39).

apds9960.APDS9960_DEV_ID: list

Lista predeterminada de valores válidos del registro de ID de dispositivo ([0xAB, 0x9C, 0xA8, -0x55]).

Ajuste de gestos

apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int

Magnitud mínima de muestra (por fotodiodo) utilizada por el decodificador de gestos al buscar las primeras/últimas muestras de la FIFO dentro de rango.

apds9960.APDS9960_GESTURE_SENSITIVITY_1: int

Umbral sobre los deltas acumulados U/D y L/R por encima del cual el decodificador determina una dirección de deslizamiento.

apds9960.APDS9960_GESTURE_SENSITIVITY_2: int

Umbral sobre los deltas U/D y L/R por paso por debajo del cual el decodificador considera que una muestra es un candidato a acercamiento/alejamiento en lugar de un deslizamiento.

apds9960.APDS9960_TIME_FIFO_PAUSE: int

Milisegundos que el bucle de gestos duerme entre vaciados de la FIFO.

Modos de característica

Estos valores se pasan a APDS9960.setMode().

apds9960.APDS9960_MODE_POWER: int

Bit de encendido (0).

apds9960.APDS9960_MODE_AMBIENT_LIGHT: int

Bit de habilitación del motor de luz ambiental/color (1).

apds9960.APDS9960_MODE_PROXIMITY: int

Bit de habilitación del motor de proximidad (2).

apds9960.APDS9960_MODE_WAIT: int

Bit de habilitación del estado de espera (3).

apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int

Bit de habilitación de interrupción de luz ambiental (4).

apds9960.APDS9960_MODE_PROXIMITY_INT: int

Bit de habilitación de interrupción de proximidad (5).

apds9960.APDS9960_MODE_GESTURE: int

Bit de habilitación del motor de gestos (6).

apds9960.APDS9960_MODE_ALL: int

Valor centinela (7) que indica a APDS9960.setMode() que habilite o deshabilite todos los bits del registro ENABLE a la vez.

Corrientes de excitación del LED

apds9960.APDS9960_LED_DRIVE_100MA: int

Excitación del LED de 100 mA (0).

apds9960.APDS9960_LED_DRIVE_50MA: int

Excitación del LED de 50 mA (1).

apds9960.APDS9960_LED_DRIVE_25MA: int

Excitación del LED de 25 mA (2).

apds9960.APDS9960_LED_DRIVE_12_5MA: int

Excitación del LED de 12.5 mA (3).

Ganancia de proximidad (PGAIN)

apds9960.APDS9960_PGAIN_1X: int

Ganancia de proximidad 1x (0).

apds9960.APDS9960_PGAIN_2X: int

Ganancia de proximidad 2x (1).

apds9960.APDS9960_PGAIN_4X: int

Ganancia de proximidad 4x (2). Valor predeterminado aplicado por el constructor.

apds9960.APDS9960_PGAIN_8X: int

Ganancia de proximidad 8x (3).

Ganancia de luz ambiental (AGAIN)

apds9960.APDS9960_AGAIN_1X: int

Ganancia ALS 1x (0).

apds9960.APDS9960_AGAIN_4X: int

Ganancia ALS 4x (1). Valor predeterminado aplicado por el constructor.

apds9960.APDS9960_AGAIN_16X: int

Ganancia ALS 16x (2).

apds9960.APDS9960_AGAIN_64X: int

Ganancia ALS 64x (3).

Ganancia de gestos (GGAIN)

apds9960.APDS9960_GGAIN_1X: int

Ganancia de gestos 1x (0).

apds9960.APDS9960_GGAIN_2X: int

Ganancia de gestos 2x (1).

apds9960.APDS9960_GGAIN_4X: int

Ganancia de gestos 4x (2). Valor predeterminado aplicado por el constructor.

apds9960.APDS9960_GGAIN_8X: int

Ganancia de gestos 8x (3).

Refuerzo del LED

apds9960.APDS9960_LED_BOOST_100: int

Refuerzo del LED del 100% (0).

apds9960.APDS9960_LED_BOOST_150: int

Refuerzo del LED del 150% (1).

apds9960.APDS9960_LED_BOOST_200: int

Refuerzo del LED del 200% (2).

apds9960.APDS9960_LED_BOOST_300: int

Refuerzo del LED del 300% (3). Aplicado automáticamente por APDS9960.enableGestureSensor().

Tiempos de espera de gestos

apds9960.APDS9960_GWTIME_0MS: int

0 ms (0).

apds9960.APDS9960_GWTIME_2_8MS: int

2.8 ms (1). Valor predeterminado aplicado por el constructor.

apds9960.APDS9960_GWTIME_5_6MS: int

5.6 ms (2).

apds9960.APDS9960_GWTIME_8_4MS: int

8.4 ms (3).

apds9960.APDS9960_GWTIME_14_0MS: int

14.0 ms (4).

apds9960.APDS9960_GWTIME_22_4MS: int

22.4 ms (5).

apds9960.APDS9960_GWTIME_30_8MS: int

30.8 ms (6).

apds9960.APDS9960_GWTIME_39_2MS: int

39.2 ms (7).

Direcciones de gestos

Estos valores son devueltos por APDS9960.readGesture().

apds9960.APDS9960_DIR_NONE: int

Ningún gesto detectado (0).

apds9960.APDS9960_DIR_LEFT: int

Deslizamiento a la izquierda (1).

apds9960.APDS9960_DIR_RIGHT: int

Deslizamiento a la derecha (2).

apds9960.APDS9960_DIR_UP: int

Deslizamiento hacia arriba (3).

apds9960.APDS9960_DIR_DOWN: int

Deslizamiento hacia abajo (4).

apds9960.APDS9960_DIR_NEAR: int

Evento de acercamiento (5).

apds9960.APDS9960_DIR_FAR: int

Evento de alejamiento (6).

apds9960.APDS9960_DIR_ALL: int

Valor centinela (7) utilizado internamente para representar «cualquier dirección».

Estados de gestos

Valores de estado internos reportados a través de la máquina de estados de gestos.

apds9960.APDS9960_STATE_NA: int

Sin estado (0).

apds9960.APDS9960_STATE_NEAR: int

Estado de acercamiento detectado (1).

apds9960.APDS9960_STATE_FAR: int

Estado de alejamiento detectado (2).

apds9960.APDS9960_STATE_ALL: int

Valor centinela (3) utilizado internamente para representar «cualquier estado».