apds9960 — driver pentru senzor de proximitate, gesturi și culoare#

Acest modul oferă un driver pentru senzorul digital de proximitate, lumină ambientală, culoare RGB și gesturi Broadcom/Avago APDS9960, prin I2C. Driverul expune comenzi de activare/dezactivare per caracteristică, citiri brute ale canalelor (clear, R, G, B, proximitate) și o mașină de stare software de decodare a gesturilor care clasifică glisările în sus/jos/stânga/dreapta și gesturile de apropiere/depărtare din FIFO-ul cu 4 fotodiode de pe cip.

Exemplu de utilizare:

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)

Clase#

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

Construiește o instanță de driver APDS9960.

  • bus este un obiect de magistrală I2C configurat, utilizat pentru a comunica cu senzorul. Clasa de bază emite apeluri de tip SMBus read_byte_data, write_byte_data și read_i2c_block_data; pentru machine.I2C din MicroPython utilizați în schimb uAPDS9960.

  • address este adresa I2C pe 7 biți a dispozitivului. Implicit este APDS9960_I2C_ADDR (0x39).

  • valid_id este o listă de valori acceptabile returnate de registrul de ID al cipului. Implicit este APDS9960_DEV_ID.

Constructorul citește ID-ul dispozitivului și generează ADPS9960InvalidDevId dacă acesta nu se află în valid_id. Apoi dezactivează fiecare caracteristică, programează valorile implicite ATIME/WTIME/PPULSE și aplică configurațiile implicite pentru curentul LED, amplificarea (gain) de proximitate, amplificarea (gain) ALS, pragurile de proximitate, pragurile de lumină ambientală, persistența și configurarea motorului de gesturi (praguri de intrare/ieșire, GCONF1, amplificarea (gain) gesturilor, curentul LED al gesturilor, timpul de așteptare al gesturilor, decalajele gesturilor, GPULSE, GCONF3 și activarea întreruperii de gesturi).

Controlul modului și al alimentării#

getMode() int#

Returnează valoarea brută a registrului ENABLE, care codifică ce caracteristici sunt activate în prezent (alimentare, ALS, proximitate, așteptare, întrerupere ALS, întrerupere de proximitate, gesturi).

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

Activează sau dezactivează o caracteristică individuală în registrul ENABLE. mode trebuie să fie una dintre valorile APDS9960_MODE_* (APDS9960_MODE_POWER ..\ APDS9960_MODE_ALL). Atunci când mode este APDS9960_MODE_ALL, toți biții sunt activați sau dezactivați simultan. Generează ADPS9960InvalidMode pentru valori în afara intervalului.

enablePower() None#

Pornește APDS9960 (setează bitul PON din ENABLE).

disablePower() None#

Oprește APDS9960 (șterge bitul PON din ENABLE).

Senzor de lumină ambientală / RGB#

enableLightSensor(interrupts: bool = True) None#

Restabilește amplificarea (gain) ALS implicită, configurează bitul de activare a întreruperii ALS, pornește dispozitivul și activează motorul de lumină ambientală/culoare.

disableLightSensor() None#

Dezactivează întreruperea ALS și oprește motorul de lumină ambientală/culoare.

readAmbientLight() int#

Citește nivelul de lumină ambientală al canalului clear ca valoare fără semn pe 16 biți.

readRedLight() int#

Citește nivelul canalului roșu ca valoare fără semn pe 16 biți.

readGreenLight() int#

Citește nivelul canalului verde ca valoare fără semn pe 16 biți.

readBlueLight() int#

Citește nivelul canalului albastru ca valoare fără semn pe 16 biți.

Senzor de proximitate#

enableProximitySensor(interrupts: bool = True) None#

Restabilește amplificarea (gain) de proximitate și curentul LED implicite, configurează bitul de activare a întreruperii de proximitate, pornește dispozitivul și activează motorul de proximitate.

disableProximitySensor() None#

Dezactivează întreruperea de proximitate și oprește motorul de proximitate.

readProximity() int#

Citește nivelul de proximitate ca valoare fără semn pe 8 biți.

Motorul de gesturi#

enableGestureSensor(interrupts: bool = True) None#

Resetează starea gesturilor, setează WTIME și numărul de impulsuri ale gesturilor, mărește LED-ul la 300%, configurează bitul de activare a întreruperii de gesturi, intră în mașina de stare a gesturilor, pornește dispozitivul și activează modurile de așteptare, proximitate și gesturi.

disableGestureSensor() None#

Resetează starea gesturilor, dezactivează întreruperea de gesturi și mașina de stare și oprește motorul de gesturi.

isGestureAvailable() bool#

Returnează True dacă bitul GVALID al registrului de stare a gesturilor este setat, indicând faptul că datele din FIFO-ul de gesturi sunt gata pentru a fi citite.

