apds9960 — drivrutin för närhets-, gest- och färgsensor

Den här modulen tillhandahåller en drivrutin för Broadcom/Avago APDS9960, en digital sensor för närhet, omgivningsljus, RGB-färg och gester över I2C. Drivrutinen exponerar aktiverings- och inaktiveringskontroller per funktion, råläsningar per kanal (clear, R, G, B, närhet) och en tillståndsmaskin för avkodning av gester i programvara som klassificerar svep uppåt/nedåt/vänster/höger samt gester för nära/fjärran från chippets inbyggda FIFO med 4 fotodioder.

Exempelanvändning:

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)

Klasser

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

Konstruerar en instans av APDS9960-drivrutinen.

  • bus är ett konfigurerat I2C-bussobjekt som används för att kommunicera med sensorn. Basklassen utfärdar anrop av SMBus-typ med read_byte_data, write_byte_data och read_i2c_block_data; för MicroPythons machine.I2C använder du uAPDS9960 i stället.

  • address är enhetens 7-bitars I2C-adress. Standardvärdet är APDS9960_I2C_ADDR (0x39).

  • valid_id är en lista över godtagbara värden som returneras av chippets ID-register. Standardvärdet är APDS9960_DEV_ID.

Konstruktorn läser enhetens ID och ger upphov till ADPS9960InvalidDevId om det inte finns i valid_id. Den inaktiverar sedan varje funktion, programmerar standardvärdena för ATIME/WTIME/PPULSE och tillämpar standardinställningarna för LED-ström, närhetsförstärkning, ALS-förstärkning, närhetströsklar, omgivningsljuströsklar, persistens och konfiguration av gestmotorn (in-/utträdströsklar, GCONF1, gestförstärkning, LED-ström för gest, väntetid för gest, gestoffset, GPULSE, GCONF3 och aktivering av gestavbrott).

Läges- och effektstyrning

getMode() int

Returnerar råvärdet i ENABLE-registret, som kodar vilka funktioner som för närvarande är aktiverade (effekt, ALS, närhet, vänta, ALS-avbrott, närhetsavbrott, gest).

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

Aktiverar eller inaktiverar en enskild funktion i ENABLE-registret. mode måste vara ett av värdena APDS9960_MODE_* (APDS9960_MODE_POWER ..\ APDS9960_MODE_ALL). När mode är APDS9960_MODE_ALL slås alla bitar på eller av samtidigt. Ger upphov till ADPS9960InvalidMode för värden utanför intervallet.

enablePower() None

Sätter på APDS9960 (sätter PON-biten i ENABLE).

disablePower() None

Stänger av APDS9960 (nollställer PON-biten i ENABLE).

Omgivningsljus-/RGB-sensor

enableLightSensor(interrupts: bool = True) None

Återställer standardvärdet för ALS-förstärkning, konfigurerar aktiveringsbiten för ALS-avbrott, sätter på enheten och aktiverar omgivningsljus-/färgmotorn.

disableLightSensor() None

Inaktiverar ALS-avbrottet och stoppar omgivningsljus-/färgmotorn.

readAmbientLight() int

Läser nivån för omgivningsljus på clear-kanalen som ett 16-bitars värde utan tecken.

readRedLight() int

Läser nivån på den röda kanalen som ett 16-bitars värde utan tecken.

readGreenLight() int

Läser nivån på den gröna kanalen som ett 16-bitars värde utan tecken.

readBlueLight() int

Läser nivån på den blå kanalen som ett 16-bitars värde utan tecken.

Närhetssensor

enableProximitySensor(interrupts: bool = True) None

Återställer standardvärdena för närhetsförstärkning och LED-ström, konfigurerar aktiveringsbiten för närhetsavbrott, sätter på enheten och aktiverar närhetsmotorn.

disableProximitySensor() None

Inaktiverar närhetsavbrottet och stoppar närhetsmotorn.

readProximity() int

Läser närhetsnivån som ett 8-bitars värde utan tecken.

Gestmotor

enableGestureSensor(interrupts: bool = True) None

Återställer gesttillståndet, ställer in WTIME och pulsantalet för gest, höjer LED:n till 300 %, konfigurerar aktiveringsbiten för gestavbrott, går in i gesttillståndsmaskinen, sätter på enheten och aktiverar lägena vänta, närhet och gest.

disableGestureSensor() None

Återställer gesttillståndet, inaktiverar gestavbrottet och tillståndsmaskinen och stoppar gestmotorn.

isGestureAvailable() bool

