apds9960 — ovladač senzoru přiblížení, gest a barvy#

Tento modul poskytuje ovladač pro digitální senzor přiblížení, okolního světla, RGB barvy a gest Broadcom/Avago APDS9960 přes I2C. Ovladač zpřístupňuje ovládací prvky pro povolení/zakázání jednotlivých funkcí, čtení surových kanálů (clear, R, G, B, přiblížení) a softwarový stavový automat pro dekódování gest, který z čipového FIFO se 4 fotodiodami klasifikuje gesta přejetí nahoru/dolů/vlevo/vpravo a blízko/daleko.

Příklad použití:

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)

Třídy#

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

Vytvoří instanci ovladače APDS9960.

  • bus je nakonfigurovaný objekt I2C sběrnice používaný pro komunikaci se senzorem. Základní třída provádí volání read_byte_data, write_byte_data a read_i2c_block_data ve stylu SMBus; pro machine.I2C MicroPythonu použijte místo toho uAPDS9960.

  • address je 7bitová I2C adresa zařízení. Výchozí hodnota je APDS9960_I2C_ADDR (0x39).

  • valid_id je seznam přijatelných hodnot vracených ID registrem čipu. Výchozí hodnota je APDS9960_DEV_ID.

Konstruktor přečte ID zařízení a vyvolá ADPS9960InvalidDevId, pokud není v valid_id. Poté zakáže každou funkci, naprogramuje výchozí hodnoty ATIME/WTIME/PPULSE a aplikuje výchozí buzení LED, zisk přiblížení, zisk ALS, prahy přiblížení, prahy okolního světla, perzistenci a konfiguraci enginu gest (vstupní/výstupní prahy, GCONF1, zisk gest, buzení LED pro gesta, dobu čekání gest, offsety gest, GPULSE, GCONF3 a povolení přerušení gest).

Řízení režimu a napájení#

getMode() int#

Vrátí surovou hodnotu registru ENABLE, kódující, které funkce jsou aktuálně povoleny (napájení, ALS, přiblížení, čekání, přerušení ALS, přerušení přiblížení, gesta).

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

Povolí nebo zakáže jednotlivou funkci v registru ENABLE. mode musí být jedna z hodnot APDS9960_MODE_* (APDS9960_MODE_POWER ..\ APDS9960_MODE_ALL). Je-li mode APDS9960_MODE_ALL, všechny bity se zapnou nebo vypnou najednou. Pro hodnoty mimo rozsah vyvolá ADPS9960InvalidMode.

enablePower() None#

Zapne napájení APDS9960 (nastaví bit PON v ENABLE).

disablePower() None#

Vypne napájení APDS9960 (vymaže bit PON v ENABLE).

Senzor okolního světla / RGB#

enableLightSensor(interrupts: bool = True) None#

Obnoví výchozí zisk ALS, nakonfiguruje bit povolení přerušení ALS, zapne napájení zařízení a povolí engine okolního světla/barvy.

disableLightSensor() None#

Zakáže přerušení ALS a zastaví engine okolního světla/barvy.

readAmbientLight() int#

Přečte úroveň okolního světla na kanálu clear jako 16bitovou hodnotu bez znaménka.

readRedLight() int#

Přečte úroveň červeného kanálu jako 16bitovou hodnotu bez znaménka.

readGreenLight() int#

Přečte úroveň zeleného kanálu jako 16bitovou hodnotu bez znaménka.

readBlueLight() int#

Přečte úroveň modrého kanálu jako 16bitovou hodnotu bez znaménka.

Senzor přiblížení#

enableProximitySensor(interrupts: bool = True) None#

Obnoví výchozí zisk přiblížení a buzení LED, nakonfiguruje bit povolení přerušení přiblížení, zapne napájení zařízení a povolí engine přiblížení.

disableProximitySensor() None#

Zakáže přerušení přiblížení a zastaví engine přiblížení.

readProximity() int#

Přečte úroveň přiblížení jako 8bitovou hodnotu bez znaménka.

Engine gest#

enableGestureSensor(interrupts: bool = True) None#

Resetuje stav gest, nastaví WTIME a počet pulzů gest, zvýší LED na 300 %, nakonfiguruje bit povolení přerušení gest, vstoupí do stavového automatu gest, zapne napájení zařízení a povolí režimy čekání, přiblížení a gest.

disableGestureSensor() None#

Resetuje stav gest, zakáže přerušení gest a stavový automat a zastaví engine gest.

isGestureAvailable() bool#