readGesture() int#

Golește FIFO-ul de gesturi, rulează decodorul de gesturi integrat și returnează una dintre constantele de direcție APDS9960_DIR_*. Returnează APDS9960_DIR_NONE dacă motorul nu rulează, dacă nu sunt disponibile date valide sau dacă datele nu au putut fi rezolvate într-un gest recunoscut.

resetGestureParameters() None#

Șterge tamponul (buffer) FIFO intern de gesturi, deltele, contoarele, contoarele de apropiere/depărtare, starea și ultima mișcare decodată.

processGestureData() bool#

Procesează eșantioanele brute U/D/L/R din FIFO aflate în prezent în tampon pentru a actualiza deltele U/D și L/R și contoarele de apropiere/depărtare. Returnează True dacă a fost detectat un eveniment de apropiere sau depărtare, False în caz contrar.

decodeGesture() bool#

Convertește contoarele curente U/D și L/R și deltele acumulate într-o direcție stocată în câmpul intern gesture_motion_. Returnează True atunci când o direcție este recunoscută, False în caz contrar.

Praguri de proximitate#

getProxIntLowThresh() int#

Returnează pragul scăzut al întreruperii de proximitate (registrul PILT).

setProxIntLowThresh(threshold: int) None#

Setează pragul scăzut al întreruperii de proximitate.

getProxIntHighThresh() int#

Returnează pragul ridicat al întreruperii de proximitate (registrul PIHT).

setProxIntHighThresh(threshold: int) None#

Setează pragul ridicat al întreruperii de proximitate.

getProximityIntLowThreshold() int#

Alias pentru getProxIntLowThresh().

setProximityIntLowThreshold(threshold: int) None#

Alias pentru setProxIntLowThresh().

getProximityIntHighThreshold() int#

Alias pentru getProxIntHighThresh().

setProximityIntHighThreshold(threshold: int) None#

Alias pentru setProxIntHighThresh().

Curentul LED, amplificarea (gain) și boost-ul#

getLEDDrive() int#

Returnează intensitatea curentului LED utilizat pentru proximitate și ALS. Codificată ca una dintre valorile APDS9960_LED_DRIVE_* (0 = 100 mA, 1 = 50 mA, 2 = 25 mA, 3 = 12.5 mA).

setLEDDrive(drive: int) None#

Setează intensitatea curentului LED utilizat pentru proximitate și ALS. drive este una dintre valorile APDS9960_LED_DRIVE_*.

getProximityGain() int#

Returnează amplificarea (gain) receptorului de proximitate. Codificată ca una dintre valorile APDS9960_PGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setProximityGain(drive: int) None#

Setează amplificarea (gain) receptorului de proximitate. drive este una dintre valorile APDS9960_PGAIN_*.

getAmbientLightGain() int#

Returnează amplificarea (gain) senzorului de lumină ambientală. Codificată ca una dintre valorile APDS9960_AGAIN_* (0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x).

setAmbientLightGain(drive: int) None#

Setează amplificarea (gain) senzorului de lumină ambientală. drive este una dintre valorile APDS9960_AGAIN_*.

getLEDBoost() int#

Returnează boost-ul de curent LED. Codificat ca una dintre valorile APDS9960_LED_BOOST_* (0 = 100%, 1 = 150%, 2 = 200%, 3 = 300%).

setLEDBoost(boost: int) None#

Setează boost-ul de curent LED. boost este una dintre valorile APDS9960_LED_BOOST_*.

Compensarea amplificării (gain) de proximitate și masca de fotodiode#

getProxGainCompEnable() bool#

Returnează True dacă compensarea amplificării (gain) de proximitate este activată.

setProxGainCompEnable(enable: bool) None#

Activează sau dezactivează compensarea amplificării (gain) de proximitate.

getProxPhotoMask() int#

Returnează masca pe 4 biți a fotodiodelor de proximitate dezactivate. Biții se mapează ca 3=UP, 2=DOWN, 1=LEFT, 0=RIGHT; 1 dezactivează o fotodiodă, iar 0 o activează.

setProxPhotoMask(mask: int) None#

Setează masca pe 4 biți a fotodiodelor de proximitate dezactivate (consultați codificarea de mai sus).

Configurarea gesturilor#

getGestureEnterThresh() int#

Returnează pragul de proximitate necesar pentru a intra în modul de gesturi.

setGestureEnterThresh(threshold: int) None#

Setează pragul de proximitate necesar pentru a intra în modul de gesturi.

getGestureExitThresh() int#

Returnează pragul de proximitate necesar pentru a ieși din modul de gesturi.

setGestureExitThresh(threshold: int) None#

Setează pragul de proximitate necesar pentru a ieși din modul de gesturi.

getGestureGain() int#

