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