apds9960 — driver per sensore di prossimità, gesti e colore#

Questo modulo fornisce un driver per il sensore digitale di prossimità, luce ambientale, colore RGB e gesti APDS9960 di Broadcom/Avago tramite I2C. Il driver espone controlli di abilitazione/disabilitazione per funzione, letture grezze dei canali (clear, R, G, B, prossimità) e una macchina a stati software per la decodifica dei gesti che classifica gli scorrimenti verso l’alto/basso/sinistra/destra e i gesti di avvicinamento/allontanamento a partire dalla FIFO a 4 fotodiodi integrata nel chip.

Esempio d’uso:

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)

Classi#

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

Costruisce un’istanza del driver APDS9960.

  • bus è un oggetto bus I2C configurato usato per comunicare con il sensore. La classe base emette chiamate in stile SMBus read_byte_data, write_byte_data e read_i2c_block_data; per machine.I2C di MicroPython usa invece uAPDS9960.

  • address è l’indirizzo I2C a 7 bit del dispositivo. Il valore predefinito è APDS9960_I2C_ADDR (0x39).

  • valid_id è un elenco di valori accettabili restituiti dal registro ID del chip. Il valore predefinito è APDS9960_DEV_ID.

Il costruttore legge l’ID del dispositivo e solleva ADPS9960InvalidDevId se non è presente in valid_id. Quindi disabilita ogni funzione, programma i valori ATIME/WTIME/PPULSE predefiniti e applica la configurazione predefinita di LED drive, guadagno di prossimità, guadagno ALS, soglie di prossimità, soglie di luce ambientale, persistenza e del motore dei gesti (soglie di ingresso/uscita, GCONF1, guadagno dei gesti, LED drive dei gesti, tempo di attesa dei gesti, offset dei gesti, GPULSE, GCONF3 e abilitazione dell’interrupt dei gesti).

Controllo di modalità e alimentazione#

getMode() int#

Restituisce il valore grezzo del registro ENABLE, che codifica quali funzioni sono attualmente abilitate (alimentazione, ALS, prossimità, attesa, interrupt ALS, interrupt di prossimità, gesti).

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

Abilita o disabilita una singola funzione nel registro ENABLE. mode deve essere uno dei valori APDS9960_MODE_* (APDS9960_MODE_POWER ..\ APDS9960_MODE_ALL). Quando mode è APDS9960_MODE_ALL, tutti i bit vengono attivati o disattivati contemporaneamente. Solleva ADPS9960InvalidMode per valori fuori intervallo.

enablePower() None#

Accende l’APDS9960 (imposta il bit PON in ENABLE).

disablePower() None#

Spegne l’APDS9960 (azzera il bit PON in ENABLE).

Sensore di luce ambientale / RGB#

enableLightSensor(interrupts: bool = True) None#

Ripristina il guadagno ALS predefinito, configura il bit di abilitazione dell’interrupt ALS, accende il dispositivo e abilita il motore di luce ambientale/colore.

disableLightSensor() None#

Disabilita l’interrupt ALS e arresta il motore di luce ambientale/colore.

readAmbientLight() int#

Legge il livello di luce ambientale del canale clear come valore a 16 bit senza segno.

readRedLight() int#

Legge il livello del canale rosso come valore a 16 bit senza segno.

readGreenLight() int#

Legge il livello del canale verde come valore a 16 bit senza segno.

readBlueLight() int#

Legge il livello del canale blu come valore a 16 bit senza segno.

Sensore di prossimità#

enableProximitySensor(interrupts: bool = True) None#

Ripristina il guadagno di prossimità e il LED drive predefiniti, configura il bit di abilitazione dell’interrupt di prossimità, accende il dispositivo e abilita il motore di prossimità.

disableProximitySensor() None#

Disabilita l’interrupt di prossimità e arresta il motore di prossimità.

readProximity() int#

Legge il livello di prossimità come valore a 8 bit senza segno.

Motore dei gesti#

enableGestureSensor(interrupts: bool = True) None#

Reimposta lo stato dei gesti, imposta WTIME e il conteggio degli impulsi dei gesti, aumenta il LED al 300%, configura il bit di abilitazione dell’interrupt dei gesti, entra nella macchina a stati dei gesti, accende il dispositivo e abilita le modalità di attesa, prossimità e gesti.

disableGestureSensor() None#

Reimposta lo stato dei gesti, disabilita l’interrupt e la macchina a stati dei gesti e arresta il motore dei gesti.

isGestureAvailable() bool#

Restituisce True se il bit GVALID del registro di stato dei gesti è impostato, indicando che i dati della FIFO dei gesti sono pronti per essere letti.

readGesture() int#