Returnează amplificarea (gain) fotodiodelor utilizată în modul de gesturi. Codificată ca una dintre valorile APDS9960_GGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setGestureGain(gain: int) None#

Setează amplificarea (gain) fotodiodelor utilizată în modul de gesturi.

getGestureLEDDrive() int#

Returnează curentul LED utilizat în modul de gesturi. Codificat ca una dintre valorile APDS9960_LED_DRIVE_*.

setGestureLEDDrive(drive: int) None#

Setează curentul LED utilizat în modul de gesturi.

getGestureWaitTime() int#

Returnează timpul de așteptare în consum redus între detectările de gesturi. Codificat ca una dintre valorile APDS9960_GWTIME_* (0 = 0 ms .. 7 = 39.2 ms).

setGestureWaitTime(time: int) None#

Setează timpul de așteptare în consum redus între detectările de gesturi.

getGestureMode() bool#

Returnează True dacă mașina de stare a gesturilor rulează în prezent.

setGestureMode(enable: bool) None#

Intră sau iese din mașina de stare a gesturilor.

Praguri de întrerupere pentru lumina ambientală#

getLightIntLowThreshold() int#

Returnează pragul scăzut pe 16 biți utilizat pentru întreruperea de lumină ambientală.

setLightIntLowThreshold(threshold: int) None#

Setează pragul scăzut pe 16 biți utilizat pentru întreruperea de lumină ambientală.

getLightIntHighThreshold() int#

Returnează pragul ridicat pe 16 biți utilizat pentru întreruperea de lumină ambientală.

setLightIntHighThreshold(threshold: int) None#

Setează pragul ridicat pe 16 biți utilizat pentru întreruperea de lumină ambientală.

Activări și ștergeri de întreruperi#

getAmbientLightIntEnable() bool#

Returnează True dacă întreruperile de lumină ambientală sunt activate.

setAmbientLightIntEnable(enable: bool) None#

Activează sau dezactivează întreruperile de lumină ambientală.

getProximityIntEnable() bool#

Returnează True dacă întreruperile de proximitate sunt activate.

setProximityIntEnable(enable: bool) None#

Activează sau dezactivează întreruperile de proximitate.

getGestureIntEnable() bool#

Returnează True dacă întreruperile de gesturi sunt activate.

setGestureIntEnable(enable: bool) None#

Activează sau dezactivează întreruperile de gesturi.

clearAmbientLightInt() None#

Șterge o întrerupere de lumină ambientală în așteptare.

clearProximityInt() None#

Șterge o întrerupere de proximitate în așteptare.

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

Subclasă MicroPython a APDS9960. API public identic, dar accesul subiacent la registre folosește apeluri de tip machine.I2C readfrom_mem și writeto_mem în loc de metode de tip SMBus. Aceasta este clasa de utilizat pe platformele OpenMV / MicroPython.

Excepții#

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

Subclasă a ValueError. Generată de constructorul APDS9960 atunci când valoarea citită din registrul de ID al cipului nu este prezentă în lista valid_id.

exception apds9960.ADPS9960InvalidMode(mode: int)#

Subclasă a ValueError. Generată de APDS9960.setMode() atunci când argumentul mode se află în afara intervalului APDS9960_MODE_POWER..\ APDS9960_MODE_ALL.

Constante#

Adresa I2C și ID-urile dispozitivului#

apds9960.APDS9960_I2C_ADDR: int#

Adresa I2C implicită pe 7 biți a APDS9960 (0x39).

apds9960.APDS9960_DEV_ID: list#

Lista implicită de valori valide ale registrului de ID al dispozitivului ([0xAB, 0x9C, 0xA8, -0x55]).

Reglarea gesturilor#

apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int#

Magnitudinea minimă a eșantionului (per fotodiodă) utilizată de decodorul de gesturi atunci când caută primele/ultimele eșantioane FIFO aflate în interval.

apds9960.APDS9960_GESTURE_SENSITIVITY_1: int#

Pragul aplicat deltelor acumulate U/D și L/R peste care decodorul stabilește o direcție de glisare.

apds9960.APDS9960_GESTURE_SENSITIVITY_2: int#

Pragul aplicat deltelor per pas U/D și L/R sub care decodorul consideră un eșantion drept candidat de apropiere/depărtare, mai degrabă decât o glisare.

apds9960.APDS9960_TIME_FIFO_PAUSE: int#

Milisecundele cât bucla de gesturi este în repaus între golirile FIFO.

Moduri de caracteristici#

Aceste valori sunt transmise către APDS9960.setMode().

apds9960.APDS9960_MODE_POWER: int#

Bitul de pornire (0).

apds9960.APDS9960_MODE_AMBIENT_LIGHT: int#

Bitul de activare a motorului de lumină ambientală/culoare (1).

apds9960.APDS9960_MODE_PROXIMITY: int#

