apds9960 — Treiber für Näherungs-, Gesten- und Farbsensor

Dieses Modul stellt einen Treiber für den digitalen Näherungs-, Umgebungslicht-, RGB-Farb- und Gestensensor APDS9960 von Broadcom/Avago über I2C bereit. Der Treiber stellt Aktivierungs-/Deaktivierungssteuerungen pro Funktion, Rohkanal-Lesevorgänge (Clear, R, G, B, Näherung) und eine softwarebasierte Gestendekodierungs-Zustandsmaschine bereit, die Wischbewegungen nach oben/unten/links/rechts sowie Nah-/Fern-Gesten aus dem chipinternen FIFO mit vier Fotodioden klassifiziert.

Beispielverwendung:

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)

Klassen

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

Erstellt eine Instanz des APDS9960-Treibers.

  • bus ist ein konfiguriertes I2C-Bus-Objekt, das zur Kommunikation mit dem Sensor verwendet wird. Die Basisklasse setzt Aufrufe im SMBus-Stil (read_byte_data, write_byte_data und read_i2c_block_data) ab; für MicroPythons machine.I2C verwenden Sie stattdessen uAPDS9960.

  • address ist die 7-Bit-I2C-Adresse des Geräts. Standardwert ist APDS9960_I2C_ADDR (0x39).

  • valid_id ist eine Liste akzeptabler Werte, die vom ID-Register des Chips zurückgegeben werden. Standardwert ist APDS9960_DEV_ID.

Der Konstruktor liest die Geräte-ID und löst ADPS9960InvalidDevId aus, wenn sie nicht in valid_id enthalten ist. Anschließend deaktiviert er jede Funktion, programmiert die Standardwerte für ATIME/WTIME/PPULSE und wendet die Standardkonfiguration für LED-Treiberstärke, Näherungsverstärkung, ALS-Verstärkung, Näherungsschwellenwerte, Umgebungslicht-Schwellenwerte, Persistenz und die Gesten-Engine an (Eintritts-/Austrittsschwellenwerte, GCONF1, Gestenverstärkung, Gesten-LED-Treiberstärke, Gesten-Wartezeit, Gesten-Offsets, GPULSE, GCONF3 und Aktivierung des Gesten-Interrupts).

Modus- und Stromversorgungssteuerung

getMode() int

Gibt den Rohwert des ENABLE-Registers zurück, der kodiert, welche Funktionen derzeit aktiviert sind (Stromversorgung, ALS, Näherung, Warten, ALS-Interrupt, Näherungs-Interrupt, Gesten).

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

Aktiviert oder deaktiviert eine einzelne Funktion im ENABLE-Register. mode muss einer der APDS9960_MODE_*-Werte sein (APDS9960_MODE_POWER ..\ APDS9960_MODE_ALL). Wenn mode gleich APDS9960_MODE_ALL ist, werden alle Bits auf einmal ein- oder ausgeschaltet. Löst ADPS9960InvalidMode für Werte außerhalb des gültigen Bereichs aus.

enablePower() None

Schaltet den APDS9960 ein (setzt das PON-Bit in ENABLE).

disablePower() None

Schaltet den APDS9960 aus (löscht das PON-Bit in ENABLE).

Umgebungslicht-/RGB-Sensor

enableLightSensor(interrupts: bool = True) None

Stellt die Standard-ALS-Verstärkung wieder her, konfiguriert das Aktivierungsbit für den ALS-Interrupt, schaltet das Gerät ein und aktiviert die Umgebungslicht-/Farb-Engine.

disableLightSensor() None

Deaktiviert den ALS-Interrupt und stoppt die Umgebungslicht-/Farb-Engine.

readAmbientLight() int

Liest den Umgebungslichtpegel des Clear-Kanals als vorzeichenlosen 16-Bit-Wert.

readRedLight() int

Liest den Pegel des roten Kanals als vorzeichenlosen 16-Bit-Wert.

readGreenLight() int

Liest den Pegel des grünen Kanals als vorzeichenlosen 16-Bit-Wert.

