apds9960 — sterownik sensora zbliżeniowego, gestów i koloru

Ten moduł udostępnia sterownik cyfrowego sensora zbliżeniowego, światła otoczenia, koloru RGB i gestów Broadcom/Avago APDS9960 poprzez I2C. Sterownik udostępnia sterowanie włączaniem/wyłączaniem poszczególnych funkcji, surowe odczyty kanałów (clear, R, G, B, zbliżenie) oraz programową maszynę stanów dekodującą gesty, która klasyfikuje przesunięcia w górę/dół/lewo/prawo oraz gesty zbliżenia/oddalenia z wbudowanej kolejki FIFO 4 fotodiod.

Przykład użycia:

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)

Klasy

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

Tworzy instancję sterownika APDS9960.

  • bus to skonfigurowany obiekt magistrali I2C używany do komunikacji z sensorem. Klasa bazowa wywołuje metody w stylu SMBus read_byte_data, write_byte_data oraz read_i2c_block_data; dla machine.I2C z MicroPython należy zamiast tego użyć uAPDS9960.

  • address to 7-bitowy adres I2C urządzenia. Domyślnie APDS9960_I2C_ADDR (0x39).

  • valid_id to lista akceptowalnych wartości zwracanych przez rejestr ID układu. Domyślnie APDS9960_DEV_ID.

Konstruktor odczytuje identyfikator urządzenia i zgłasza ADPS9960InvalidDevId, jeśli nie znajduje się on na liście valid_id. Następnie wyłącza każdą funkcję, programuje domyślne wartości ATIME/WTIME/PPULSE oraz stosuje domyślne ustawienia sterowania diodą LED, wzmocnienia zbliżenia, wzmocnienia ALS, progów zbliżenia, progów światła otoczenia, trwałości oraz konfiguracji silnika gestów (progi wejścia/wyjścia, GCONF1, wzmocnienie gestów, sterowanie diodą LED gestów, czas oczekiwania gestów, przesunięcia gestów, GPULSE, GCONF3 oraz włączenie przerwania gestów).

Sterowanie trybem i zasilaniem

getMode() int

Zwraca surową wartość rejestru ENABLE, kodującą, które funkcje są obecnie włączone (zasilanie, ALS, zbliżenie, oczekiwanie, przerwanie ALS, przerwanie zbliżenia, gesty).

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

Włącza lub wyłącza pojedynczą funkcję w rejestrze ENABLE. mode musi być jedną z wartości APDS9960_MODE_* (APDS9960_MODE_POWER ..\ APDS9960_MODE_ALL). Gdy mode ma wartość APDS9960_MODE_ALL, wszystkie bity są włączane lub wyłączane jednocześnie. Zgłasza ADPS9960InvalidMode dla wartości spoza zakresu.

enablePower() None

Włącza zasilanie APDS9960 (ustawia bit PON w ENABLE).

disablePower() None

Wyłącza zasilanie APDS9960 (czyści bit PON w ENABLE).

Sensor światła otoczenia / RGB

enableLightSensor(interrupts: bool = True) None

Przywraca domyślne wzmocnienie ALS, konfiguruje bit włączenia przerwania ALS, włącza zasilanie urządzenia oraz uruchamia silnik światła otoczenia/koloru.

disableLightSensor() None

Wyłącza przerwanie ALS i zatrzymuje silnik światła otoczenia/koloru.

readAmbientLight() int

Odczytuje poziom światła otoczenia z kanału clear jako 16-bitową wartość bez znaku.

readRedLight() int

Odczytuje poziom kanału czerwonego jako 16-bitową wartość bez znaku.

readGreenLight() int

Odczytuje poziom kanału zielonego jako 16-bitową wartość bez znaku.

readBlueLight() int

Odczytuje poziom kanału niebieskiego jako 16-bitową wartość bez znaku.

Sensor zbliżeniowy

enableProximitySensor(interrupts: bool = True) None

