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