Vrátí True, je-li nastaven bit GVALID stavového registru gest, což indikuje, že data FIFO gest jsou připravena ke čtení.

readGesture() int#

Vyprázdní FIFO gest, spustí vestavěný dekodér gest a vrátí jednu ze směrových konstant APDS9960_DIR_*. Vrací APDS9960_DIR_NONE, pokud engine neběží, nejsou dostupná žádná platná data, nebo se data nevyhodnotila na rozpoznané gesto.

resetGestureParameters() None#

Vymaže interní buffer FIFO gest, delty, počty, čítače blízko/daleko, stav a poslední dekódovaný pohyb.

processGestureData() bool#

Zpracuje aktuálně bufferované surové vzorky FIFO U/D/L/R pro aktualizaci delt U/D a L/R a čítačů blízko/daleko. Vrací True, pokud byla detekována událost blízko nebo daleko, jinak False.

decodeGesture() bool#

Převede aktuální počty U/D a L/R a akumulované delty na směr uložený v interním poli gesture_motion_. Vrací True, je-li směr rozpoznán, jinak False.

Prahy přiblížení#

getProxIntLowThresh() int#

Vrátí nízký práh přerušení přiblížení (registr PILT).

setProxIntLowThresh(threshold: int) None#

Nastaví nízký práh přerušení přiblížení.

getProxIntHighThresh() int#

Vrátí vysoký práh přerušení přiblížení (registr PIHT).

setProxIntHighThresh(threshold: int) None#

Nastaví vysoký práh přerušení přiblížení.

getProximityIntLowThreshold() int#

Alias pro getProxIntLowThresh().

setProximityIntLowThreshold(threshold: int) None#

Alias pro setProxIntLowThresh().

getProximityIntHighThreshold() int#

Alias pro getProxIntHighThresh().

setProximityIntHighThreshold(threshold: int) None#

Alias pro setProxIntHighThresh().

Buzení LED, zisk a boost#

getLEDDrive() int#

Vrátí sílu buzení LED použitou pro přiblížení a ALS. Kódováno jako jedna z hodnot APDS9960_LED_DRIVE_* (0 = 100 mA, 1 = 50 mA, 2 = 25 mA, 3 = 12.5 mA).

setLEDDrive(drive: int) None#

Nastaví sílu buzení LED použitou pro přiblížení a ALS. drive je jedna z hodnot APDS9960_LED_DRIVE_*.

getProximityGain() int#

Vrátí zisk přijímače přiblížení. Kódováno jako jedna z hodnot APDS9960_PGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setProximityGain(drive: int) None#

Nastaví zisk přijímače přiblížení. drive je jedna z hodnot APDS9960_PGAIN_*.

getAmbientLightGain() int#

Vrátí zisk senzoru okolního světla. Kódováno jako jedna z hodnot APDS9960_AGAIN_* (0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x).

setAmbientLightGain(drive: int) None#

Nastaví zisk senzoru okolního světla. drive je jedna z hodnot APDS9960_AGAIN_*.

getLEDBoost() int#

Vrátí boost proudu LED. Kódováno jako jedna z hodnot APDS9960_LED_BOOST_* (0 = 100 %, 1 = 150 %, 2 = 200 %, 3 = 300 %).

setLEDBoost(boost: int) None#

Nastaví boost proudu LED. boost je jedna z hodnot APDS9960_LED_BOOST_*.

Kompenzace zisku přiblížení a maska fotodiod#

getProxGainCompEnable() bool#

Vrátí True, je-li povolena kompenzace zisku přiblížení.

setProxGainCompEnable(enable: bool) None#

Povolí nebo zakáže kompenzaci zisku přiblížení.

getProxPhotoMask() int#

Vrátí 4bitovou masku zakázaných fotodiod přiblížení. Bity se mapují jako 3=UP, 2=DOWN, 1=LEFT, 0=RIGHT; 1 zakazuje fotodiodu a 0 ji povoluje.

setProxPhotoMask(mask: int) None#

Nastaví 4bitovou masku zakázaných fotodiod přiblížení (viz kódování výše).

Konfigurace gest#

getGestureEnterThresh() int#

Vrátí práh přiblížení potřebný pro vstup do režimu gest.

setGestureEnterThresh(threshold: int) None#

Nastaví práh přiblížení potřebný pro vstup do režimu gest.

getGestureExitThresh() int#

Vrátí práh přiblížení potřebný pro opuštění režimu gest.

