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