Returnerar True om GVALID-biten i gestens statusregister är satt, vilket indikerar att data i gest-FIFO:n är redo att läsas.

readGesture() int

Tömmer gest-FIFO:n, kör den inbyggda gestavkodaren och returnerar en av riktningskonstanterna APDS9960_DIR_*. Returnerar APDS9960_DIR_NONE om motorn inte körs, om inga giltiga data finns tillgängliga eller om data inte gick att tolka som en igenkänd gest.

resetGestureParameters() None

Nollställer den interna gest-FIFO-bufferten, deltavärdena, antalen, nära/fjärran-räknarna, tillståndet och den senast avkodade rörelsen.

processGestureData() bool

Bearbetar de rå U/D/L/R-FIFO-prover som för närvarande är buffrade för att uppdatera U/D- och L/R-deltavärdena samt nära/fjärran-räknarna. Returnerar True om en nära- eller fjärran-händelse detekterades, annars False.

decodeGesture() bool

Konverterar de aktuella U/D- och L/R-antalen samt de ackumulerade deltavärdena till en riktning som lagras i det interna fältet gesture_motion_. Returnerar True när en riktning känns igen, annars False.

Närhetströsklar

getProxIntLowThresh() int

Returnerar den låga tröskeln för närhetsavbrott (PILT-registret).

setProxIntLowThresh(threshold: int) None

Ställer in den låga tröskeln för närhetsavbrott.

getProxIntHighThresh() int

Returnerar den höga tröskeln för närhetsavbrott (PIHT-registret).

setProxIntHighThresh(threshold: int) None

Ställer in den höga tröskeln för närhetsavbrott.

getProximityIntLowThreshold() int

Alias för getProxIntLowThresh().

setProximityIntLowThreshold(threshold: int) None

Alias för setProxIntLowThresh().

getProximityIntHighThreshold() int

Alias för getProxIntHighThresh().

setProximityIntHighThreshold(threshold: int) None

Alias för setProxIntHighThresh().

LED-ström, förstärkning och boost

getLEDDrive() int

Returnerar LED-strömstyrkan som används för närhet och ALS. Kodas som ett av värdena APDS9960_LED_DRIVE_* (0 = 100 mA, 1 = 50 mA, 2 = 25 mA, 3 = 12,5 mA).

setLEDDrive(drive: int) None

Ställer in LED-strömstyrkan som används för närhet och ALS. drive är ett av värdena APDS9960_LED_DRIVE_*.

getProximityGain() int

Returnerar närhetsmottagarens förstärkning. Kodas som ett av värdena APDS9960_PGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setProximityGain(drive: int) None

Ställer in närhetsmottagarens förstärkning. drive är ett av värdena APDS9960_PGAIN_*.

getAmbientLightGain() int

Returnerar omgivningsljussensorns förstärkning. Kodas som ett av värdena APDS9960_AGAIN_* (0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x).

setAmbientLightGain(drive: int) None

Ställer in omgivningsljussensorns förstärkning. drive är ett av värdena APDS9960_AGAIN_*.

getLEDBoost() int

Returnerar LED-strömmens boost. Kodas som ett av värdena APDS9960_LED_BOOST_* (0 = 100 %, 1 = 150 %, 2 = 200 %, 3 = 300 %).

setLEDBoost(boost: int) None

Ställer in LED-strömmens boost. boost är ett av värdena APDS9960_LED_BOOST_*.

Förstärkningskompensation för närhet och fotodiodmask

getProxGainCompEnable() bool

Returnerar True om förstärkningskompensation för närhet är aktiverad.

setProxGainCompEnable(enable: bool) None

Aktiverar eller inaktiverar förstärkningskompensation för närhet.

getProxPhotoMask() int

Returnerar 4-bitarsmasken över inaktiverade närhetsfotodioder. Bitarna mappas som 3=UP, 2=DOWN, 1=LEFT, 0=RIGHT; 1 inaktiverar en fotodiod och 0 aktiverar den.

setProxPhotoMask(mask: int) None

Ställer in 4-bitarsmasken över inaktiverade närhetsfotodioder (se kodningen ovan).

Gestkonfiguration

getGestureEnterThresh() int

Returnerar närhetströskeln som krävs för att gå in i gestläge.

setGestureEnterThresh(threshold: int) None

Ställer in närhetströskeln som krävs för att gå in i gestläge.

getGestureExitThresh() int

Returnerar närhetströskeln som krävs för att lämna gestläge.

setGestureExitThresh(threshold: int) None

Ställer in närhetströskeln som krävs för att lämna gestläge.