setGestureExitThresh(threshold: int) None#

Nastaví práh přiblížení potřebný pro opuštění režimu gest.

getGestureGain() int#

Vrátí zisk fotodiod použitý během režimu gest. Kódováno jako jedna z hodnot APDS9960_GGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setGestureGain(gain: int) None#

Nastaví zisk fotodiod použitý během režimu gest.

getGestureLEDDrive() int#

Vrátí proud buzení LED použitý během režimu gest. Kódováno jako jedna z hodnot APDS9960_LED_DRIVE_*.

setGestureLEDDrive(drive: int) None#

Nastaví proud buzení LED použitý během režimu gest.

getGestureWaitTime() int#

Vrátí dobu čekání s nízkou spotřebou mezi detekcemi gest. Kódováno jako jedna z hodnot APDS9960_GWTIME_* (0 = 0 ms .. 7 = 39.2 ms).

setGestureWaitTime(time: int) None#

Nastaví dobu čekání s nízkou spotřebou mezi detekcemi gest.

getGestureMode() bool#

Vrátí True, pokud stavový automat gest aktuálně běží.

setGestureMode(enable: bool) None#

Vstoupí do stavového automatu gest nebo jej opustí.

Prahy přerušení okolního světla#

getLightIntLowThreshold() int#

Vrátí 16bitový nízký práh použitý pro přerušení okolního světla.

setLightIntLowThreshold(threshold: int) None#

Nastaví 16bitový nízký práh použitý pro přerušení okolního světla.

getLightIntHighThreshold() int#

Vrátí 16bitový vysoký práh použitý pro přerušení okolního světla.

setLightIntHighThreshold(threshold: int) None#

Nastaví 16bitový vysoký práh použitý pro přerušení okolního světla.

Povolení a vymazání přerušení#

getAmbientLightIntEnable() bool#

Vrátí True, jsou-li povolena přerušení okolního světla.

setAmbientLightIntEnable(enable: bool) None#

Povolí nebo zakáže přerušení okolního světla.

getProximityIntEnable() bool#

Vrátí True, jsou-li povolena přerušení přiblížení.

setProximityIntEnable(enable: bool) None#

Povolí nebo zakáže přerušení přiblížení.

getGestureIntEnable() bool#

Vrátí True, jsou-li povolena přerušení gest.

setGestureIntEnable(enable: bool) None#

Povolí nebo zakáže přerušení gest.

clearAmbientLightInt() None#

Vymaže čekající přerušení okolního světla.

clearProximityInt() None#

Vymaže čekající přerušení přiblížení.

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

Podtřída APDS9960 pro MicroPython. Identické veřejné API, ale podkladový přístup k registrům používá volání readfrom_mem a writeto_mem ve stylu machine.I2C namísto metod ve stylu SMBus. Toto je třída, kterou je třeba použít na cílových platformách OpenMV / MicroPython.

Výjimky#

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

Podtřída ValueError. Vyvolána konstruktorem APDS9960, když hodnota přečtená z ID registru čipu není přítomna v seznamu valid_id.

exception apds9960.ADPS9960InvalidMode(mode: int)#

Podtřída ValueError. Vyvolána metodou APDS9960.setMode(), když je argument mode mimo rozsah APDS9960_MODE_POWER..\ APDS9960_MODE_ALL.

Konstanty#

I2C adresa a ID zařízení#

apds9960.APDS9960_I2C_ADDR: int#

Výchozí 7bitová I2C adresa APDS9960 (0x39).

apds9960.APDS9960_DEV_ID: list#

Výchozí seznam platných hodnot ID registru zařízení ([0xAB, 0x9C, 0xA8, -0x55]).

Ladění gest#

apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int#

Minimální velikost vzorku (na fotodiodu) použitá dekodérem gest při vyhledávání prvních/posledních vzorků FIFO v rozsahu.

apds9960.APDS9960_GESTURE_SENSITIVITY_1: int#

Práh akumulovaných delt U/D a L/R, nad kterým se dekodér přikloní ke směru přejetí.

apds9960.APDS9960_GESTURE_SENSITIVITY_2: int#

Práh delt U/D a L/R na krok, pod kterým dekodér považuje vzorek za kandidáta blízko/daleko spíše než za přejetí.

apds9960.APDS9960_TIME_FIFO_PAUSE: int#

Milisekundy, po které smyčka gest spí mezi vyprázdněními FIFO.

Režimy funkcí#

Tyto hodnoty se předávají metodě APDS9960.setMode().

