apds9960 --- Driver Cảm biến Khoảng cách, Cử chỉ và Màu sắc#

Mô-đun này cung cấp driver cho cảm biến kỹ thuật số APDS9960 của Broadcom/Avago, hỗ trợ đo khoảng cách, ánh sáng môi trường, màu sắc RGB và cử chỉ qua I2C. Driver này cung cấp các điều khiển bật/tắt từng tính năng riêng lẻ, đọc kênh thô (clear, R, G, B, proximity) và máy trạng thái giải mã cử chỉ phần mềm phân loại vuốt lên/xuống/trái/phải và cử chỉ gần/xa từ FIFO 4 photodiode trên chip.

Ví dụ sử dụng:

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)

Lớp#

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

Tạo một thể hiện driver APDS9960.

  • bus là một đối tượng bus I2C đã được cấu hình dùng để giao tiếp với cảm biến. Lớp cơ sở thực hiện các lệnh gọi SMBus read_byte_data, write_byte_dataread_i2c_block_data; đối với machine.I2C của MicroPython hãy dùng uAPDS9960 thay thế.

  • address là địa chỉ I2C 7-bit của thiết bị. Mặc định là APDS9960_I2C_ADDR (0x39).

  • valid_id là danh sách các giá trị chấp nhận được trả về bởi thanh ghi ID của chip. Mặc định là APDS9960_DEV_ID.

Hàm tạo đọc ID thiết bị và gây ra ADPS9960InvalidDevId nếu ID không nằm trong valid_id. Sau đó nó vô hiệu hóa mọi tính năng, lập trình các giá trị ATIME/WTIME/PPULSE mặc định, và áp dụng cấu hình mặc định về LED drive, proximity gain, ALS gain, ngưỡng proximity, ngưỡng ánh sáng môi trường, persistence và cấu hình gesture engine (ngưỡng vào/ra, GCONF1, gesture gain, gesture LED drive, gesture wait time, gesture offsets, GPULSE, GCONF3, và bật ngắt gesture).

Điều khiển chế độ và nguồn điện#

getMode() int#

Trả về giá trị thô của thanh ghi ENABLE, mã hóa các tính năng hiện đang được bật (nguồn, ALS, proximity, wait, ngắt ALS, ngắt proximity, gesture).

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

Bật hoặc tắt một tính năng riêng lẻ trong thanh ghi ENABLE. mode phải là một trong các giá trị APDS9960_MODE_* (APDS9960_MODE_POWER ..\ APDS9960_MODE_ALL). Khi modeAPDS9960_MODE_ALL, tất cả các bit được bật hoặc tắt cùng một lúc. Gây ra ADPS9960InvalidMode cho các giá trị ngoài phạm vi.

enablePower() None#

Bật nguồn APDS9960 (đặt bit PON trong ENABLE).

disablePower() None#

Tắt nguồn APDS9960 (xóa bit PON trong ENABLE).

Cảm biến ánh sáng môi trường / RGB#

enableLightSensor(interrupts: bool = True) None#

Khôi phục ALS gain mặc định, cấu hình bit bật ngắt ALS, bật nguồn thiết bị và kích hoạt engine ánh sáng môi trường/màu sắc.

disableLightSensor() None#

Vô hiệu hóa ngắt ALS và dừng engine ánh sáng môi trường/màu sắc.

readAmbientLight() int#

Đọc mức ánh sáng môi trường kênh clear dưới dạng giá trị không dấu 16-bit.

readRedLight() int#

Đọc mức kênh đỏ dưới dạng giá trị không dấu 16-bit.

readGreenLight() int#

Đọc mức kênh xanh lá dưới dạng giá trị không dấu 16-bit.

readBlueLight() int#

Đọc mức kênh xanh dương dưới dạng giá trị không dấu 16-bit.

Cảm biến khoảng cách#

enableProximitySensor(interrupts: bool = True) None#