Svuota la FIFO dei gesti, esegue il decodificatore di gesti integrato e restituisce una delle costanti di direzione APDS9960_DIR_*. Restituisce APDS9960_DIR_NONE se il motore non è in esecuzione, se non sono disponibili dati validi o se i dati non si sono risolti in un gesto riconosciuto.

resetGestureParameters() None#

Azzera il buffer FIFO interno dei gesti, i delta, i conteggi, i contatori di avvicinamento/allontanamento, lo stato e l’ultimo movimento decodificato.

processGestureData() bool#

Elabora i campioni grezzi U/D/L/R della FIFO attualmente bufferizzati per aggiornare i delta U/D e L/R e i contatori di avvicinamento/allontanamento. Restituisce True se è stato rilevato un evento di avvicinamento o allontanamento, False altrimenti.

decodeGesture() bool#

Converte gli attuali conteggi U/D e L/R e i delta accumulati in una direzione memorizzata nel campo interno gesture_motion_. Restituisce True quando una direzione viene riconosciuta, False altrimenti.

Soglie di prossimità#

getProxIntLowThresh() int#

Restituisce la soglia bassa dell’interrupt di prossimità (registro PILT).

setProxIntLowThresh(threshold: int) None#

Imposta la soglia bassa dell’interrupt di prossimità.

getProxIntHighThresh() int#

Restituisce la soglia alta dell’interrupt di prossimità (registro PIHT).

setProxIntHighThresh(threshold: int) None#

Imposta la soglia alta dell’interrupt di prossimità.

getProximityIntLowThreshold() int#

Alias di getProxIntLowThresh().

setProximityIntLowThreshold(threshold: int) None#

Alias di setProxIntLowThresh().

getProximityIntHighThreshold() int#

Alias di getProxIntHighThresh().

setProximityIntHighThreshold(threshold: int) None#

Alias di setProxIntHighThresh().

LED drive, guadagno e boost#

getLEDDrive() int#

Restituisce l’intensità del LED drive usata per prossimità e ALS. Codificata come uno dei valori APDS9960_LED_DRIVE_* (0 = 100 mA, 1 = 50 mA, 2 = 25 mA, 3 = 12.5 mA).

setLEDDrive(drive: int) None#

Imposta l’intensità del LED drive usata per prossimità e ALS. drive è uno dei valori APDS9960_LED_DRIVE_*.

getProximityGain() int#

Restituisce il guadagno del ricevitore di prossimità. Codificato come uno dei valori APDS9960_PGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setProximityGain(drive: int) None#

Imposta il guadagno del ricevitore di prossimità. drive è uno dei valori APDS9960_PGAIN_*.

getAmbientLightGain() int#

Restituisce il guadagno del sensore di luce ambientale. Codificato come uno dei valori APDS9960_AGAIN_* (0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x).

setAmbientLightGain(drive: int) None#

Imposta il guadagno del sensore di luce ambientale. drive è uno dei valori APDS9960_AGAIN_*.

getLEDBoost() int#

Restituisce il boost di corrente del LED. Codificato come uno dei valori APDS9960_LED_BOOST_* (0 = 100%, 1 = 150%, 2 = 200%, 3 = 300%).

setLEDBoost(boost: int) None#

Imposta il boost di corrente del LED. boost è uno dei valori APDS9960_LED_BOOST_*.

Compensazione del guadagno di prossimità e maschera dei fotodiodi#

getProxGainCompEnable() bool#

Restituisce True se la compensazione del guadagno di prossimità è abilitata.

setProxGainCompEnable(enable: bool) None#

Abilita o disabilita la compensazione del guadagno di prossimità.

getProxPhotoMask() int#

Restituisce la maschera a 4 bit dei fotodiodi di prossimità disabilitati. I bit sono mappati come 3=UP, 2=DOWN, 1=LEFT, 0=RIGHT; 1 disabilita un fotodiodo e 0 lo abilita.

setProxPhotoMask(mask: int) None#

Imposta la maschera a 4 bit dei fotodiodi di prossimità disabilitati (vedi la codifica sopra).

Configurazione dei gesti#

getGestureEnterThresh() int#

Restituisce la soglia di prossimità richiesta per entrare in modalità gesti.

setGestureEnterThresh(threshold: int) None#

Imposta la soglia di prossimità richiesta per entrare in modalità gesti.

getGestureExitThresh() int#

Restituisce la soglia di prossimità richiesta per uscire dalla modalità gesti.

setGestureExitThresh(threshold: int) None#

Imposta la soglia di prossimità richiesta per uscire dalla modalità gesti.

getGestureGain() int#

Restituisce il guadagno dei fotodiodi usato durante la modalità gesti. Codificato come uno dei valori APDS9960_GGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setGestureGain(gain: int) None#