Bitul de activare a motorului de proximitate (2).

apds9960.APDS9960_MODE_WAIT: int#

Bitul de activare a stării de așteptare (3).

apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int#

Bitul de activare a întreruperii de lumină ambientală (4).

apds9960.APDS9960_MODE_PROXIMITY_INT: int#

Bitul de activare a întreruperii de proximitate (5).

apds9960.APDS9960_MODE_GESTURE: int#

Bitul de activare a motorului de gesturi (6).

apds9960.APDS9960_MODE_ALL: int#

Valoare santinelă (7) care îi indică lui APDS9960.setMode() să activeze sau să dezactiveze simultan fiecare bit din registrul ENABLE.

Curenți LED#

apds9960.APDS9960_LED_DRIVE_100MA: int#

Curent LED de 100 mA (0).

apds9960.APDS9960_LED_DRIVE_50MA: int#

Curent LED de 50 mA (1).

apds9960.APDS9960_LED_DRIVE_25MA: int#

Curent LED de 25 mA (2).

apds9960.APDS9960_LED_DRIVE_12_5MA: int#

Curent LED de 12.5 mA (3).

Amplificarea (gain) de proximitate (PGAIN)#

apds9960.APDS9960_PGAIN_1X: int#

Amplificare (gain) de proximitate 1x (0).

apds9960.APDS9960_PGAIN_2X: int#

Amplificare (gain) de proximitate 2x (1).

apds9960.APDS9960_PGAIN_4X: int#

Amplificare (gain) de proximitate 4x (2). Valoarea implicită aplicată de constructor.

apds9960.APDS9960_PGAIN_8X: int#

Amplificare (gain) de proximitate 8x (3).

Amplificarea (gain) de lumină ambientală (AGAIN)#

apds9960.APDS9960_AGAIN_1X: int#

Amplificare (gain) ALS 1x (0).

apds9960.APDS9960_AGAIN_4X: int#

Amplificare (gain) ALS 4x (1). Valoarea implicită aplicată de constructor.

apds9960.APDS9960_AGAIN_16X: int#

Amplificare (gain) ALS 16x (2).

apds9960.APDS9960_AGAIN_64X: int#

Amplificare (gain) ALS 64x (3).

Amplificarea (gain) gesturilor (GGAIN)#

apds9960.APDS9960_GGAIN_1X: int#

Amplificare (gain) a gesturilor 1x (0).

apds9960.APDS9960_GGAIN_2X: int#

Amplificare (gain) a gesturilor 2x (1).

apds9960.APDS9960_GGAIN_4X: int#

Amplificare (gain) a gesturilor 4x (2). Valoarea implicită aplicată de constructor.

apds9960.APDS9960_GGAIN_8X: int#

Amplificare (gain) a gesturilor 8x (3).

Boost LED#

apds9960.APDS9960_LED_BOOST_100: int#

Boost LED 100% (0).

apds9960.APDS9960_LED_BOOST_150: int#

Boost LED 150% (1).

apds9960.APDS9960_LED_BOOST_200: int#

Boost LED 200% (2).

apds9960.APDS9960_LED_BOOST_300: int#

Boost LED 300% (3). Aplicat automat de APDS9960.enableGestureSensor().

Timpi de așteptare ai gesturilor#

apds9960.APDS9960_GWTIME_0MS: int#

0 ms (0).

apds9960.APDS9960_GWTIME_2_8MS: int#

2.8 ms (1). Valoarea implicită aplicată de 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).

Direcții de gesturi#

Aceste valori sunt returnate de APDS9960.readGesture().

apds9960.APDS9960_DIR_NONE: int#

Niciun gest detectat (0).

apds9960.APDS9960_DIR_LEFT: int#

Glisare la stânga (1).

apds9960.APDS9960_DIR_RIGHT: int#

Glisare la dreapta (2).

apds9960.APDS9960_DIR_UP: int#

Glisare în sus (3).

apds9960.APDS9960_DIR_DOWN: int#

Glisare în jos (4).

apds9960.APDS9960_DIR_NEAR: int#

Eveniment de apropiere (5).

apds9960.APDS9960_DIR_FAR: int#

Eveniment de depărtare (6).

apds9960.APDS9960_DIR_ALL: int#

Valoare santinelă (7) utilizată intern pentru a reprezenta „orice direcție”.

Stări de gesturi#

Valori de stare interne raportate prin mașina de stare a gesturilor.

apds9960.APDS9960_STATE_NA: int#

Nicio stare (0).

apds9960.APDS9960_STATE_NEAR: int#

Stare de apropiere detectată (1).

apds9960.APDS9960_STATE_FAR: int#

Stare de depărtare detectată (2).

apds9960.APDS9960_STATE_ALL: int#

Valoare santinelă (3) utilizată intern pentru a reprezenta „orice stare”.