Przywraca domyślne wzmocnienie zbliżenia i sterowanie diodą LED, konfiguruje bit włączenia przerwania zbliżenia, włącza zasilanie urządzenia oraz uruchamia silnik zbliżenia.

disableProximitySensor() None

Wyłącza przerwanie zbliżenia i zatrzymuje silnik zbliżenia.

readProximity() int

Odczytuje poziom zbliżenia jako 8-bitową wartość bez znaku.

Silnik gestów

enableGestureSensor(interrupts: bool = True) None

Resetuje stan gestów, ustawia WTIME i liczbę impulsów gestów, zwiększa moc diody LED do 300%, konfiguruje bit włączenia przerwania gestów, uruchamia maszynę stanów gestów, włącza zasilanie urządzenia oraz włącza tryby oczekiwania, zbliżenia i gestów.

disableGestureSensor() None

Resetuje stan gestów, wyłącza przerwanie gestów i maszynę stanów oraz zatrzymuje silnik gestów.

isGestureAvailable() bool

Zwraca True, jeśli bit GVALID rejestru stanu gestów jest ustawiony, co oznacza, że dane FIFO gestów są gotowe do odczytu.

readGesture() int

Opróżnia kolejkę FIFO gestów, uruchamia wbudowany dekoder gestów i zwraca jedną ze stałych kierunku APDS9960_DIR_*. Zwraca APDS9960_DIR_NONE, jeśli silnik nie działa, brak jest dostępnych poprawnych danych lub dane nie zostały rozpoznane jako znany gest.

resetGestureParameters() None

Czyści wewnętrzny bufor FIFO gestów, różnice, liczniki, liczniki zbliżenia/oddalenia, stan oraz ostatnio zdekodowany ruch.

processGestureData() bool

Przetwarza aktualnie buforowane surowe próbki FIFO U/D/L/R, aby zaktualizować różnice U/D i L/R oraz liczniki zbliżenia/oddalenia. Zwraca True, jeśli wykryto zdarzenie zbliżenia lub oddalenia, w przeciwnym razie False.

decodeGesture() bool

Przekształca bieżące liczniki U/D i L/R oraz zakumulowane różnice w kierunek przechowywany w wewnętrznym polu gesture_motion_. Zwraca True, gdy kierunek zostanie rozpoznany, w przeciwnym razie False.

Progi zbliżenia

getProxIntLowThresh() int

Zwraca dolny próg przerwania zbliżenia (rejestr PILT).

setProxIntLowThresh(threshold: int) None

Ustawia dolny próg przerwania zbliżenia.

getProxIntHighThresh() int

Zwraca górny próg przerwania zbliżenia (rejestr PIHT).

setProxIntHighThresh(threshold: int) None

Ustawia górny próg przerwania zbliżenia.

getProximityIntLowThreshold() int

Alias dla getProxIntLowThresh().

setProximityIntLowThreshold(threshold: int) None

Alias dla setProxIntLowThresh().

getProximityIntHighThreshold() int

Alias dla getProxIntHighThresh().

setProximityIntHighThreshold(threshold: int) None

Alias dla setProxIntHighThresh().

Sterowanie diodą LED, wzmocnienie i wzmocnienie mocy

getLEDDrive() int

Zwraca siłę sterowania diodą LED używaną dla zbliżenia i ALS. Kodowana jako jedna z wartości APDS9960_LED_DRIVE_* (0 = 100 mA, 1 = 50 mA, 2 = 25 mA, 3 = 12,5 mA).

setLEDDrive(drive: int) None

Ustawia siłę sterowania diodą LED używaną dla zbliżenia i ALS. drive jest jedną z wartości APDS9960_LED_DRIVE_*.

getProximityGain() int

Zwraca wzmocnienie odbiornika zbliżenia. Kodowane jako jedna z wartości APDS9960_PGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setProximityGain(drive: int) None

Ustawia wzmocnienie odbiornika zbliżenia. drive jest jedną z wartości APDS9960_PGAIN_*.