Khôi phục proximity gain và LED drive mặc định, cấu hình bit bật ngắt proximity, bật nguồn thiết bị và kích hoạt engine proximity.

disableProximitySensor() None#

Vô hiệu hóa ngắt proximity và dừng engine proximity.

readProximity() int#

Đọc mức proximity dưới dạng giá trị không dấu 8-bit.

Engine cử chỉ#

enableGestureSensor(interrupts: bool = True) None#

Đặt lại trạng thái cử chỉ, đặt WTIME và số xung gesture, tăng LED lên 300%, cấu hình bit bật ngắt gesture, vào máy trạng thái gesture, bật nguồn thiết bị và bật các chế độ wait, proximity và gesture.

disableGestureSensor() None#

Đặt lại trạng thái cử chỉ, vô hiệu hóa ngắt gesture và máy trạng thái, và dừng engine gesture.

isGestureAvailable() bool#

Trả về True nếu bit GVALID của thanh ghi trạng thái gesture được đặt, biểu thị rằng dữ liệu FIFO gesture đã sẵn sàng để đọc.

readGesture() int#

Xả FIFO gesture, chạy bộ giải mã gesture trên bo mạch và trả về một trong các hằng số hướng APDS9960_DIR_*. Trả về APDS9960_DIR_NONE nếu engine không chạy, không có dữ liệu hợp lệ, hoặc dữ liệu không phân giải thành cử chỉ được nhận dạng.

resetGestureParameters() None#

Xóa bộ đệm FIFO gesture nội bộ, các delta, số đếm, bộ đếm gần/xa, trạng thái và chuyển động được giải mã lần cuối.

processGestureData() bool#

Xử lý các mẫu FIFO U/D/L/R thô hiện đang được đệm để cập nhật các delta U/D và L/R cùng các bộ đếm gần/xa. Trả về True nếu sự kiện gần hoặc xa được phát hiện, False nếu không.

decodeGesture() bool#

Chuyển đổi số đếm U/D và L/R hiện tại cùng các delta tích lũy thành một hướng được lưu trong trường gesture_motion_ nội bộ. Trả về True khi một hướng được nhận dạng, False nếu không.

Ngưỡng proximity#

getProxIntLowThresh() int#

Trả về ngưỡng ngắt proximity thấp (thanh ghi PILT).

setProxIntLowThresh(threshold: int) None#

Đặt ngưỡng ngắt proximity thấp.

getProxIntHighThresh() int#

Trả về ngưỡng ngắt proximity cao (thanh ghi PIHT).

setProxIntHighThresh(threshold: int) None#

Đặt ngưỡng ngắt proximity cao.

getProximityIntLowThreshold() int#

Bí danh cho getProxIntLowThresh().

setProximityIntLowThreshold(threshold: int) None#

Bí danh cho setProxIntLowThresh().

getProximityIntHighThreshold() int#

Bí danh cho getProxIntHighThresh().

setProximityIntHighThreshold(threshold: int) None#

Bí danh cho setProxIntHighThresh().

LED drive, gain và boost#

getLEDDrive() int#

Trả về cường độ LED drive dùng cho proximity và ALS. Được mã hóa là một trong các giá trị APDS9960_LED_DRIVE_* (0 = 100 mA, 1 = 50 mA, 2 = 25 mA, 3 = 12.5 mA).

setLEDDrive(drive: int) None#

Đặt cường độ LED drive dùng cho proximity và ALS. drive là một trong các giá trị APDS9960_LED_DRIVE_*.

getProximityGain() int#

Trả về độ khuếch đại bộ thu proximity. Được mã hóa là một trong các giá trị APDS9960_PGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setProximityGain(drive: int) None#

Đặt độ khuếch đại bộ thu proximity. drive là một trong các giá trị APDS9960_PGAIN_*.

getAmbientLightGain() int#