Imposta il guadagno dei fotodiodi usato durante la modalità gesti.

getGestureLEDDrive() int#

Restituisce la corrente del LED drive usata durante la modalità gesti. Codificata come uno dei valori APDS9960_LED_DRIVE_*.

setGestureLEDDrive(drive: int) None#

Imposta la corrente del LED drive usata durante la modalità gesti.

getGestureWaitTime() int#

Restituisce il tempo di attesa a basso consumo tra i rilevamenti dei gesti. Codificato come uno dei valori APDS9960_GWTIME_* (0 = 0 ms .. 7 = 39.2 ms).

setGestureWaitTime(time: int) None#

Imposta il tempo di attesa a basso consumo tra i rilevamenti dei gesti.

getGestureMode() bool#

Restituisce True se la macchina a stati dei gesti è attualmente in esecuzione.

setGestureMode(enable: bool) None#

Entra o esce dalla macchina a stati dei gesti.

Soglie dell’interrupt di luce ambientale#

getLightIntLowThreshold() int#

Restituisce la soglia bassa a 16 bit usata per l’interrupt di luce ambientale.

setLightIntLowThreshold(threshold: int) None#

Imposta la soglia bassa a 16 bit usata per l’interrupt di luce ambientale.

getLightIntHighThreshold() int#

Restituisce la soglia alta a 16 bit usata per l’interrupt di luce ambientale.

setLightIntHighThreshold(threshold: int) None#

Imposta la soglia alta a 16 bit usata per l’interrupt di luce ambientale.

Abilitazioni e azzeramenti degli interrupt#

getAmbientLightIntEnable() bool#

Restituisce True se gli interrupt di luce ambientale sono abilitati.

setAmbientLightIntEnable(enable: bool) None#

Abilita o disabilita gli interrupt di luce ambientale.

getProximityIntEnable() bool#

Restituisce True se gli interrupt di prossimità sono abilitati.

setProximityIntEnable(enable: bool) None#

Abilita o disabilita gli interrupt di prossimità.

getGestureIntEnable() bool#

Restituisce True se gli interrupt dei gesti sono abilitati.

setGestureIntEnable(enable: bool) None#

Abilita o disabilita gli interrupt dei gesti.

clearAmbientLightInt() None#

Azzera un interrupt di luce ambientale in sospeso.

clearProximityInt() None#

Azzera un interrupt di prossimità in sospeso.

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

Sottoclasse MicroPython di APDS9960. API pubblica identica, ma l’accesso ai registri sottostante usa chiamate in stile machine.I2C readfrom_mem e writeto_mem anziché metodi in stile SMBus. Questa è la classe da usare su target OpenMV / MicroPython.

Eccezioni#

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

Sottoclasse di ValueError. Sollevata dal costruttore di APDS9960 quando il valore letto dal registro ID del chip non è presente nell’elenco valid_id.

exception apds9960.ADPS9960InvalidMode(mode: int)#

Sottoclasse di ValueError. Sollevata da APDS9960.setMode() quando l’argomento mode è al di fuori dell’intervallo APDS9960_MODE_POWER..\ APDS9960_MODE_ALL.

Costanti#

Indirizzo I2C e ID dei dispositivi#

apds9960.APDS9960_I2C_ADDR: int#

Indirizzo I2C a 7 bit predefinito dell’APDS9960 (0x39).

apds9960.APDS9960_DEV_ID: list#

Elenco predefinito dei valori validi del registro ID del dispositivo ([0xAB, 0x9C, 0xA8, -0x55]).

Regolazione dei gesti#

apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int#

Magnitudine minima del campione (per fotodiodo) usata dal decodificatore di gesti durante la ricerca dei primi/ultimi campioni FIFO entro il range.

apds9960.APDS9960_GESTURE_SENSITIVITY_1: int#

Soglia sui delta U/D e L/R accumulati oltre la quale il decodificatore conferma una direzione di scorrimento.

apds9960.APDS9960_GESTURE_SENSITIVITY_2: int#

Soglia sui delta U/D e L/R per passo al di sotto della quale il decodificatore considera un campione un candidato di avvicinamento/allontanamento anziché uno scorrimento.

apds9960.APDS9960_TIME_FIFO_PAUSE: int#

Millisecondi per cui il ciclo dei gesti rimane in pausa tra gli svuotamenti della FIFO.

Modalità delle funzioni#

Questi valori vengono passati a APDS9960.setMode().

apds9960.APDS9960_MODE_POWER: int#

Bit di accensione (0).

apds9960.APDS9960_MODE_AMBIENT_LIGHT: int#

Bit di abilitazione del motore di luce ambientale/colore (1).

apds9960.APDS9960_MODE_PROXIMITY: int#

