apds9960 — pilote de capteur de proximité, de gestes et de couleur

Ce module fournit un pilote pour le capteur numérique de proximité, de lumière ambiante, de couleur RGB et de gestes Broadcom/Avago APDS9960 via I2C. Le pilote expose des commandes d’activation/désactivation par fonctionnalité, des lectures de canaux brutes (clear, R, G, B, proximité) et une machine à états logicielle de décodage de gestes qui classe les balayages vers le haut/bas/gauche/droite et les gestes de rapprochement/éloignement à partir de la FIFO de 4 photodiodes intégrée à la puce.

Exemple d’utilisation

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)

Classes

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

Construit une instance du pilote APDS9960.

  • bus est un objet de bus I2C configuré, utilisé pour communiquer avec le capteur. La classe de base émet des appels read_byte_data, write_byte_data et read_i2c_block_data de type SMBus ; pour le machine.I2C de MicroPython, utilisez plutôt uAPDS9960.

  • address est l’adresse I2C 7 bits du périphérique. Vaut par défaut APDS9960_I2C_ADDR (0x39).

  • valid_id est une liste de valeurs acceptables renvoyées par le registre d’identifiant de la puce. Vaut par défaut APDS9960_DEV_ID.

Le constructeur lit l’identifiant du périphérique et lève ADPS9960InvalidDevId s’il ne figure pas dans valid_id. Il désactive ensuite toutes les fonctionnalités, programme les valeurs ATIME/WTIME/PPULSE par défaut et applique la configuration par défaut du courant de la LED, du gain de proximité, du gain ALS, des seuils de proximité, des seuils de lumière ambiante, de la persistance et du moteur de gestes (seuils d’entrée/sortie, GCONF1, gain de gestes, courant LED des gestes, temps d’attente des gestes, décalages des gestes, GPULSE, GCONF3 et activation de l’interruption de gestes).

Contrôle du mode et de l’alimentation

getMode() int

Renvoie la valeur brute du registre ENABLE, codant quelles fonctionnalités sont actuellement activées (alimentation, ALS, proximité, attente, interruption ALS, interruption de proximité, gestes).

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

Active ou désactive une fonctionnalité individuelle dans le registre ENABLE. mode doit être l’une des valeurs APDS9960_MODE_* (APDS9960_MODE_POWER ..\ APDS9960_MODE_ALL). Lorsque mode vaut APDS9960_MODE_ALL, tous les bits sont activés ou désactivés en une seule fois. Lève ADPS9960InvalidMode pour les valeurs hors plage.

enablePower() None

Met l’APDS9960 sous tension (active le bit PON dans ENABLE).

disablePower() None

Met l’APDS9960 hors tension (efface le bit PON dans ENABLE).

Capteur de lumière ambiante / RGB

enableLightSensor(interrupts: bool = True) None

Restaure le gain ALS par défaut, configure le bit d’activation de l’interruption ALS, met le périphérique sous tension et active le moteur de lumière ambiante/couleur.

disableLightSensor() None

Désactive l’interruption ALS et arrête le moteur de lumière ambiante/couleur.

readAmbientLight() int

Lit le niveau de lumière ambiante du canal clear sous forme d’une valeur non signée 16 bits.

readRedLight() int

Lit le niveau du canal rouge sous forme d’une valeur non signée 16 bits.

readGreenLight() int

Lit le niveau du canal vert sous forme d’une valeur non signée 16 bits.

readBlueLight() int

Lit le niveau du canal bleu sous forme d’une valeur non signée 16 bits.

Capteur de proximité

enableProximitySensor(interrupts: bool = True) None

Restaure le gain de proximité et le courant de la LED par défaut, configure le bit d’activation de l’interruption de proximité, met le périphérique sous tension et active le moteur de proximité.

disableProximitySensor() None

Désactive l’interruption de proximité et arrête le moteur de proximité.

readProximity() int

Lit le niveau de proximité sous forme d’une valeur non signée 8 bits.

Moteur de gestes

enableGestureSensor(interrupts: bool = True) None

Réinitialise l’état des gestes, règle WTIME et le nombre d’impulsions de gestes, augmente la LED à 300 %, configure le bit d’activation de l’interruption de gestes, entre dans la machine à états des gestes, met le périphérique sous tension et active les modes attente, proximité et gestes.

disableGestureSensor() None

Réinitialise l’état des gestes, désactive l’interruption et la machine à états des gestes, et arrête le moteur de gestes.

isGestureAvailable() bool

Renvoie True si le bit GVALID du registre d’état des gestes est activé, indiquant que les données de la FIFO de gestes sont prêtes à être lues.