Trả về độ khuếch đại cảm biến ánh sáng môi trường. Được mã hóa là một trong các giá trị APDS9960_AGAIN_* (0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x).

setAmbientLightGain(drive: int) None#

Đặt độ khuếch đại cảm biến ánh sáng môi trường. drive là một trong các giá trị APDS9960_AGAIN_*.

getLEDBoost() int#

Trả về hệ số tăng cường dòng LED. Được mã hóa là một trong các giá trị APDS9960_LED_BOOST_* (0 = 100%, 1 = 150%, 2 = 200%, 3 = 300%).

setLEDBoost(boost: int) None#

Đặt hệ số tăng cường dòng LED. boost là một trong các giá trị APDS9960_LED_BOOST_*.

Bù gain proximity và mặt nạ photodiode#

getProxGainCompEnable() bool#

Trả về True nếu bù gain proximity được bật.

setProxGainCompEnable(enable: bool) None#

Bật hoặc tắt bù gain proximity.

getProxPhotoMask() int#

Trả về mặt nạ 4-bit của các photodiode proximity bị vô hiệu hóa. Các bit ánh xạ như 3=UP, 2=DOWN, 1=LEFT, 0=RIGHT; 1 vô hiệu hóa một photodiode và 0 bật nó.

setProxPhotoMask(mask: int) None#

Đặt mặt nạ 4-bit của các photodiode proximity bị vô hiệu hóa (xem mã hóa ở trên).

Cấu hình cử chỉ#

getGestureEnterThresh() int#

Trả về ngưỡng proximity cần thiết để vào chế độ gesture.

setGestureEnterThresh(threshold: int) None#

Đặt ngưỡng proximity cần thiết để vào chế độ gesture.

getGestureExitThresh() int#

Trả về ngưỡng proximity cần thiết để thoát khỏi chế độ gesture.

setGestureExitThresh(threshold: int) None#

Đặt ngưỡng proximity cần thiết để thoát khỏi chế độ gesture.

getGestureGain() int#

Trả về độ khuếch đại photodiode được sử dụng trong chế độ gesture. Được mã hóa là một trong các giá trị APDS9960_GGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setGestureGain(gain: int) None#

Đặt độ khuếch đại photodiode được sử dụng trong chế độ gesture.

getGestureLEDDrive() int#

Trả về dòng LED drive được sử dụng trong chế độ gesture. Được mã hóa là một trong các giá trị APDS9960_LED_DRIVE_*.

setGestureLEDDrive(drive: int) None#

Đặt dòng LED drive được sử dụng trong chế độ gesture.

getGestureWaitTime() int#

Trả về thời gian chờ tiết kiệm năng lượng giữa các lần phát hiện gesture. Được mã hóa là một trong các giá trị APDS9960_GWTIME_* (0 = 0 ms .. 7 = 39.2 ms).

setGestureWaitTime(time: int) None#

Đặt thời gian chờ tiết kiệm năng lượng giữa các lần phát hiện gesture.

getGestureMode() bool#

Trả về True nếu máy trạng thái gesture hiện đang chạy.

setGestureMode(enable: bool) None#

Vào hoặc thoát khỏi máy trạng thái gesture.

Ngưỡng ngắt ánh sáng môi trường#

getLightIntLowThreshold() int#

Trả về ngưỡng thấp 16-bit được dùng cho ngắt ánh sáng môi trường.

setLightIntLowThreshold(threshold: int) None#

Đặt ngưỡng thấp 16-bit được dùng cho ngắt ánh sáng môi trường.

getLightIntHighThreshold() int#

Trả về ngưỡng cao 16-bit được dùng cho ngắt ánh sáng môi trường.

setLightIntHighThreshold(threshold: int) None#

Đặt ngưỡng cao 16-bit được dùng cho ngắt ánh sáng môi trường.

Bật ngắt và xóa ngắt#

getAmbientLightIntEnable() bool#

Trả về True nếu các ngắt ánh sáng môi trường được bật.