getAmbientLightGain() int

Zwraca wzmocnienie sensora światła otoczenia. Kodowane jako jedna z wartości APDS9960_AGAIN_* (0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x).

setAmbientLightGain(drive: int) None

Ustawia wzmocnienie sensora światła otoczenia. drive jest jedną z wartości APDS9960_AGAIN_*.

getLEDBoost() int

Zwraca wzmocnienie mocy prądu diody LED. Kodowane jako jedna z wartości APDS9960_LED_BOOST_* (0 = 100%, 1 = 150%, 2 = 200%, 3 = 300%).

setLEDBoost(boost: int) None

Ustawia wzmocnienie mocy prądu diody LED. boost jest jedną z wartości APDS9960_LED_BOOST_*.

Kompensacja wzmocnienia zbliżenia i maska fotodiod

getProxGainCompEnable() bool

Zwraca True, jeśli kompensacja wzmocnienia zbliżenia jest włączona.

setProxGainCompEnable(enable: bool) None

Włącza lub wyłącza kompensację wzmocnienia zbliżenia.

getProxPhotoMask() int

Zwraca 4-bitową maskę wyłączonych fotodiod zbliżenia. Bity mapują się jako 3=UP, 2=DOWN, 1=LEFT, 0=RIGHT; 1 wyłącza fotodiodę, a 0 ją włącza.

setProxPhotoMask(mask: int) None

Ustawia 4-bitową maskę wyłączonych fotodiod zbliżenia (zobacz kodowanie powyżej).

Konfiguracja gestów

getGestureEnterThresh() int

Zwraca próg zbliżenia wymagany do wejścia w tryb gestów.

setGestureEnterThresh(threshold: int) None

Ustawia próg zbliżenia wymagany do wejścia w tryb gestów.

getGestureExitThresh() int

Zwraca próg zbliżenia wymagany do wyjścia z trybu gestów.

setGestureExitThresh(threshold: int) None

Ustawia próg zbliżenia wymagany do wyjścia z trybu gestów.

getGestureGain() int

Zwraca wzmocnienie fotodiody używane w trybie gestów. Kodowane jako jedna z wartości APDS9960_GGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setGestureGain(gain: int) None

Ustawia wzmocnienie fotodiody używane w trybie gestów.

getGestureLEDDrive() int

Zwraca prąd sterowania diodą LED używany w trybie gestów. Kodowany jako jedna z wartości APDS9960_LED_DRIVE_*.

setGestureLEDDrive(drive: int) None

Ustawia prąd sterowania diodą LED używany w trybie gestów.

getGestureWaitTime() int

Zwraca czas oczekiwania o niskim poborze mocy między wykryciami gestów. Kodowany jako jedna z wartości APDS9960_GWTIME_* (0 = 0 ms .. 7 = 39,2 ms).

setGestureWaitTime(time: int) None

Ustawia czas oczekiwania o niskim poborze mocy między wykryciami gestów.

getGestureMode() bool

Zwraca True, jeśli maszyna stanów gestów jest obecnie uruchomiona.

setGestureMode(enable: bool) None

Uruchamia lub zatrzymuje maszynę stanów gestów.

Progi przerwania światła otoczenia

getLightIntLowThreshold() int

Zwraca 16-bitowy dolny próg używany dla przerwania światła otoczenia.

setLightIntLowThreshold(threshold: int) None

Ustawia 16-bitowy dolny próg używany dla przerwania światła otoczenia.

getLightIntHighThreshold() int

Zwraca 16-bitowy górny próg używany dla przerwania światła otoczenia.

setLightIntHighThreshold(threshold: int) None

Ustawia 16-bitowy górny próg używany dla przerwania światła otoczenia.

Włączanie i czyszczenie przerwań

getAmbientLightIntEnable() bool

Zwraca True, jeśli przerwania światła otoczenia są włączone.

setAmbientLightIntEnable(enable: bool) None

