apds9960 — Driver de sensor de proximidade, gestos e cor

Este módulo fornece um driver para o sensor digital de proximidade, luz ambiente, cor RGB e gestos APDS9960 da Broadcom/Avago via I2C. O driver expõe controles de habilitar/desabilitar por característica, leituras brutas de canais (clear, R, G, B, proximidade) e uma máquina de estados de decodificação de gestos em software que classifica deslizes para cima/baixo/esquerda/direita e gestos de aproximar/afastar a partir do FIFO de 4 fotodiodos do chip.

Exemplo de 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)

Classes

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

Constrói uma instância do driver APDS9960.

  • bus é um objeto de barramento I2C configurado usado para se comunicar com o sensor. A classe base emite chamadas read_byte_data, write_byte_data e read_i2c_block_data no estilo SMBus; para o machine.I2C do MicroPython, use uAPDS9960 em vez disso.

  • address é o endereço I2C de 7 bits do dispositivo. O padrão é APDS9960_I2C_ADDR (0x39).

  • valid_id é uma lista de valores aceitáveis retornados pelo registrador de ID do chip. O padrão é APDS9960_DEV_ID.

O construtor lê o ID do dispositivo e levanta ADPS9960InvalidDevId se ele não estiver em valid_id. Em seguida, desabilita todas as características, programa os valores padrão de ATIME/WTIME/PPULSE e aplica os padrões de drive do LED, ganho de proximidade, ganho de ALS, limiares de proximidade, limiares de luz ambiente, persistência e configuração do motor de gestos (limiares de entrada/saída, GCONF1, ganho de gestos, drive do LED de gestos, tempo de espera de gestos, offsets de gestos, GPULSE, GCONF3 e habilitação da interrupção de gestos).

Controle de modo e energia

getMode() int

Retorna o valor bruto do registrador ENABLE, codificando quais características estão atualmente habilitadas (energia, ALS, proximidade, espera, interrupção de ALS, interrupção de proximidade, gestos).

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

Habilita ou desabilita uma característica individual no registrador ENABLE. mode deve ser um dos valores APDS9960_MODE_* (APDS9960_MODE_POWER ..\ APDS9960_MODE_ALL). Quando mode é APDS9960_MODE_ALL, todos os bits são ligados ou desligados de uma vez. Levanta ADPS9960InvalidMode para valores fora da faixa.

enablePower() None

Liga o APDS9960 (define o bit PON em ENABLE).

disablePower() None

Desliga o APDS9960 (limpa o bit PON em ENABLE).

Sensor de luz ambiente / RGB

enableLightSensor(interrupts: bool = True) None

Restaura o ganho de ALS padrão, configura o bit de habilitação da interrupção de ALS, liga o dispositivo e habilita o motor de luz ambiente/cor.

disableLightSensor() None

Desabilita a interrupção de ALS e para o motor de luz ambiente/cor.

readAmbientLight() int

Lê o nível de luz ambiente do canal clear como um valor sem sinal de 16 bits.

readRedLight() int

Lê o nível do canal vermelho como um valor sem sinal de 16 bits.

readGreenLight() int

Lê o nível do canal verde como um valor sem sinal de 16 bits.

readBlueLight() int

Lê o nível do canal azul como um valor sem sinal de 16 bits.

Sensor de proximidade

enableProximitySensor(interrupts: bool = True) None

Restaura o ganho de proximidade e o drive do LED padrão, configura o bit de habilitação da interrupção de proximidade, liga o dispositivo e habilita o motor de proximidade.

disableProximitySensor() None

Desabilita a interrupção de proximidade e para o motor de proximidade.

readProximity() int

Lê o nível de proximidade como um valor sem sinal de 8 bits.

Motor de gestos

enableGestureSensor(interrupts: bool = True) None

Reinicia o estado de gestos, define WTIME e a contagem de pulsos de gestos, aumenta o LED para 300%, configura o bit de habilitação da interrupção de gestos, entra na máquina de estados de gestos, liga o dispositivo e habilita os modos de espera, proximidade e gestos.

disableGestureSensor() None

Reinicia o estado de gestos, desabilita a interrupção de gestos e a máquina de estados, e para o motor de gestos.

isGestureAvailable() bool

Retorna True se o bit GVALID do registrador de status de gestos estiver definido, indicando que os dados do FIFO de gestos estão prontos para serem lidos.

readGesture() int