setAmbientLightIntEnable(enable: bool) None#

Bật hoặc tắt các ngắt ánh sáng môi trường.

getProximityIntEnable() bool#

Trả về True nếu các ngắt proximity được bật.

setProximityIntEnable(enable: bool) None#

Bật hoặc tắt các ngắt proximity.

getGestureIntEnable() bool#

Trả về True nếu các ngắt gesture được bật.

setGestureIntEnable(enable: bool) None#

Bật hoặc tắt các ngắt gesture.

clearAmbientLightInt() None#

Xóa một ngắt ánh sáng môi trường đang chờ xử lý.

clearProximityInt() None#

Xóa một ngắt proximity đang chờ xử lý.

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

Lớp con MicroPython của APDS9960. API công khai giống hệt, nhưng việc truy cập thanh ghi bên dưới sử dụng các lệnh gọi readfrom_memwriteto_mem theo kiểu machine.I2C thay vì các phương thức theo kiểu SMBus. Đây là lớp để sử dụng trên các thiết bị OpenMV / MicroPython.

Ngoại lệ#

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

Lớp con của ValueError. Được gây ra bởi hàm tạo APDS9960 khi giá trị đọc từ thanh ghi ID của chip không có trong danh sách valid_id.

exception apds9960.ADPS9960InvalidMode(mode: int)#

Lớp con của ValueError. Được gây ra bởi APDS9960.setMode() khi đối số mode nằm ngoài phạm vi APDS9960_MODE_POWER..\ APDS9960_MODE_ALL.

Hằng số#

Địa chỉ I2C và ID thiết bị#

apds9960.APDS9960_I2C_ADDR: int#

Địa chỉ I2C 7-bit mặc định của APDS9960 (0x39).

apds9960.APDS9960_DEV_ID: list#

Danh sách mặc định các giá trị thanh ghi ID thiết bị hợp lệ ([0xAB, 0x9C, 0xA8, -0x55]).

Tinh chỉnh cử chỉ#

apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int#

Độ lớn mẫu tối thiểu (mỗi photodiode) được bộ giải mã gesture sử dụng khi tìm kiếm các mẫu FIFO đầu tiên/cuối cùng trong phạm vi.

apds9960.APDS9960_GESTURE_SENSITIVITY_1: int#

Ngưỡng trên các delta U/D và L/R tích lũy mà tại đó bộ giải mã xác định hướng vuốt.

apds9960.APDS9960_GESTURE_SENSITIVITY_2: int#

Ngưỡng trên các delta U/D và L/R theo từng bước dưới đó bộ giải mã coi mẫu là ứng viên gần/xa thay vì là vuốt.

apds9960.APDS9960_TIME_FIFO_PAUSE: int#

Số mili giây vòng lặp gesture ngủ giữa các lần xả FIFO.

Các chế độ tính năng#

Các giá trị này được truyền cho APDS9960.setMode().

apds9960.APDS9960_MODE_POWER: int#

Bit bật nguồn (0).

apds9960.APDS9960_MODE_AMBIENT_LIGHT: int#

Bit bật engine ánh sáng môi trường/màu sắc (1).

apds9960.APDS9960_MODE_PROXIMITY: int#

Bit bật engine proximity (2).

apds9960.APDS9960_MODE_WAIT: int#

Bit bật trạng thái chờ (3).

apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int#

Bit bật ngắt ánh sáng môi trường (4).

apds9960.APDS9960_MODE_PROXIMITY_INT: int#

Bit bật ngắt proximity (5).

apds9960.APDS9960_MODE_GESTURE: int#

Bit bật engine gesture (6).

apds9960.APDS9960_MODE_ALL: int#

Giá trị sentinel (7) yêu cầu APDS9960.setMode() bật hoặc tắt tất cả các bit trong thanh ghi ENABLE cùng một lúc.

Dòng LED drive#

apds9960.APDS9960_LED_DRIVE_100MA: int#

