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