readGesture() int

Vide la FIFO de gestes, exécute le décodeur de gestes embarqué et renvoie l’une des constantes de direction APDS9960_DIR_*. Renvoie APDS9960_DIR_NONE si le moteur n’est pas en cours d’exécution, si aucune donnée valide n’est disponible ou si les données n’ont pas pu être résolues en un geste reconnu.

resetGestureParameters() None

Efface le tampon FIFO de gestes interne, les deltas, les comptes, les compteurs de rapprochement/éloignement, l’état et le dernier mouvement décodé.

processGestureData() bool

Traite les échantillons FIFO U/D/L/R bruts actuellement mis en tampon afin de mettre à jour les deltas U/D et L/R ainsi que les compteurs de rapprochement/éloignement. Renvoie True si un événement de rapprochement ou d’éloignement a été détecté, False sinon.

decodeGesture() bool

Convertit les comptes U/D et L/R actuels et les deltas accumulés en une direction stockée dans le champ interne gesture_motion_. Renvoie True lorsqu’une direction est reconnue, False sinon.

Seuils de proximité

getProxIntLowThresh() int

Renvoie le seuil bas d’interruption de proximité (registre PILT).

setProxIntLowThresh(threshold: int) None

Définit le seuil bas d’interruption de proximité.

getProxIntHighThresh() int

Renvoie le seuil haut d’interruption de proximité (registre PIHT).

setProxIntHighThresh(threshold: int) None

Définit le seuil haut d’interruption de proximité.

getProximityIntLowThreshold() int

Alias de getProxIntLowThresh().

setProximityIntLowThreshold(threshold: int) None

Alias de setProxIntLowThresh().

getProximityIntHighThreshold() int

Alias de getProxIntHighThresh().

setProximityIntHighThreshold(threshold: int) None

Alias de setProxIntHighThresh().

Courant de la LED, gain et amplification

getLEDDrive() int

Renvoie l’intensité du courant de la LED utilisée pour la proximité et l’ALS. Codée comme l’une des valeurs APDS9960_LED_DRIVE_* (0 = 100 mA, 1 = 50 mA, 2 = 25 mA, 3 = 12,5 mA).

setLEDDrive(drive: int) None

Définit l’intensité du courant de la LED utilisée pour la proximité et l’ALS. drive est l’une des valeurs APDS9960_LED_DRIVE_*.

getProximityGain() int

Renvoie le gain du récepteur de proximité. Codé comme l’une des valeurs APDS9960_PGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setProximityGain(drive: int) None

Définit le gain du récepteur de proximité. drive est l’une des valeurs APDS9960_PGAIN_*.

getAmbientLightGain() int

Renvoie le gain du capteur de lumière ambiante. Codé comme l’une des valeurs APDS9960_AGAIN_* (0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x).

setAmbientLightGain(drive: int) None

Définit le gain du capteur de lumière ambiante. drive est l’une des valeurs APDS9960_AGAIN_*.

getLEDBoost() int

Renvoie l’amplification du courant de la LED. Codée comme l’une des valeurs APDS9960_LED_BOOST_* (0 = 100 %, 1 = 150 %, 2 = 200 %, 3 = 300 %).

setLEDBoost(boost: int) None

Définit l’amplification du courant de la LED. boost est l’une des valeurs APDS9960_LED_BOOST_*.

Compensation du gain de proximité et masque des photodiodes

getProxGainCompEnable() bool

Renvoie True si la compensation du gain de proximité est activée.

setProxGainCompEnable(enable: bool) None

Active ou désactive la compensation du gain de proximité.

getProxPhotoMask() int

Renvoie le masque 4 bits des photodiodes de proximité désactivées. Les bits correspondent à 3=UP, 2=DOWN, 1=LEFT, 0=RIGHT ; 1 désactive une photodiode et 0 l’active.

setProxPhotoMask(mask: int) None

Définit le masque 4 bits des photodiodes de proximité désactivées (voir le codage ci-dessus).

Configuration des gestes

getGestureEnterThresh() int

Renvoie le seuil de proximité requis pour entrer en mode gestes.

setGestureEnterThresh(threshold: int) None

Définit le seuil de proximité requis pour entrer en mode gestes.

getGestureExitThresh() int

Renvoie le seuil de proximité requis pour sortir du mode gestes.

setGestureExitThresh(threshold: int) None

Définit le seuil de proximité requis pour sortir du mode gestes.

getGestureGain() int