getGestureGain() int

Returnerar fotodiodförstärkningen som används under gestläge. Kodas som ett av värdena APDS9960_GGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setGestureGain(gain: int) None

Ställer in fotodiodförstärkningen som används under gestläge.

getGestureLEDDrive() int

Returnerar LED-drivströmmen som används under gestläge. Kodas som ett av värdena APDS9960_LED_DRIVE_*.

setGestureLEDDrive(drive: int) None

Ställer in LED-drivströmmen som används under gestläge.

getGestureWaitTime() int

Returnerar lågeffektsväntetiden mellan gestdetekteringar. Kodas som ett av värdena APDS9960_GWTIME_* (0 = 0 ms .. 7 = 39,2 ms).

setGestureWaitTime(time: int) None

Ställer in lågeffektsväntetiden mellan gestdetekteringar.

getGestureMode() bool

Returnerar True om gesttillståndsmaskinen för närvarande körs.

setGestureMode(enable: bool) None

Går in i eller lämnar gesttillståndsmaskinen.

Trösklar för omgivningsljusavbrott

getLightIntLowThreshold() int

Returnerar den 16-bitars låga tröskeln som används för omgivningsljusavbrottet.

setLightIntLowThreshold(threshold: int) None

Ställer in den 16-bitars låga tröskeln som används för omgivningsljusavbrottet.

getLightIntHighThreshold() int

Returnerar den 16-bitars höga tröskeln som används för omgivningsljusavbrottet.

setLightIntHighThreshold(threshold: int) None

Ställer in den 16-bitars höga tröskeln som används för omgivningsljusavbrottet.

Aktivering och rensning av avbrott

getAmbientLightIntEnable() bool

Returnerar True om omgivningsljusavbrott är aktiverade.

setAmbientLightIntEnable(enable: bool) None

Aktiverar eller inaktiverar omgivningsljusavbrott.

getProximityIntEnable() bool

Returnerar True om närhetsavbrott är aktiverade.

setProximityIntEnable(enable: bool) None

Aktiverar eller inaktiverar närhetsavbrott.

getGestureIntEnable() bool

Returnerar True om gestavbrott är aktiverade.

setGestureIntEnable(enable: bool) None

Aktiverar eller inaktiverar gestavbrott.

clearAmbientLightInt() None

Rensar ett väntande omgivningsljusavbrott.

clearProximityInt() None

Rensar ett väntande närhetsavbrott.

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

MicroPython-underklass till APDS9960. Identiskt offentligt API, men den underliggande registeråtkomsten använder anrop av machine.I2C-typ med readfrom_mem och writeto_mem i stället för metoder av SMBus-typ. Detta är klassen som ska användas på OpenMV-/MicroPython-mål.

Undantag

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

Underklass till ValueError. Ges upphov till av APDS9960-konstruktorn när värdet som läses från chippets ID-register inte finns i listan valid_id.

exception apds9960.ADPS9960InvalidMode(mode: int)

Underklass till ValueError. Ges upphov till av APDS9960.setMode() när argumentet mode ligger utanför intervallet APDS9960_MODE_POWER..\ APDS9960_MODE_ALL.

Konstanter

I2C-adress och enhets-ID:n

apds9960.APDS9960_I2C_ADDR: int

Standardvärde för APDS9960:s 7-bitars I2C-adress (0x39).

apds9960.APDS9960_DEV_ID: list

Standardlista över giltiga värden för enhets-ID-registret ([0xAB, 0x9C, 0xA8, -0x55]).

Geststämning

apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int

Minsta provmagnitud (per fotodiod) som används av gestavkodaren vid sökning efter de första/sista FIFO-proverna inom intervallet.

apds9960.APDS9960_GESTURE_SENSITIVITY_1: int

Tröskel för de ackumulerade U/D- och L/R-deltavärdena över vilken avkodaren bestämmer sig för en svepriktning.

apds9960.APDS9960_GESTURE_SENSITIVITY_2: int

Tröskel för U/D- och L/R-deltavärdena per steg under vilken avkodaren betraktar ett prov som en kandidat för nära/fjärran snarare än ett svep.

apds9960.APDS9960_TIME_FIFO_PAUSE: int

Antal millisekunder som gestloopen sover mellan FIFO-tömningar.

Funktionslägen

Dessa värden skickas till APDS9960.setMode().

apds9960.APDS9960_MODE_POWER: int

Påslagningsbit (0).

apds9960.APDS9960_MODE_AMBIENT_LIGHT: int

Aktiveringsbit för omgivningsljus-/färgmotorn (1).