Bit di abilitazione del motore di prossimità (2).

apds9960.APDS9960_MODE_WAIT: int#

Bit di abilitazione dello stato di attesa (3).

apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int#

Bit di abilitazione dell’interrupt di luce ambientale (4).

apds9960.APDS9960_MODE_PROXIMITY_INT: int#

Bit di abilitazione dell’interrupt di prossimità (5).

apds9960.APDS9960_MODE_GESTURE: int#

Bit di abilitazione del motore dei gesti (6).

apds9960.APDS9960_MODE_ALL: int#

Valore sentinella (7) che indica a APDS9960.setMode() di abilitare o disabilitare contemporaneamente ogni bit del registro ENABLE.

Correnti del LED drive#

apds9960.APDS9960_LED_DRIVE_100MA: int#

LED drive a 100 mA (0).

apds9960.APDS9960_LED_DRIVE_50MA: int#

LED drive a 50 mA (1).

apds9960.APDS9960_LED_DRIVE_25MA: int#

LED drive a 25 mA (2).

apds9960.APDS9960_LED_DRIVE_12_5MA: int#

LED drive a 12.5 mA (3).

Guadagno di prossimità (PGAIN)#

apds9960.APDS9960_PGAIN_1X: int#

Guadagno di prossimità 1x (0).

apds9960.APDS9960_PGAIN_2X: int#

Guadagno di prossimità 2x (1).

apds9960.APDS9960_PGAIN_4X: int#

Guadagno di prossimità 4x (2). Predefinito applicato dal costruttore.

apds9960.APDS9960_PGAIN_8X: int#

Guadagno di prossimità 8x (3).

Guadagno di luce ambientale (AGAIN)#

apds9960.APDS9960_AGAIN_1X: int#

Guadagno ALS 1x (0).

apds9960.APDS9960_AGAIN_4X: int#

Guadagno ALS 4x (1). Predefinito applicato dal costruttore.

apds9960.APDS9960_AGAIN_16X: int#

Guadagno ALS 16x (2).

apds9960.APDS9960_AGAIN_64X: int#

Guadagno ALS 64x (3).

Guadagno dei gesti (GGAIN)#

apds9960.APDS9960_GGAIN_1X: int#

Guadagno dei gesti 1x (0).

apds9960.APDS9960_GGAIN_2X: int#

Guadagno dei gesti 2x (1).

apds9960.APDS9960_GGAIN_4X: int#

Guadagno dei gesti 4x (2). Predefinito applicato dal costruttore.

apds9960.APDS9960_GGAIN_8X: int#

Guadagno dei gesti 8x (3).

Boost del LED#

apds9960.APDS9960_LED_BOOST_100: int#

Boost del LED 100% (0).

apds9960.APDS9960_LED_BOOST_150: int#

Boost del LED 150% (1).

apds9960.APDS9960_LED_BOOST_200: int#

Boost del LED 200% (2).

apds9960.APDS9960_LED_BOOST_300: int#

Boost del LED 300% (3). Applicato automaticamente da APDS9960.enableGestureSensor().

Tempi di attesa dei gesti#

apds9960.APDS9960_GWTIME_0MS: int#

0 ms (0).

apds9960.APDS9960_GWTIME_2_8MS: int#

2.8 ms (1). Predefinito applicato dal costruttore.

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

Direzioni dei gesti#

Questi valori vengono restituiti da APDS9960.readGesture().

apds9960.APDS9960_DIR_NONE: int#

Nessun gesto rilevato (0).

apds9960.APDS9960_DIR_LEFT: int#

Scorrimento a sinistra (1).

apds9960.APDS9960_DIR_RIGHT: int#

Scorrimento a destra (2).

apds9960.APDS9960_DIR_UP: int#

Scorrimento verso l’alto (3).

apds9960.APDS9960_DIR_DOWN: int#

Scorrimento verso il basso (4).

apds9960.APDS9960_DIR_NEAR: int#

Evento di avvicinamento (5).

apds9960.APDS9960_DIR_FAR: int#

Evento di allontanamento (6).

apds9960.APDS9960_DIR_ALL: int#

Valore sentinella (7) usato internamente per rappresentare «qualsiasi direzione».

Stati dei gesti#

Valori di stato interni riportati tramite la macchina a stati dei gesti.

apds9960.APDS9960_STATE_NA: int#

Nessuno stato (0).

apds9960.APDS9960_STATE_NEAR: int#

Stato di avvicinamento rilevato (1).

apds9960.APDS9960_STATE_FAR: int#

Stato di allontanamento rilevato (2).

apds9960.APDS9960_STATE_ALL: int#

Valore sentinella (3) usato internamente per rappresentare «qualsiasi stato».