Renvoie le gain des photodiodes utilisé en mode gestes. Codé comme l’une des valeurs APDS9960_GGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setGestureGain(gain: int) None

Définit le gain des photodiodes utilisé en mode gestes.

getGestureLEDDrive() int

Renvoie le courant de la LED utilisé en mode gestes. Codé comme l’une des valeurs APDS9960_LED_DRIVE_*.

setGestureLEDDrive(drive: int) None

Définit le courant de la LED utilisé en mode gestes.

getGestureWaitTime() int

Renvoie le temps d’attente basse consommation entre les détections de gestes. Codé comme l’une des valeurs APDS9960_GWTIME_* (0 = 0 ms .. 7 = 39,2 ms).

setGestureWaitTime(time: int) None

Définit le temps d’attente basse consommation entre les détections de gestes.

getGestureMode() bool

Renvoie True si la machine à états des gestes est actuellement en cours d’exécution.

setGestureMode(enable: bool) None

Entre dans la machine à états des gestes ou en sort.

Seuils d’interruption de lumière ambiante

getLightIntLowThreshold() int

Renvoie le seuil bas 16 bits utilisé pour l’interruption de lumière ambiante.

setLightIntLowThreshold(threshold: int) None

Définit le seuil bas 16 bits utilisé pour l’interruption de lumière ambiante.

getLightIntHighThreshold() int

Renvoie le seuil haut 16 bits utilisé pour l’interruption de lumière ambiante.

setLightIntHighThreshold(threshold: int) None

Définit le seuil haut 16 bits utilisé pour l’interruption de lumière ambiante.

Activations et effacements d’interruptions

getAmbientLightIntEnable() bool

Renvoie True si les interruptions de lumière ambiante sont activées.

setAmbientLightIntEnable(enable: bool) None

Active ou désactive les interruptions de lumière ambiante.

getProximityIntEnable() bool

Renvoie True si les interruptions de proximité sont activées.

setProximityIntEnable(enable: bool) None

Active ou désactive les interruptions de proximité.

getGestureIntEnable() bool

Renvoie True si les interruptions de gestes sont activées.

setGestureIntEnable(enable: bool) None

Active ou désactive les interruptions de gestes.

clearAmbientLightInt() None

Efface une interruption de lumière ambiante en attente.

clearProximityInt() None

Efface une interruption de proximité en attente.

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

Sous-classe MicroPython de APDS9960. API publique identique, mais l’accès aux registres sous-jacents utilise des appels readfrom_mem et writeto_mem de type machine.I2C plutôt que des méthodes de type SMBus. C’est la classe à utiliser sur les cibles OpenMV / MicroPython.

Exceptions

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

Sous-classe de ValueError. Levée par le constructeur de APDS9960 lorsque la valeur lue dans le registre d’identifiant de la puce n’est pas présente dans la liste valid_id.

exception apds9960.ADPS9960InvalidMode(mode: int)

Sous-classe de ValueError. Levée par APDS9960.setMode() lorsque l’argument mode est en dehors de la plage APDS9960_MODE_POWER..\ APDS9960_MODE_ALL.

Constantes

Adresse I2C et identifiants de périphérique

apds9960.APDS9960_I2C_ADDR: int

Adresse I2C 7 bits par défaut de l’APDS9960 (0x39).

apds9960.APDS9960_DEV_ID: list

Liste par défaut des valeurs valides du registre d’identifiant de périphérique ([0xAB, 0x9C, 0xA8, -0x55]).

Réglage fin des gestes

apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int

Magnitude minimale d’échantillon (par photodiode) utilisée par le décodeur de gestes lors de la recherche des premiers/derniers échantillons FIFO dans la plage.

apds9960.APDS9960_GESTURE_SENSITIVITY_1: int

Seuil sur les deltas U/D et L/R accumulés au-delà duquel le décodeur retient une direction de balayage.

apds9960.APDS9960_GESTURE_SENSITIVITY_2: int

Seuil sur les deltas U/D et L/R par étape en dessous duquel le décodeur considère un échantillon comme un candidat de rapprochement/éloignement plutôt qu’un balayage.

apds9960.APDS9960_TIME_FIFO_PAUSE: int

Millisecondes pendant lesquelles la boucle de gestes est en sommeil entre deux vidanges de la FIFO.

Modes de fonctionnalité

Ces valeurs sont passées à APDS9960.setMode().

apds9960.APDS9960_MODE_POWER: int

Bit de mise sous tension (0).

apds9960.APDS9960_MODE_AMBIENT_LIGHT: int

Bit d’activation du moteur de lumière ambiante/couleur (1).