Esvazia o FIFO de gestos, executa o decodificador de gestos embarcado e retorna uma das constantes de direção APDS9960_DIR_*. Retorna APDS9960_DIR_NONE se o motor não estiver em execução, se nenhum dado válido estiver disponível ou se os dados não resultarem em um gesto reconhecido.

resetGestureParameters() None

Limpa o buffer interno do FIFO de gestos, os deltas, as contagens, os contadores de aproximar/afastar, o estado e o último movimento decodificado.

processGestureData() bool

Processa as amostras brutas U/D/L/R do FIFO atualmente armazenadas em buffer para atualizar os deltas U/D e L/R e os contadores de aproximar/afastar. Retorna True se um evento de aproximar ou afastar foi detectado, False caso contrário.

decodeGesture() bool

Converte as contagens U/D e L/R atuais e os deltas acumulados em uma direção armazenada no campo interno gesture_motion_. Retorna True quando uma direção é reconhecida, False caso contrário.

Limiares de proximidade

getProxIntLowThresh() int

Retorna o limiar baixo de interrupção de proximidade (registrador PILT).

setProxIntLowThresh(threshold: int) None

Define o limiar baixo de interrupção de proximidade.

getProxIntHighThresh() int

Retorna o limiar alto de interrupção de proximidade (registrador PIHT).

setProxIntHighThresh(threshold: int) None

Define o limiar alto de interrupção de proximidade.

getProximityIntLowThreshold() int

Alias para getProxIntLowThresh().

setProximityIntLowThreshold(threshold: int) None

Alias para setProxIntLowThresh().

getProximityIntHighThreshold() int

Alias para getProxIntHighThresh().

setProximityIntHighThreshold(threshold: int) None

Alias para setProxIntHighThresh().

Drive do LED, ganho e boost

getLEDDrive() int

Retorna a intensidade do drive do LED usada para proximidade e ALS. Codificada como um dos valores APDS9960_LED_DRIVE_* (0 = 100 mA, 1 = 50 mA, 2 = 25 mA, 3 = 12,5 mA).

setLEDDrive(drive: int) None

Define a intensidade do drive do LED usada para proximidade e ALS. drive é um dos valores APDS9960_LED_DRIVE_*.

getProximityGain() int

Retorna o ganho do receptor de proximidade. Codificado como um dos valores APDS9960_PGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setProximityGain(drive: int) None

Define o ganho do receptor de proximidade. drive é um dos valores APDS9960_PGAIN_*.

getAmbientLightGain() int

Retorna o ganho do sensor de luz ambiente. Codificado como um dos valores APDS9960_AGAIN_* (0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x).

setAmbientLightGain(drive: int) None

Define o ganho do sensor de luz ambiente. drive é um dos valores APDS9960_AGAIN_*.

getLEDBoost() int

Retorna o boost de corrente do LED. Codificado como um dos valores APDS9960_LED_BOOST_* (0 = 100%, 1 = 150%, 2 = 200%, 3 = 300%).

setLEDBoost(boost: int) None

Define o boost de corrente do LED. boost é um dos valores APDS9960_LED_BOOST_*.

Compensação de ganho de proximidade e máscara de fotodiodos

getProxGainCompEnable() bool

Retorna True se a compensação de ganho de proximidade estiver habilitada.

setProxGainCompEnable(enable: bool) None

Habilita ou desabilita a compensação de ganho de proximidade.

getProxPhotoMask() int

Retorna a máscara de 4 bits dos fotodiodos de proximidade desabilitados. Os bits mapeiam como 3=UP, 2=DOWN, 1=LEFT, 0=RIGHT; 1 desabilita um fotodiodo e 0 o habilita.

setProxPhotoMask(mask: int) None

Define a máscara de 4 bits dos fotodiodos de proximidade desabilitados (veja a codificação acima).

Configuração de gestos

getGestureEnterThresh() int

Retorna o limiar de proximidade necessário para entrar no modo de gestos.

setGestureEnterThresh(threshold: int) None

Define o limiar de proximidade necessário para entrar no modo de gestos.

getGestureExitThresh() int

Retorna o limiar de proximidade necessário para sair do modo de gestos.

setGestureExitThresh(threshold: int) None

Define o limiar de proximidade necessário para sair do modo de gestos.

getGestureGain() int

Retorna o ganho do fotodiodo usado durante o modo de gestos. Codificado como um dos valores APDS9960_GGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setGestureGain(gain: int) None