apds9960.APDS9960_MODE_PROXIMITY: int

Aktiveringsbit för närhetsmotorn (2).

apds9960.APDS9960_MODE_WAIT: int

Aktiveringsbit för väntetillstånd (3).

apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int

Aktiveringsbit för omgivningsljusavbrott (4).

apds9960.APDS9960_MODE_PROXIMITY_INT: int

Aktiveringsbit för närhetsavbrott (5).

apds9960.APDS9960_MODE_GESTURE: int

Aktiveringsbit för gestmotorn (6).

apds9960.APDS9960_MODE_ALL: int

Vaktvärde (7) som talar om för APDS9960.setMode() att aktivera eller inaktivera varje bit i ENABLE-registret samtidigt.

LED-drivströmmar

apds9960.APDS9960_LED_DRIVE_100MA: int

100 mA LED-ström (0).

apds9960.APDS9960_LED_DRIVE_50MA: int

50 mA LED-ström (1).

apds9960.APDS9960_LED_DRIVE_25MA: int

25 mA LED-ström (2).

apds9960.APDS9960_LED_DRIVE_12_5MA: int

12,5 mA LED-ström (3).

Närhetsförstärkning (PGAIN)

apds9960.APDS9960_PGAIN_1X: int

1x närhetsförstärkning (0).

apds9960.APDS9960_PGAIN_2X: int

2x närhetsförstärkning (1).

apds9960.APDS9960_PGAIN_4X: int

4x närhetsförstärkning (2). Standardvärde som tillämpas av konstruktorn.

apds9960.APDS9960_PGAIN_8X: int

8x närhetsförstärkning (3).

Omgivningsljusförstärkning (AGAIN)

apds9960.APDS9960_AGAIN_1X: int

1x ALS-förstärkning (0).

apds9960.APDS9960_AGAIN_4X: int

4x ALS-förstärkning (1). Standardvärde som tillämpas av konstruktorn.

apds9960.APDS9960_AGAIN_16X: int

16x ALS-förstärkning (2).

apds9960.APDS9960_AGAIN_64X: int

64x ALS-förstärkning (3).

Gestförstärkning (GGAIN)

apds9960.APDS9960_GGAIN_1X: int

1x gestförstärkning (0).

apds9960.APDS9960_GGAIN_2X: int

2x gestförstärkning (1).

apds9960.APDS9960_GGAIN_4X: int

4x gestförstärkning (2). Standardvärde som tillämpas av konstruktorn.

apds9960.APDS9960_GGAIN_8X: int

8x gestförstärkning (3).

LED-boost

apds9960.APDS9960_LED_BOOST_100: int

100 % LED-boost (0).

apds9960.APDS9960_LED_BOOST_150: int

150 % LED-boost (1).

apds9960.APDS9960_LED_BOOST_200: int

200 % LED-boost (2).

apds9960.APDS9960_LED_BOOST_300: int

300 % LED-boost (3). Tillämpas automatiskt av APDS9960.enableGestureSensor().

Väntetider för gest

apds9960.APDS9960_GWTIME_0MS: int

0 ms (0).

apds9960.APDS9960_GWTIME_2_8MS: int

2,8 ms (1). Standardvärde som tillämpas av konstruktorn.

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

Gestriktningar

Dessa värden returneras av APDS9960.readGesture().

apds9960.APDS9960_DIR_NONE: int

Ingen gest detekterad (0).

apds9960.APDS9960_DIR_LEFT: int

Svep vänster (1).

apds9960.APDS9960_DIR_RIGHT: int

Svep höger (2).

apds9960.APDS9960_DIR_UP: int

Svep uppåt (3).

apds9960.APDS9960_DIR_DOWN: int

Svep nedåt (4).

apds9960.APDS9960_DIR_NEAR: int

Nära-händelse (5).

apds9960.APDS9960_DIR_FAR: int

Fjärran-händelse (6).

apds9960.APDS9960_DIR_ALL: int

Vaktvärde (7) som används internt för att representera ”valfri riktning”.

Gesttillstånd

Interna tillståndsvärden som rapporteras via gesttillståndsmaskinen.

apds9960.APDS9960_STATE_NA: int

Inget tillstånd (0).

apds9960.APDS9960_STATE_NEAR: int

Nära-tillstånd detekterat (1).

apds9960.APDS9960_STATE_FAR: int

Fjärran-tillstånd detekterat (2).

apds9960.APDS9960_STATE_ALL: int

Vaktvärde (3) som används internt för att representera ”valfritt tillstånd”.