apds9960.APDS9960_MODE_POWER: int#

Bit zapnutí napájení (0).

apds9960.APDS9960_MODE_AMBIENT_LIGHT: int#

Bit povolení enginu okolního světla/barvy (1).

apds9960.APDS9960_MODE_PROXIMITY: int#

Bit povolení enginu přiblížení (2).

apds9960.APDS9960_MODE_WAIT: int#

Bit povolení čekacího stavu (3).

apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int#

Bit povolení přerušení okolního světla (4).

apds9960.APDS9960_MODE_PROXIMITY_INT: int#

Bit povolení přerušení přiblížení (5).

apds9960.APDS9960_MODE_GESTURE: int#

Bit povolení enginu gest (6).

apds9960.APDS9960_MODE_ALL: int#

Sentinelová hodnota (7) říkající metodě APDS9960.setMode(), aby najednou povolila nebo zakázala každý bit v registru ENABLE.

Proudy buzení LED#

apds9960.APDS9960_LED_DRIVE_100MA: int#

Buzení LED 100 mA (0).

apds9960.APDS9960_LED_DRIVE_50MA: int#

Buzení LED 50 mA (1).

apds9960.APDS9960_LED_DRIVE_25MA: int#

Buzení LED 25 mA (2).

apds9960.APDS9960_LED_DRIVE_12_5MA: int#

Buzení LED 12.5 mA (3).

Zisk přiblížení (PGAIN)#

apds9960.APDS9960_PGAIN_1X: int#

Zisk přiblížení 1x (0).

apds9960.APDS9960_PGAIN_2X: int#

Zisk přiblížení 2x (1).

apds9960.APDS9960_PGAIN_4X: int#

Zisk přiblížení 4x (2). Výchozí hodnota aplikovaná konstruktorem.

apds9960.APDS9960_PGAIN_8X: int#

Zisk přiblížení 8x (3).

Zisk okolního světla (AGAIN)#

apds9960.APDS9960_AGAIN_1X: int#

Zisk ALS 1x (0).

apds9960.APDS9960_AGAIN_4X: int#

Zisk ALS 4x (1). Výchozí hodnota aplikovaná konstruktorem.

apds9960.APDS9960_AGAIN_16X: int#

Zisk ALS 16x (2).

apds9960.APDS9960_AGAIN_64X: int#

Zisk ALS 64x (3).

Zisk gest (GGAIN)#

apds9960.APDS9960_GGAIN_1X: int#

Zisk gest 1x (0).

apds9960.APDS9960_GGAIN_2X: int#

Zisk gest 2x (1).

apds9960.APDS9960_GGAIN_4X: int#

Zisk gest 4x (2). Výchozí hodnota aplikovaná konstruktorem.

apds9960.APDS9960_GGAIN_8X: int#

Zisk gest 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). Aplikováno automaticky metodou APDS9960.enableGestureSensor().

Doby čekání gest#

apds9960.APDS9960_GWTIME_0MS: int#

0 ms (0).

apds9960.APDS9960_GWTIME_2_8MS: int#

2.8 ms (1). Výchozí hodnota aplikovaná konstruktorem.

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

Směry gest#

Tyto hodnoty vrací metoda APDS9960.readGesture().

apds9960.APDS9960_DIR_NONE: int#

Žádné gesto nedetekováno (0).

apds9960.APDS9960_DIR_LEFT: int#

Přejetí vlevo (1).

apds9960.APDS9960_DIR_RIGHT: int#

Přejetí vpravo (2).

apds9960.APDS9960_DIR_UP: int#

Přejetí nahoru (3).

apds9960.APDS9960_DIR_DOWN: int#

Přejetí dolů (4).

apds9960.APDS9960_DIR_NEAR: int#

Událost blízko (5).

apds9960.APDS9960_DIR_FAR: int#

Událost daleko (6).

apds9960.APDS9960_DIR_ALL: int#

Sentinelová hodnota (7) používaná interně k reprezentaci „libovolného směru“.

Stavy gest#

Interní stavové hodnoty hlášené stavovým automatem gest.

apds9960.APDS9960_STATE_NA: int#

Žádný stav (0).

apds9960.APDS9960_STATE_NEAR: int#

Detekován stav blízko (1).

apds9960.APDS9960_STATE_FAR: int#

Detekován stav daleko (2).

apds9960.APDS9960_STATE_ALL: int#

Sentinelová hodnota (3) používaná interně k reprezentaci „libovolného stavu“.