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».