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