Define o ganho do fotodiodo usado durante o modo de gestos.

getGestureLEDDrive() int

Retorna a corrente do drive do LED usada durante o modo de gestos. Codificada como um dos valores APDS9960_LED_DRIVE_*.

setGestureLEDDrive(drive: int) None

Define a corrente do drive do LED usada durante o modo de gestos.

getGestureWaitTime() int

Retorna o tempo de espera de baixo consumo entre detecções de gestos. Codificado como um dos valores APDS9960_GWTIME_* (0 = 0 ms .. 7 = 39,2 ms).

setGestureWaitTime(time: int) None

Define o tempo de espera de baixo consumo entre detecções de gestos.

getGestureMode() bool

Retorna True se a máquina de estados de gestos estiver atualmente em execução.

setGestureMode(enable: bool) None

Entra ou sai da máquina de estados de gestos.

Limiares de interrupção de luz ambiente

getLightIntLowThreshold() int

Retorna o limiar baixo de 16 bits usado para a interrupção de luz ambiente.

setLightIntLowThreshold(threshold: int) None

Define o limiar baixo de 16 bits usado para a interrupção de luz ambiente.

getLightIntHighThreshold() int

Retorna o limiar alto de 16 bits usado para a interrupção de luz ambiente.

setLightIntHighThreshold(threshold: int) None

Define o limiar alto de 16 bits usado para a interrupção de luz ambiente.

Habilitação e limpeza de interrupções

getAmbientLightIntEnable() bool

Retorna True se as interrupções de luz ambiente estiverem habilitadas.

setAmbientLightIntEnable(enable: bool) None

Habilita ou desabilita as interrupções de luz ambiente.

getProximityIntEnable() bool

Retorna True se as interrupções de proximidade estiverem habilitadas.

setProximityIntEnable(enable: bool) None

Habilita ou desabilita as interrupções de proximidade.

getGestureIntEnable() bool

Retorna True se as interrupções de gestos estiverem habilitadas.

setGestureIntEnable(enable: bool) None

Habilita ou desabilita as interrupções de gestos.

clearAmbientLightInt() None

Limpa uma interrupção de luz ambiente pendente.

clearProximityInt() None

Limpa uma interrupção de proximidade pendente.

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

Subclasse do MicroPython de APDS9960. API pública idêntica, mas o acesso aos registradores subjacentes usa chamadas readfrom_mem e writeto_mem no estilo machine.I2C em vez de métodos no estilo SMBus. Esta é a classe a ser usada em targets OpenMV / MicroPython.

Exceções

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

Subclasse de ValueError. Levantada pelo construtor de APDS9960 quando o valor lido do registrador de ID do chip não está presente na lista valid_id.

exception apds9960.ADPS9960InvalidMode(mode: int)

Subclasse de ValueError. Levantada por APDS9960.setMode() quando o argumento mode está fora da faixa APDS9960_MODE_POWER..\ APDS9960_MODE_ALL.

Constantes

Endereço I2C e IDs de dispositivo

apds9960.APDS9960_I2C_ADDR: int

Endereço I2C de 7 bits padrão do APDS9960 (0x39).

apds9960.APDS9960_DEV_ID: list

Lista padrão de valores válidos do registrador de ID de dispositivo ([0xAB, 0x9C, 0xA8, -0x55]).

Ajuste de gestos

apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int

Magnitude mínima de amostra (por fotodiodo) usada pelo decodificador de gestos ao procurar as primeiras/últimas amostras do FIFO dentro da faixa.

apds9960.APDS9960_GESTURE_SENSITIVITY_1: int

Limiar sobre os deltas acumulados U/D e L/R acima do qual o decodificador define uma direção de deslize.

apds9960.APDS9960_GESTURE_SENSITIVITY_2: int

Limiar sobre os deltas por passo U/D e L/R abaixo do qual o decodificador considera uma amostra como candidata a aproximar/afastar em vez de um deslize.

apds9960.APDS9960_TIME_FIFO_PAUSE: int

Milissegundos que o laço de gestos dorme entre os esvaziamentos do FIFO.

Modos de característica

Estes valores são passados para APDS9960.setMode().

apds9960.APDS9960_MODE_POWER: int

Bit de ligar (0).

apds9960.APDS9960_MODE_AMBIENT_LIGHT: int

Bit de habilitação do motor de luz ambiente/cor (1).

apds9960.APDS9960_MODE_PROXIMITY: int

