apds9960 --- 接近、手势和颜色传感器驱动¶
本模块通过 I2C 为 Broadcom/Avago APDS9960 数字接近、环境光、RGB 颜色和手势传感器提供了驱动。该驱动暴露了逐功能的启用/禁用控制、原始通道读取(clear、R、G、B、接近),以及一个软件手势解码状态机,可从片上的 4 光电二极管 FIFO 中识别上/下/左/右滑动以及靠近/远离手势。
用法示例:
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)
类¶
- class apds9960.APDS9960(bus: machine.I2C, address: int = 0x39, valid_id: list = [0xAB, 0x9C, 0xA8, -0x55])¶
构造一个 APDS9960 驱动实例。
bus是一个用于与传感器通信的已配置 I2C 总线对象。基类发出 SMBus 风格的read_byte_data、write_byte_data和read_i2c_block_data调用;对于 MicroPython 的machine.I2C,请改用uAPDS9960。address是设备的 7 位 I2C 地址。默认为APDS9960_I2C_ADDR(0x39)。valid_id是芯片 ID 寄存器所返回的可接受值列表。默认为APDS9960_DEV_ID。
构造函数读取设备 ID,如果它不在
valid_id中则引发ADPS9960InvalidDevId。随后它会禁用每个功能,写入默认的 ATIME/WTIME/PPULSE 值,并应用默认的 LED 驱动、接近增益、ALS 增益、接近阈值、环境光阈值、持续性以及手势引擎配置(进入/退出阈值、GCONF1、手势增益、手势 LED 驱动、手势等待时间、手势偏移、GPULSE、GCONF3 以及手势中断使能)。模式与电源控制¶
- setMode(mode: int, enable: bool = True) None¶
在 ENABLE 寄存器中启用或禁用某个单独的功能。
mode必须是APDS9960_MODE_*值之一(APDS9960_MODE_POWER..\APDS9960_MODE_ALL)。当mode为APDS9960_MODE_ALL时,所有位会被一次性开启或关闭。对于超出范围的值会引发ADPS9960InvalidMode。
环境光 / RGB 传感器¶
接近传感器¶
手势引擎¶
- enableGestureSensor(interrupts: bool = True) None¶
重置手势状态,设置 WTIME 和手势脉冲计数,将 LED 提升至 300%,配置手势中断使能位,进入手势状态机,为设备上电,并启用等待、接近和手势模式。
- readGesture() int¶
排空手势 FIFO,运行板载手势解码器,并返回
APDS9960_DIR_*方向常量之一。如果引擎未运行、无可用的有效数据,或数据未解析为可识别的手势,则返回APDS9960_DIR_NONE。
接近阈值¶
LED 驱动、增益与提升¶
接近增益补偿与光电二极管掩码¶
手势配置¶
环境光中断阈值¶
中断使能与清除¶
- class apds9960.uAPDS9960(bus: machine.I2C, address: int = 0x39, valid_id: list = [0xAB, 0x9C, 0xA8, -0x55])¶
APDS9960的 MicroPython 子类。公共 API 完全相同,但底层寄存器访问使用machine.I2C风格的readfrom_mem和writeto_mem调用,而非 SMBus 风格的方法。这是在 OpenMV / MicroPython 目标上应使用的类。
异常¶
- exception apds9960.ADPS9960InvalidDevId(id: int, valid_ids: list)¶
ValueError的子类。当从芯片 ID 寄存器读取的值不在valid_id列表中时,由APDS9960构造函数引发。
- exception apds9960.ADPS9960InvalidMode(mode: int)¶
ValueError的子类。当mode参数超出APDS9960_MODE_POWER..\APDS9960_MODE_ALL范围时,由APDS9960.setMode()引发。
常量¶
I2C 地址与设备 ID¶
手势调优¶
功能模式¶
这些值会传递给 APDS9960.setMode()。
- apds9960.APDS9960_MODE_ALL: int¶
哨兵值(
7),告知APDS9960.setMode()一次性启用或禁用 ENABLE 寄存器中的每一位。
LED 驱动电流¶
接近增益(PGAIN)¶
环境光增益(AGAIN)¶
手势增益(GGAIN)¶
LED 提升¶
- apds9960.APDS9960_LED_BOOST_300: int¶
300% LED 提升(
3)。由APDS9960.enableGestureSensor()自动应用。
手势等待时间¶
手势方向¶
这些值由 APDS9960.readGesture() 返回。
手势状态¶
通过手势状态机报告的内部状态值。