Włącza lub wyłącza przerwania światła otoczenia.

getProximityIntEnable() bool

Zwraca True, jeśli przerwania zbliżenia są włączone.

setProximityIntEnable(enable: bool) None

Włącza lub wyłącza przerwania zbliżenia.

getGestureIntEnable() bool

Zwraca True, jeśli przerwania gestów są włączone.

setGestureIntEnable(enable: bool) None

Włącza lub wyłącza przerwania gestów.

clearAmbientLightInt() None

Czyści oczekujące przerwanie światła otoczenia.

clearProximityInt() None

Czyści oczekujące przerwanie zbliżenia.

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

Podklasa MicroPython klasy APDS9960. Identyczne publiczne API, ale bazowy dostęp do rejestrów wykorzystuje wywołania readfrom_mem i writeto_mem w stylu machine.I2C zamiast metod w stylu SMBus. To jest klasa, której należy używać na platformach OpenMV / MicroPython.

Wyjątki

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

Podklasa ValueError. Zgłaszana przez konstruktor APDS9960, gdy wartość odczytana z rejestru ID układu nie znajduje się na liście valid_id.

exception apds9960.ADPS9960InvalidMode(mode: int)

Podklasa ValueError. Zgłaszana przez APDS9960.setMode(), gdy argument mode znajduje się poza zakresem APDS9960_MODE_POWER..\ APDS9960_MODE_ALL.

Stałe

Adres I2C i identyfikatory urządzeń

apds9960.APDS9960_I2C_ADDR: int

Domyślny 7-bitowy adres I2C APDS9960 (0x39).

apds9960.APDS9960_DEV_ID: list

Domyślna lista poprawnych wartości rejestru ID urządzenia ([0xAB, 0x9C, 0xA8, -0x55]).

Strojenie gestów

apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int

Minimalna wartość próbki (na fotodiodę) używana przez dekoder gestów podczas wyszukiwania pierwszej/ostatniej próbki FIFO w zakresie.

apds9960.APDS9960_GESTURE_SENSITIVITY_1: int

Próg na zakumulowanych różnicach U/D i L/R, powyżej którego dekoder przypisuje kierunek przesunięcia.

apds9960.APDS9960_GESTURE_SENSITIVITY_2: int

Próg na różnicach U/D i L/R na krok, poniżej którego dekoder uznaje próbkę za kandydata zbliżenia/oddalenia, a nie przesunięcia.

apds9960.APDS9960_TIME_FIFO_PAUSE: int

Liczba milisekund, przez którą pętla gestów śpi między opróżnieniami FIFO.

Tryby funkcji

Te wartości są przekazywane do APDS9960.setMode().

apds9960.APDS9960_MODE_POWER: int

Bit włączenia zasilania (0).

apds9960.APDS9960_MODE_AMBIENT_LIGHT: int

Bit włączenia silnika światła otoczenia/koloru (1).

apds9960.APDS9960_MODE_PROXIMITY: int

Bit włączenia silnika zbliżenia (2).

apds9960.APDS9960_MODE_WAIT: int

Bit włączenia stanu oczekiwania (3).

apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int

Bit włączenia przerwania światła otoczenia (4).

apds9960.APDS9960_MODE_PROXIMITY_INT: int

Bit włączenia przerwania zbliżenia (5).

apds9960.APDS9960_MODE_GESTURE: int

Bit włączenia silnika gestów (6).

apds9960.APDS9960_MODE_ALL: int

Wartość wartownicza (7) nakazująca APDS9960.setMode() włączenie lub wyłączenie każdego bitu w rejestrze ENABLE jednocześnie.

Prądy sterowania diodą LED

apds9960.APDS9960_LED_DRIVE_100MA: int

Sterowanie diodą LED 100 mA (0).

apds9960.APDS9960_LED_DRIVE_50MA: int

Sterowanie diodą LED 50 mA (1).

apds9960.APDS9960_LED_DRIVE_25MA: int