Bit de habilitação do motor de proximidade (2).

apds9960.APDS9960_MODE_WAIT: int

Bit de habilitação do estado de espera (3).

apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int

Bit de habilitação da interrupção de luz ambiente (4).

apds9960.APDS9960_MODE_PROXIMITY_INT: int

Bit de habilitação da interrupção de proximidade (5).

apds9960.APDS9960_MODE_GESTURE: int

Bit de habilitação do motor de gestos (6).

apds9960.APDS9960_MODE_ALL: int

Valor sentinela (7) que instrui APDS9960.setMode() a habilitar ou desabilitar todos os bits do registrador ENABLE de uma vez.

Correntes do drive do LED

apds9960.APDS9960_LED_DRIVE_100MA: int

Drive do LED de 100 mA (0).

apds9960.APDS9960_LED_DRIVE_50MA: int

Drive do LED de 50 mA (1).

apds9960.APDS9960_LED_DRIVE_25MA: int

Drive do LED de 25 mA (2).

apds9960.APDS9960_LED_DRIVE_12_5MA: int

Drive do LED de 12,5 mA (3).

Ganho de proximidade (PGAIN)

apds9960.APDS9960_PGAIN_1X: int

Ganho de proximidade 1x (0).

apds9960.APDS9960_PGAIN_2X: int

Ganho de proximidade 2x (1).

apds9960.APDS9960_PGAIN_4X: int

Ganho de proximidade 4x (2). Padrão aplicado pelo construtor.

apds9960.APDS9960_PGAIN_8X: int

Ganho de proximidade 8x (3).

Ganho de luz ambiente (AGAIN)

apds9960.APDS9960_AGAIN_1X: int

Ganho de ALS 1x (0).

apds9960.APDS9960_AGAIN_4X: int

Ganho de ALS 4x (1). Padrão aplicado pelo construtor.

apds9960.APDS9960_AGAIN_16X: int

Ganho de ALS 16x (2).

apds9960.APDS9960_AGAIN_64X: int

Ganho de ALS 64x (3).

Ganho de gestos (GGAIN)

apds9960.APDS9960_GGAIN_1X: int

Ganho de gestos 1x (0).

apds9960.APDS9960_GGAIN_2X: int

Ganho de gestos 2x (1).

apds9960.APDS9960_GGAIN_4X: int

Ganho de gestos 4x (2). Padrão aplicado pelo construtor.

apds9960.APDS9960_GGAIN_8X: int

Ganho de gestos 8x (3).

Boost do LED

apds9960.APDS9960_LED_BOOST_100: int

Boost do LED de 100% (0).

apds9960.APDS9960_LED_BOOST_150: int

Boost do LED de 150% (1).

apds9960.APDS9960_LED_BOOST_200: int

Boost do LED de 200% (2).

apds9960.APDS9960_LED_BOOST_300: int

Boost do LED de 300% (3). Aplicado automaticamente por APDS9960.enableGestureSensor().

Tempos de espera de gestos

apds9960.APDS9960_GWTIME_0MS: int

0 ms (0).

apds9960.APDS9960_GWTIME_2_8MS: int

2,8 ms (1). Padrão aplicado pelo construtor.

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

Direções de gestos

Estes valores são retornados por APDS9960.readGesture().

apds9960.APDS9960_DIR_NONE: int

Nenhum gesto detectado (0).

apds9960.APDS9960_DIR_LEFT: int

Deslize para a esquerda (1).

apds9960.APDS9960_DIR_RIGHT: int

Deslize para a direita (2).

apds9960.APDS9960_DIR_UP: int

Deslize para cima (3).

apds9960.APDS9960_DIR_DOWN: int

Deslize para baixo (4).

apds9960.APDS9960_DIR_NEAR: int

Evento de aproximar (5).

apds9960.APDS9960_DIR_FAR: int

Evento de afastar (6).

apds9960.APDS9960_DIR_ALL: int

Valor sentinela (7) usado internamente para representar “qualquer direção”.

Estados de gestos

Valores de estado interno reportados pela máquina de estados de gestos.

apds9960.APDS9960_STATE_NA: int

Nenhum estado (0).

apds9960.APDS9960_STATE_NEAR: int

Estado de aproximação detectado (1).

apds9960.APDS9960_STATE_FAR: int

Estado de afastamento detectado (2).

apds9960.APDS9960_STATE_ALL: int

Valor sentinela (3) usado internamente para representar “qualquer estado”.