LED drive 100 mA (0).

apds9960.APDS9960_LED_DRIVE_50MA: int#

LED drive 50 mA (1).

apds9960.APDS9960_LED_DRIVE_25MA: int#

LED drive 25 mA (2).

apds9960.APDS9960_LED_DRIVE_12_5MA: int#

LED drive 12.5 mA (3).

Proximity gain (PGAIN)#

apds9960.APDS9960_PGAIN_1X: int#

Proximity gain 1x (0).

apds9960.APDS9960_PGAIN_2X: int#

Proximity gain 2x (1).

apds9960.APDS9960_PGAIN_4X: int#

Proximity gain 4x (2). Mặc định được áp dụng bởi hàm tạo.

apds9960.APDS9960_PGAIN_8X: int#

Proximity gain 8x (3).

Ambient-light gain (AGAIN)#

apds9960.APDS9960_AGAIN_1X: int#

ALS gain 1x (0).

apds9960.APDS9960_AGAIN_4X: int#

ALS gain 4x (1). Mặc định được áp dụng bởi hàm tạo.

apds9960.APDS9960_AGAIN_16X: int#

ALS gain 16x (2).

apds9960.APDS9960_AGAIN_64X: int#

ALS gain 64x (3).

Gesture gain (GGAIN)#

apds9960.APDS9960_GGAIN_1X: int#

Gesture gain 1x (0).

apds9960.APDS9960_GGAIN_2X: int#

Gesture gain 2x (1).

apds9960.APDS9960_GGAIN_4X: int#

Gesture gain 4x (2). Mặc định được áp dụng bởi hàm tạo.

apds9960.APDS9960_GGAIN_8X: int#

Gesture gain 8x (3).

LED boost#

apds9960.APDS9960_LED_BOOST_100: int#

LED boost 100% (0).

apds9960.APDS9960_LED_BOOST_150: int#

LED boost 150% (1).

apds9960.APDS9960_LED_BOOST_200: int#

LED boost 200% (2).

apds9960.APDS9960_LED_BOOST_300: int#

LED boost 300% (3). Được áp dụng tự động bởi APDS9960.enableGestureSensor().

Thời gian chờ gesture#

apds9960.APDS9960_GWTIME_0MS: int#

0 ms (0).

apds9960.APDS9960_GWTIME_2_8MS: int#

2.8 ms (1). Mặc định được áp dụng bởi hàm tạo.

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

Hướng cử chỉ#

Các giá trị này được trả về bởi APDS9960.readGesture().

apds9960.APDS9960_DIR_NONE: int#

Không phát hiện cử chỉ (0).

apds9960.APDS9960_DIR_LEFT: int#

Vuốt sang trái (1).

apds9960.APDS9960_DIR_RIGHT: int#

Vuốt sang phải (2).

apds9960.APDS9960_DIR_UP: int#

Vuốt lên (3).

apds9960.APDS9960_DIR_DOWN: int#

Vuốt xuống (4).

apds9960.APDS9960_DIR_NEAR: int#

Sự kiện gần (5).

apds9960.APDS9960_DIR_FAR: int#

Sự kiện xa (6).

apds9960.APDS9960_DIR_ALL: int#

Giá trị sentinel (7) được sử dụng nội bộ để biểu thị "bất kỳ hướng nào".

Trạng thái cử chỉ#

Các giá trị trạng thái nội bộ được báo cáo qua máy trạng thái gesture.

apds9960.APDS9960_STATE_NA: int#

Không có trạng thái (0).

apds9960.APDS9960_STATE_NEAR: int#

Phát hiện trạng thái gần (1).

apds9960.APDS9960_STATE_FAR: int#

Phát hiện trạng thái xa (2).

apds9960.APDS9960_STATE_ALL: int#

Giá trị sentinel (3) được sử dụng nội bộ để biểu thị "bất kỳ trạng thái nào".