Sterowanie diodą LED 25 mA (2).

apds9960.APDS9960_LED_DRIVE_12_5MA: int

Sterowanie diodą LED 12,5 mA (3).

Wzmocnienie zbliżenia (PGAIN)

apds9960.APDS9960_PGAIN_1X: int

Wzmocnienie zbliżenia 1x (0).

apds9960.APDS9960_PGAIN_2X: int

Wzmocnienie zbliżenia 2x (1).

apds9960.APDS9960_PGAIN_4X: int

Wzmocnienie zbliżenia 4x (2). Wartość domyślna stosowana przez konstruktor.

apds9960.APDS9960_PGAIN_8X: int

Wzmocnienie zbliżenia 8x (3).

Wzmocnienie światła otoczenia (AGAIN)

apds9960.APDS9960_AGAIN_1X: int

Wzmocnienie ALS 1x (0).

apds9960.APDS9960_AGAIN_4X: int

Wzmocnienie ALS 4x (1). Wartość domyślna stosowana przez konstruktor.

apds9960.APDS9960_AGAIN_16X: int

Wzmocnienie ALS 16x (2).

apds9960.APDS9960_AGAIN_64X: int

Wzmocnienie ALS 64x (3).

Wzmocnienie gestów (GGAIN)

apds9960.APDS9960_GGAIN_1X: int

Wzmocnienie gestów 1x (0).

apds9960.APDS9960_GGAIN_2X: int

Wzmocnienie gestów 2x (1).

apds9960.APDS9960_GGAIN_4X: int

Wzmocnienie gestów 4x (2). Wartość domyślna stosowana przez konstruktor.

apds9960.APDS9960_GGAIN_8X: int

Wzmocnienie gestów 8x (3).

Wzmocnienie mocy diody LED

apds9960.APDS9960_LED_BOOST_100: int

Wzmocnienie mocy diody LED 100% (0).

apds9960.APDS9960_LED_BOOST_150: int

Wzmocnienie mocy diody LED 150% (1).

apds9960.APDS9960_LED_BOOST_200: int

Wzmocnienie mocy diody LED 200% (2).

apds9960.APDS9960_LED_BOOST_300: int

Wzmocnienie mocy diody LED 300% (3). Stosowane automatycznie przez APDS9960.enableGestureSensor().

Czasy oczekiwania gestów

apds9960.APDS9960_GWTIME_0MS: int

0 ms (0).

apds9960.APDS9960_GWTIME_2_8MS: int

2,8 ms (1). Wartość domyślna stosowana przez konstruktor.

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

Kierunki gestów

Te wartości są zwracane przez APDS9960.readGesture().

apds9960.APDS9960_DIR_NONE: int

Nie wykryto gestu (0).

apds9960.APDS9960_DIR_LEFT: int

Przesunięcie w lewo (1).

apds9960.APDS9960_DIR_RIGHT: int

Przesunięcie w prawo (2).

apds9960.APDS9960_DIR_UP: int

Przesunięcie w górę (3).

apds9960.APDS9960_DIR_DOWN: int

Przesunięcie w dół (4).

apds9960.APDS9960_DIR_NEAR: int

Zdarzenie zbliżenia (5).

apds9960.APDS9960_DIR_FAR: int

Zdarzenie oddalenia (6).

apds9960.APDS9960_DIR_ALL: int

Wartość wartownicza (7) używana wewnętrznie do reprezentowania „dowolnego kierunku”.

Stany gestów

Wewnętrzne wartości stanu raportowane przez maszynę stanów gestów.

apds9960.APDS9960_STATE_NA: int

Brak stanu (0).

apds9960.APDS9960_STATE_NEAR: int

Wykryto stan zbliżenia (1).

apds9960.APDS9960_STATE_FAR: int

Wykryto stan oddalenia (2).

apds9960.APDS9960_STATE_ALL: int

Wartość wartownicza (3) używana wewnętrznie do reprezentowania „dowolnego stanu”.