readBlueLight() int

Liest den Pegel des blauen Kanals als vorzeichenlosen 16-Bit-Wert.

Näherungssensor

enableProximitySensor(interrupts: bool = True) None

Stellt die Standard-Näherungsverstärkung und LED-Treiberstärke wieder her, konfiguriert das Aktivierungsbit für den Näherungs-Interrupt, schaltet das Gerät ein und aktiviert die Näherungs-Engine.

disableProximitySensor() None

Deaktiviert den Näherungs-Interrupt und stoppt die Näherungs-Engine.

readProximity() int

Liest den Näherungspegel als vorzeichenlosen 8-Bit-Wert.

Gesten-Engine

enableGestureSensor(interrupts: bool = True) None

Setzt den Gestenzustand zurück, stellt WTIME und die Gesten-Pulsanzahl ein, erhöht die LED auf 300 %, konfiguriert das Aktivierungsbit für den Gesten-Interrupt, tritt in die Gesten-Zustandsmaschine ein, schaltet das Gerät ein und aktiviert die Modi Warten, Näherung und Gesten.

disableGestureSensor() None

Setzt den Gestenzustand zurück, deaktiviert den Gesten-Interrupt und die Zustandsmaschine und stoppt die Gesten-Engine.

isGestureAvailable() bool

Gibt True zurück, wenn das GVALID-Bit des Gesten-Statusregisters gesetzt ist, was anzeigt, dass Gesten-FIFO-Daten zum Lesen bereit sind.

readGesture() int

Leert den Gesten-FIFO, führt den integrierten Gestendekoder aus und gibt eine der APDS9960_DIR_*-Richtungskonstanten zurück. Gibt APDS9960_DIR_NONE zurück, wenn die Engine nicht läuft, keine gültigen Daten verfügbar sind oder die Daten nicht zu einer erkannten Geste aufgelöst werden konnten.

resetGestureParameters() None

Löscht den internen Gesten-FIFO-Puffer, die Deltas, Zähler, Nah-/Fern-Zähler, den Zustand und die zuletzt dekodierte Bewegung.

processGestureData() bool

Verarbeitet die aktuell gepufferten rohen U/D/L/R-FIFO-Samples, um die U/D- und L/R-Deltas sowie die Nah-/Fern-Zähler zu aktualisieren. Gibt True zurück, wenn ein Nah- oder Fern-Ereignis erkannt wurde, andernfalls False.

decodeGesture() bool

Wandelt die aktuellen U/D- und L/R-Zähler sowie die akkumulierten Deltas in eine Richtung um, die im internen Feld gesture_motion_ gespeichert wird. Gibt True zurück, wenn eine Richtung erkannt wird, andernfalls False.

Näherungsschwellenwerte

getProxIntLowThresh() int

Gibt den unteren Näherungs-Interrupt-Schwellenwert zurück (PILT-Register).

setProxIntLowThresh(threshold: int) None

Setzt den unteren Näherungs-Interrupt-Schwellenwert.

getProxIntHighThresh() int

Gibt den oberen Näherungs-Interrupt-Schwellenwert zurück (PIHT-Register).

setProxIntHighThresh(threshold: int) None

Setzt den oberen Näherungs-Interrupt-Schwellenwert.

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-Treiberstärke, Verstärkung und Boost

getLEDDrive() int

Gibt die für Näherung und ALS verwendete LED-Treiberstärke zurück. Kodiert als einer der APDS9960_LED_DRIVE_*-Werte (0 = 100 mA, 1 = 50 mA, 2 = 25 mA, 3 = 12,5 mA).

setLEDDrive(drive: int) None

Setzt die für Näherung und ALS verwendete LED-Treiberstärke. drive ist einer der APDS9960_LED_DRIVE_*-Werte.

getProximityGain() int

