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