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() 回傳。
手勢狀態¶
透過手勢狀態機回報的內部狀態值。