Gibt die Verstärkung des Näherungsempfängers zurück. Kodiert als einer der APDS9960_PGAIN_*-Werte (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setProximityGain(drive: int) None

Setzt die Verstärkung des Näherungsempfängers. drive ist einer der APDS9960_PGAIN_*-Werte.

getAmbientLightGain() int

Gibt die Verstärkung des Umgebungslichtsensors zurück. Kodiert als einer der APDS9960_AGAIN_*-Werte (0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x).

setAmbientLightGain(drive: int) None

Setzt die Verstärkung des Umgebungslichtsensors. drive ist einer der APDS9960_AGAIN_*-Werte.

getLEDBoost() int

Gibt den LED-Stromboost zurück. Kodiert als einer der APDS9960_LED_BOOST_*-Werte (0 = 100 %, 1 = 150 %, 2 = 200 %, 3 = 300 %).

setLEDBoost(boost: int) None

Setzt den LED-Stromboost. boost ist einer der APDS9960_LED_BOOST_*-Werte.

Näherungsverstärkungskompensation und Fotodiodenmaske

getProxGainCompEnable() bool

Gibt True zurück, wenn die Näherungsverstärkungskompensation aktiviert ist.

setProxGainCompEnable(enable: bool) None

Aktiviert oder deaktiviert die Näherungsverstärkungskompensation.

getProxPhotoMask() int

Gibt die 4-Bit-Maske der deaktivierten Näherungs-Fotodioden zurück. Die Bits sind wie folgt zugeordnet: 3=UP, 2=DOWN, 1=LEFT, 0=RIGHT; 1 deaktiviert eine Fotodiode und 0 aktiviert sie.

setProxPhotoMask(mask: int) None

Setzt die 4-Bit-Maske der deaktivierten Näherungs-Fotodioden (siehe Kodierung oben).

Gestenkonfiguration

getGestureEnterThresh() int

Gibt den Näherungsschwellenwert zurück, der zum Eintritt in den Gestenmodus erforderlich ist.

setGestureEnterThresh(threshold: int) None

Setzt den Näherungsschwellenwert, der zum Eintritt in den Gestenmodus erforderlich ist.

getGestureExitThresh() int

Gibt den Näherungsschwellenwert zurück, der zum Verlassen des Gestenmodus erforderlich ist.

setGestureExitThresh(threshold: int) None

Setzt den Näherungsschwellenwert, der zum Verlassen des Gestenmodus erforderlich ist.

getGestureGain() int

Gibt die im Gestenmodus verwendete Fotodiodenverstärkung zurück. Kodiert als einer der APDS9960_GGAIN_*-Werte (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setGestureGain(gain: int) None

Setzt die im Gestenmodus verwendete Fotodiodenverstärkung.

getGestureLEDDrive() int

Gibt den im Gestenmodus verwendeten LED-Treiberstrom zurück. Kodiert als einer der APDS9960_LED_DRIVE_*-Werte.

setGestureLEDDrive(drive: int) None

Setzt den im Gestenmodus verwendeten LED-Treiberstrom.

getGestureWaitTime() int

Gibt die stromsparende Wartezeit zwischen Gestenerkennungen zurück. Kodiert als einer der APDS9960_GWTIME_*-Werte (0 = 0 ms .. 7 = 39,2 ms).

setGestureWaitTime(time: int) None

Setzt die stromsparende Wartezeit zwischen Gestenerkennungen.

getGestureMode() bool

Gibt True zurück, wenn die Gesten-Zustandsmaschine derzeit läuft.

setGestureMode(enable: bool) None

Tritt in die Gesten-Zustandsmaschine ein oder verlässt sie.

Umgebungslicht-Interrupt-Schwellenwerte

getLightIntLowThreshold() int

Gibt den unteren 16-Bit-Schwellenwert zurück, der für den Umgebungslicht-Interrupt verwendet wird.

setLightIntLowThreshold(threshold: int) None

Setzt den unteren 16-Bit-Schwellenwert, der für den Umgebungslicht-Interrupt verwendet wird.

getLightIntHighThreshold() int

Gibt den oberen 16-Bit-Schwellenwert zurück, der für den Umgebungslicht-Interrupt verwendet wird.

setLightIntHighThreshold(threshold: int) None

Setzt den oberen 16-Bit-Schwellenwert, der für den Umgebungslicht-Interrupt verwendet wird.

Interrupt-Aktivierungen und -Löschungen

getAmbientLightIntEnable() bool

Gibt True zurück, wenn Umgebungslicht-Interrupts aktiviert sind.

setAmbientLightIntEnable(enable: bool) None

Aktiviert oder deaktiviert Umgebungslicht-Interrupts.

getProximityIntEnable() bool

Gibt True zurück, wenn Näherungs-Interrupts aktiviert sind.

setProximityIntEnable(enable: bool) None

Aktiviert oder deaktiviert Näherungs-Interrupts.

getGestureIntEnable() bool

Gibt True zurück, wenn Gesten-Interrupts aktiviert sind.

setGestureIntEnable(enable: bool) None

Aktiviert oder deaktiviert Gesten-Interrupts.

clearAmbientLightInt() None

Löscht einen anstehenden Umgebungslicht-Interrupt.

clearProximityInt() None

Löscht einen anstehenden Näherungs-Interrupt.

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

MicroPython-Unterklasse von APDS9960. Identische öffentliche API, aber der zugrunde liegende Registerzugriff verwendet Aufrufe im machine.I2C-Stil (readfrom_mem und writeto_mem) anstelle von Methoden im SMBus-Stil. Dies ist die Klasse, die auf OpenMV-/MicroPython-Zielen zu verwenden ist.

Ausnahmen

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

Unterklasse von ValueError. Wird vom APDS9960-Konstruktor ausgelöst, wenn der aus dem ID-Register des Chips gelesene Wert nicht in der Liste valid_id enthalten ist.

exception apds9960.ADPS9960InvalidMode(mode: int)

Unterklasse von ValueError. Wird von APDS9960.setMode() ausgelöst, wenn das Argument mode außerhalb des Bereichs APDS9960_MODE_POWER..\ APDS9960_MODE_ALL liegt.

Konstanten

I2C-Adresse und Geräte-IDs

apds9960.APDS9960_I2C_ADDR: int

Standardmäßige 7-Bit-I2C-Adresse des APDS9960 (0x39).

apds9960.APDS9960_DEV_ID: list

Standardliste gültiger Werte des Geräte-ID-Registers ([0xAB, 0x9C, 0xA8, -0x55]).

Gestenabstimmung

apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int

Minimale Sample-Magnitude (pro Fotodiode), die der Gestendekoder bei der Suche nach den ersten/letzten FIFO-Samples im gültigen Bereich verwendet.

apds9960.APDS9960_GESTURE_SENSITIVITY_1: int

Schwellenwert für die akkumulierten U/D- und L/R-Deltas, oberhalb dessen sich der Dekoder auf eine Wischrichtung festlegt.

apds9960.APDS9960_GESTURE_SENSITIVITY_2: int

Schwellenwert für die U/D- und L/R-Deltas pro Schritt, unterhalb dessen der Dekoder ein Sample eher als Nah-/Fern-Kandidat denn als Wischbewegung betrachtet.

apds9960.APDS9960_TIME_FIFO_PAUSE: int

Millisekunden, die die Gestenschleife zwischen den FIFO-Leerungen schläft.

Funktionsmodi

Diese Werte werden an APDS9960.setMode() übergeben.

apds9960.APDS9960_MODE_POWER: int

Einschalt-Bit (0).

apds9960.APDS9960_MODE_AMBIENT_LIGHT: int

Aktivierungsbit für die Umgebungslicht-/Farb-Engine (1).

apds9960.APDS9960_MODE_PROXIMITY: int

Aktivierungsbit für die Näherungs-Engine (2).

apds9960.APDS9960_MODE_WAIT: int

Aktivierungsbit für den Wartezustand (3).

apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int

Aktivierungsbit für den Umgebungslicht-Interrupt (4).

apds9960.APDS9960_MODE_PROXIMITY_INT: int

Aktivierungsbit für den Näherungs-Interrupt (5).

apds9960.APDS9960_MODE_GESTURE: int

Aktivierungsbit für die Gesten-Engine (6).

apds9960.APDS9960_MODE_ALL: int

Sentinel-Wert (7), der APDS9960.setMode() anweist, jedes Bit im ENABLE-Register auf einmal zu aktivieren oder zu deaktivieren.

LED-Treiberströme

apds9960.APDS9960_LED_DRIVE_100MA: int

100 mA LED-Treiberstärke (0).

apds9960.APDS9960_LED_DRIVE_50MA: int

50 mA LED-Treiberstärke (1).

apds9960.APDS9960_LED_DRIVE_25MA: int

25 mA LED-Treiberstärke (2).

apds9960.APDS9960_LED_DRIVE_12_5MA: int

12,5 mA LED-Treiberstärke (3).

Näherungsverstärkung (PGAIN)

apds9960.APDS9960_PGAIN_1X: int

1x Näherungsverstärkung (0).

apds9960.APDS9960_PGAIN_2X: int

2x Näherungsverstärkung (1).

apds9960.APDS9960_PGAIN_4X: int

4x Näherungsverstärkung (2). Vom Konstruktor angewendeter Standardwert.

apds9960.APDS9960_PGAIN_8X: int

8x Näherungsverstärkung (3).

Umgebungslichtverstärkung (AGAIN)

apds9960.APDS9960_AGAIN_1X: int

1x ALS-Verstärkung (0).

apds9960.APDS9960_AGAIN_4X: int

4x ALS-Verstärkung (1). Vom Konstruktor angewendeter Standardwert.

apds9960.APDS9960_AGAIN_16X: int

16x ALS-Verstärkung (2).

apds9960.APDS9960_AGAIN_64X: int

64x ALS-Verstärkung (3).

Gestenverstärkung (GGAIN)

apds9960.APDS9960_GGAIN_1X: int

1x Gestenverstärkung (0).

apds9960.APDS9960_GGAIN_2X: int

2x Gestenverstärkung (1).

apds9960.APDS9960_GGAIN_4X: int

4x Gestenverstärkung (2). Vom Konstruktor angewendeter Standardwert.

apds9960.APDS9960_GGAIN_8X: int

8x Gestenverstärkung (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). Automatisch von APDS9960.enableGestureSensor() angewendet.

Gesten-Wartezeiten

apds9960.APDS9960_GWTIME_0MS: int

0 ms (0).

apds9960.APDS9960_GWTIME_2_8MS: int

2,8 ms (1). Vom Konstruktor angewendeter Standardwert.

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

Gestenrichtungen

Diese Werte werden von APDS9960.readGesture() zurückgegeben.

apds9960.APDS9960_DIR_NONE: int

Keine Geste erkannt (0).

apds9960.APDS9960_DIR_LEFT: int

Wischbewegung nach links (1).

apds9960.APDS9960_DIR_RIGHT: int

Wischbewegung nach rechts (2).

apds9960.APDS9960_DIR_UP: int

Wischbewegung nach oben (3).

apds9960.APDS9960_DIR_DOWN: int

Wischbewegung nach unten (4).

apds9960.APDS9960_DIR_NEAR: int

Nah-Ereignis (5).

apds9960.APDS9960_DIR_FAR: int

Fern-Ereignis (6).

apds9960.APDS9960_DIR_ALL: int

Sentinel-Wert (7), der intern zur Darstellung von „beliebiger Richtung“ verwendet wird.

Gestenzustände

Interne Zustandswerte, die über die Gesten-Zustandsmaschine gemeldet werden.

apds9960.APDS9960_STATE_NA: int

Kein Zustand (0).

apds9960.APDS9960_STATE_NEAR: int

Nah-Zustand erkannt (1).

apds9960.APDS9960_STATE_FAR: int

Fern-Zustand erkannt (2).

apds9960.APDS9960_STATE_ALL: int

Sentinel-Wert (3), der intern zur Darstellung von „beliebigem Zustand“ verwendet wird.