apds9960.APDS9960_MODE_PROXIMITY: int

Bit d’activation du moteur de proximité (2).

apds9960.APDS9960_MODE_WAIT: int

Bit d’activation de l’état d’attente (3).

apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int

Bit d’activation de l’interruption de lumière ambiante (4).

apds9960.APDS9960_MODE_PROXIMITY_INT: int

Bit d’activation de l’interruption de proximité (5).

apds9960.APDS9960_MODE_GESTURE: int

Bit d’activation du moteur de gestes (6).

apds9960.APDS9960_MODE_ALL: int

Valeur sentinelle (7) indiquant à APDS9960.setMode() d’activer ou de désactiver tous les bits du registre ENABLE en une seule fois.

Courants de la LED

apds9960.APDS9960_LED_DRIVE_100MA: int

Courant LED de 100 mA (0).

apds9960.APDS9960_LED_DRIVE_50MA: int

Courant LED de 50 mA (1).

apds9960.APDS9960_LED_DRIVE_25MA: int

Courant LED de 25 mA (2).

apds9960.APDS9960_LED_DRIVE_12_5MA: int

Courant LED de 12,5 mA (3).

Gain de proximité (PGAIN)

apds9960.APDS9960_PGAIN_1X: int

Gain de proximité 1x (0).

apds9960.APDS9960_PGAIN_2X: int

Gain de proximité 2x (1).

apds9960.APDS9960_PGAIN_4X: int

Gain de proximité 4x (2). Valeur par défaut appliquée par le constructeur.

apds9960.APDS9960_PGAIN_8X: int

Gain de proximité 8x (3).

Gain de lumière ambiante (AGAIN)

apds9960.APDS9960_AGAIN_1X: int

Gain ALS 1x (0).

apds9960.APDS9960_AGAIN_4X: int

Gain ALS 4x (1). Valeur par défaut appliquée par le constructeur.

apds9960.APDS9960_AGAIN_16X: int

Gain ALS 16x (2).

apds9960.APDS9960_AGAIN_64X: int

Gain ALS 64x (3).

Gain des gestes (GGAIN)

apds9960.APDS9960_GGAIN_1X: int

Gain de gestes 1x (0).

apds9960.APDS9960_GGAIN_2X: int

Gain de gestes 2x (1).

apds9960.APDS9960_GGAIN_4X: int

Gain de gestes 4x (2). Valeur par défaut appliquée par le constructeur.

apds9960.APDS9960_GGAIN_8X: int

Gain de gestes 8x (3).

Amplification de la LED

apds9960.APDS9960_LED_BOOST_100: int

Amplification LED de 100 % (0).

apds9960.APDS9960_LED_BOOST_150: int

Amplification LED de 150 % (1).

apds9960.APDS9960_LED_BOOST_200: int

Amplification LED de 200 % (2).

apds9960.APDS9960_LED_BOOST_300: int

Amplification LED de 300 % (3). Appliquée automatiquement par APDS9960.enableGestureSensor().

Temps d’attente des gestes

apds9960.APDS9960_GWTIME_0MS: int

0 ms (0).

apds9960.APDS9960_GWTIME_2_8MS: int

2,8 ms (1). Valeur par défaut appliquée par le constructeur.

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

Directions des gestes

Ces valeurs sont renvoyées par APDS9960.readGesture().

apds9960.APDS9960_DIR_NONE: int

Aucun geste détecté (0).

apds9960.APDS9960_DIR_LEFT: int

Balayage vers la gauche (1).

apds9960.APDS9960_DIR_RIGHT: int

Balayage vers la droite (2).

apds9960.APDS9960_DIR_UP: int

Balayage vers le haut (3).

apds9960.APDS9960_DIR_DOWN: int

Balayage vers le bas (4).

apds9960.APDS9960_DIR_NEAR: int

Événement de rapprochement (5).

apds9960.APDS9960_DIR_FAR: int

Événement d’éloignement (6).

apds9960.APDS9960_DIR_ALL: int

Valeur sentinelle (7) utilisée en interne pour représenter « n’importe quelle direction ».

États des gestes

Valeurs d’état internes signalées par la machine à états des gestes.

apds9960.APDS9960_STATE_NA: int

Aucun état (0).

apds9960.APDS9960_STATE_NEAR: int

État de rapprochement détecté (1).

apds9960.APDS9960_STATE_FAR: int

État d’éloignement détecté (2).

apds9960.APDS9960_STATE_ALL: int

Valeur sentinelle (3) utilisée en interne pour représenter « n’importe quel état ».