apds9960 --- ไดรเวอร์เซนเซอร์ตรวจจับระยะใกล้ ท่าทาง และสี

โมดูลนี้จัดเตรียมไดรเวอร์สำหรับเซนเซอร์ระยะใกล้แบบดิจิทัล แสงแวดล้อม สี RGB และท่าทาง Broadcom/Avago APDS9960 ผ่าน I2C ไดรเวอร์เปิดเผยการควบคุมเปิด/ปิดแต่ละฟีเจอร์ การอ่านช่องสัญญาณดิบ (clear, R, G, B, proximity) และสเตตแมชชีนถอดรหัสท่าทางซอฟต์แวร์ที่จำแนกการปัดขึ้น/ลง/ซ้าย/ขวา และท่าทาง near/far จาก FIFO 4-photodiode บนชิป

ตัวอย่างการใช้งาน:

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 ที่กำหนดค่าไว้แล้วสำหรับสื่อสารกับเซนเซอร์ คลาสพื้นฐานออก read_byte_data, write_byte_data และ read_i2c_block_data แบบ SMBus สำหรับ machine.I2C ของ MicroPython ให้ใช้ uAPDS9960 แทน

  • address คือที่อยู่ I2C 7 บิตของอุปกรณ์ ค่าเริ่มต้นคือ APDS9960_I2C_ADDR (0x39)

  • valid_id คือรายการค่าที่ยอมรับได้ซึ่งส่งคืนโดยรีจิสเตอร์ ID ของชิป ค่าเริ่มต้นคือ APDS9960_DEV_ID

คอนสตรักเตอร์อ่าน ID อุปกรณ์และเกิดข้อยกเว้น ADPS9960InvalidDevId หากไม่อยู่ใน valid_id จากนั้นจะปิดการใช้งานทุกฟีเจอร์ โปรแกรมค่า ATIME/WTIME/PPULSE เริ่มต้น และใช้ค่าเริ่มต้นสำหรับ LED drive, proximity gain, ALS gain, proximity thresholds, ambient-light thresholds, persistence และการกำหนดค่าเอนจิน gesture (entry/exit thresholds, GCONF1, gesture gain, gesture LED drive, gesture wait time, gesture offsets, GPULSE, GCONF3 และการเปิดใช้งาน gesture interrupt)

การควบคุมโหมดและพลังงาน

getMode() int

ส่งคืนค่าดิบของรีจิสเตอร์ ENABLE ซึ่งเข้ารหัสฟีเจอร์ที่เปิดใช้งานอยู่ในขณะนั้น (power, ALS, proximity, wait, ALS interrupt, proximity interrupt, gesture)

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

เปิดหรือปิดใช้งานฟีเจอร์แต่ละอย่างในรีจิสเตอร์ ENABLE mode ต้องเป็นหนึ่งในค่า APDS9960_MODE_* (APDS9960_MODE_POWER ..\ APDS9960_MODE_ALL) เมื่อ mode เป็น APDS9960_MODE_ALL บิตทั้งหมดจะถูกเปิดหรือปิดพร้อมกัน เกิดข้อยกเว้น ADPS9960InvalidMode สำหรับค่าที่อยู่นอกช่วง

enablePower() None

เปิดใช้งาน APDS9960 (ตั้งบิต PON ใน ENABLE)

disablePower() None

ปิดใช้งาน APDS9960 (ล้างบิต PON ใน ENABLE)

เซนเซอร์แสงแวดล้อม / RGB

enableLightSensor(interrupts: bool = True) None

คืนค่า ALS gain เริ่มต้น กำหนดค่าบิตเปิดใช้งาน ALS interrupt เปิดอุปกรณ์ และเปิดใช้งานเอนจินแสงแวดล้อม/สี

disableLightSensor() None

ปิดใช้งาน ALS interrupt และหยุดเอนจินแสงแวดล้อม/สี

readAmbientLight() int

อ่านระดับแสงแวดล้อมช่องสัญญาณ clear เป็นค่า 16 บิตไม่มีเครื่องหมาย

readRedLight() int

อ่านระดับช่องสัญญาณสีแดงเป็นค่า 16 บิตไม่มีเครื่องหมาย

readGreenLight() int

อ่านระดับช่องสัญญาณสีเขียวเป็นค่า 16 บิตไม่มีเครื่องหมาย

readBlueLight() int

อ่านระดับช่องสัญญาณสีน้ำเงินเป็นค่า 16 บิตไม่มีเครื่องหมาย

เซนเซอร์ตรวจจับระยะใกล้

enableProximitySensor(interrupts: bool = True) None

คืนค่า proximity gain เริ่มต้นและ LED drive กำหนดค่าบิตเปิดใช้งาน proximity interrupt เปิดอุปกรณ์ และเปิดใช้งานเอนจิน proximity

disableProximitySensor() None

ปิดใช้งาน proximity interrupt และหยุดเอนจิน proximity

readProximity() int

อ่านระดับ proximity เป็นค่า 8 บิตไม่มีเครื่องหมาย

เอนจินท่าทาง

enableGestureSensor(interrupts: bool = True) None

รีเซ็ตสถานะท่าทาง ตั้งค่า WTIME และจำนวนพัลส์ท่าทาง เพิ่ม LED เป็น 300% กำหนดค่าบิตเปิดใช้งาน gesture interrupt เข้าสู่สเตตแมชชีน gesture เปิดอุปกรณ์ และเปิดใช้งานโหมด wait, proximity และ gesture

disableGestureSensor() None

รีเซ็ตสถานะท่าทาง ปิดใช้งาน gesture interrupt และสเตตแมชชีน และหยุดเอนจิน gesture

isGestureAvailable() bool

ส่งคืน True หากบิต GVALID ของรีจิสเตอร์สถานะ gesture ถูกตั้งค่า ซึ่งบ่งชี้ว่าข้อมูล FIFO ของ gesture พร้อมให้อ่าน

readGesture() int

ดึงข้อมูลจาก gesture FIFO เรียกใช้ตัวถอดรหัส gesture บนบอร์ด และส่งคืนค่าคงที่ทิศทาง APDS9960_DIR_* ตัวใดตัวหนึ่ง ส่งคืน APDS9960_DIR_NONE หากเอนจินไม่ทำงาน ไม่มีข้อมูลที่ถูกต้อง หรือข้อมูลไม่สามารถระบุเป็นท่าทางที่รู้จักได้

resetGestureParameters() None

ล้างบัฟเฟอร์ gesture FIFO ภายใน เดลต้า ตัวนับ ตัวนับ near/far สถานะ และการเคลื่อนไหวที่ถอดรหัสล่าสุด

processGestureData() bool

ประมวลผลตัวอย่าง FIFO แบบ U/D/L/R ดิบที่บัฟเฟอร์ไว้ในขณะนั้นเพื่ออัปเดตเดลต้า U/D และ L/R และตัวนับ near/far ส่งคืน True หากตรวจพบเหตุการณ์ near หรือ far ส่งคืน False ในกรณีอื่น

decodeGesture() bool

แปลงจำนวน U/D และ L/R ปัจจุบันและเดลต้าที่สะสมไว้เป็นทิศทางที่เก็บไว้ในฟิลด์ gesture_motion_ ภายใน ส่งคืน True เมื่อรู้จักทิศทาง ส่งคืน False ในกรณีอื่น

ค่าขีดแบ่ง proximity

getProxIntLowThresh() int

ส่งคืนค่าขีดแบ่ง proximity interrupt ต่ำ (รีจิสเตอร์ PILT)

setProxIntLowThresh(threshold: int) None

ตั้งค่าขีดแบ่ง proximity interrupt ต่ำ

getProxIntHighThresh() int

ส่งคืนค่าขีดแบ่ง proximity interrupt สูง (รีจิสเตอร์ PIHT)

setProxIntHighThresh(threshold: int) None

ตั้งค่าขีดแบ่ง proximity interrupt สูง

getProximityIntLowThreshold() int

ชื่อเล่นสำหรับ getProxIntLowThresh()

setProximityIntLowThreshold(threshold: int) None

ชื่อเล่นสำหรับ setProxIntLowThresh()

getProximityIntHighThreshold() int

ชื่อเล่นสำหรับ getProxIntHighThresh()

setProximityIntHighThreshold(threshold: int) None

ชื่อเล่นสำหรับ setProxIntHighThresh()

LED drive, gain และ boost

getLEDDrive() int

ส่งคืนความแรงของ LED drive ที่ใช้สำหรับ proximity และ ALS เข้ารหัสเป็นหนึ่งในค่า APDS9960_LED_DRIVE_* (0 = 100 mA, 1 = 50 mA, 2 = 25 mA, 3 = 12.5 mA)

setLEDDrive(drive: int) None

ตั้งค่าความแรงของ LED drive ที่ใช้สำหรับ proximity และ ALS drive เป็นหนึ่งในค่า APDS9960_LED_DRIVE_*

getProximityGain() int

ส่งคืน proximity-receiver gain เข้ารหัสเป็นหนึ่งในค่า APDS9960_PGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x)

setProximityGain(drive: int) None

ตั้งค่า proximity-receiver gain drive เป็นหนึ่งในค่า APDS9960_PGAIN_*

getAmbientLightGain() int

ส่งคืน ambient-light-sensor gain เข้ารหัสเป็นหนึ่งในค่า APDS9960_AGAIN_* (0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x)

setAmbientLightGain(drive: int) None

ตั้งค่า ambient-light-sensor gain drive เป็นหนึ่งในค่า APDS9960_AGAIN_*

getLEDBoost() int

ส่งคืน LED current boost เข้ารหัสเป็นหนึ่งในค่า APDS9960_LED_BOOST_* (0 = 100%, 1 = 150%, 2 = 200%, 3 = 300%)

setLEDBoost(boost: int) None

ตั้งค่า LED current boost boost เป็นหนึ่งในค่า APDS9960_LED_BOOST_*

การชดเชย proximity gain และมาสก์ photodiode

getProxGainCompEnable() bool

ส่งคืน True หากเปิดใช้งานการชดเชย proximity gain

setProxGainCompEnable(enable: bool) None

เปิดหรือปิดใช้งานการชดเชย proximity gain

getProxPhotoMask() int

ส่งคืนมาสก์ 4 บิตของ proximity photodiode ที่ถูกปิดใช้งาน บิตแมปเป็น 3=UP, 2=DOWN, 1=LEFT, 0=RIGHT 1 ปิดใช้งาน photodiode และ 0 เปิดใช้งาน

setProxPhotoMask(mask: int) None

ตั้งค่ามาสก์ 4 บิตของ proximity photodiode ที่ถูกปิดใช้งาน (ดูการเข้ารหัสด้านบน)

การกำหนดค่าท่าทาง

getGestureEnterThresh() int

ส่งคืนค่าขีดแบ่ง proximity ที่จำเป็นสำหรับเข้าสู่โหมด gesture

setGestureEnterThresh(threshold: int) None

ตั้งค่าขีดแบ่ง proximity ที่จำเป็นสำหรับเข้าสู่โหมด gesture

getGestureExitThresh() int

ส่งคืนค่าขีดแบ่ง proximity ที่จำเป็นสำหรับออกจากโหมด gesture

setGestureExitThresh(threshold: int) None

ตั้งค่าขีดแบ่ง proximity ที่จำเป็นสำหรับออกจากโหมด gesture

getGestureGain() int

ส่งคืน photodiode gain ที่ใช้ในโหมด gesture เข้ารหัสเป็นหนึ่งในค่า APDS9960_GGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x)

setGestureGain(gain: int) None

ตั้งค่า photodiode gain ที่ใช้ในโหมด gesture

getGestureLEDDrive() int

ส่งคืน LED drive current ที่ใช้ในโหมด gesture เข้ารหัสเป็นหนึ่งในค่า APDS9960_LED_DRIVE_*

setGestureLEDDrive(drive: int) None

ตั้งค่า LED drive current ที่ใช้ในโหมด gesture

getGestureWaitTime() int

ส่งคืนเวลารอ low-power ระหว่างการตรวจจับท่าทาง เข้ารหัสเป็นหนึ่งในค่า APDS9960_GWTIME_* (0 = 0 ms .. 7 = 39.2 ms)

setGestureWaitTime(time: int) None

ตั้งค่าเวลารอ low-power ระหว่างการตรวจจับท่าทาง

getGestureMode() bool

ส่งคืน True หากสเตตแมชชีน gesture กำลังทำงานอยู่

setGestureMode(enable: bool) None

เข้าหรือออกจากสเตตแมชชีน gesture

ค่าขีดแบ่ง ambient-light interrupt

getLightIntLowThreshold() int

ส่งคืนค่าขีดแบ่ง 16 บิตต่ำที่ใช้สำหรับ ambient-light interrupt

setLightIntLowThreshold(threshold: int) None

ตั้งค่าขีดแบ่ง 16 บิตต่ำที่ใช้สำหรับ ambient-light interrupt

getLightIntHighThreshold() int

ส่งคืนค่าขีดแบ่ง 16 บิตสูงที่ใช้สำหรับ ambient-light interrupt

setLightIntHighThreshold(threshold: int) None

ตั้งค่าขีดแบ่ง 16 บิตสูงที่ใช้สำหรับ ambient-light interrupt

การเปิดใช้งานและการล้าง interrupt

getAmbientLightIntEnable() bool

ส่งคืน True หากเปิดใช้งาน ambient-light interrupts

setAmbientLightIntEnable(enable: bool) None

เปิดหรือปิดใช้งาน ambient-light interrupts

getProximityIntEnable() bool

ส่งคืน True หากเปิดใช้งาน proximity interrupts

setProximityIntEnable(enable: bool) None

เปิดหรือปิดใช้งาน proximity interrupts

getGestureIntEnable() bool

ส่งคืน True หากเปิดใช้งาน gesture interrupts

setGestureIntEnable(enable: bool) None

เปิดหรือปิดใช้งาน gesture interrupts

clearAmbientLightInt() None

ล้าง ambient-light interrupt ที่ค้างอยู่

clearProximityInt() None

ล้าง proximity interrupt ที่ค้างอยู่

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

คลาสย่อยของ MicroPython สำหรับ APDS9960 มี API สาธารณะเหมือนกันทุกประการ แต่การเข้าถึงรีจิสเตอร์พื้นฐานใช้การเรียก readfrom_mem และ writeto_mem แบบ machine.I2C แทนเมธอดแบบ SMBus นี่คือคลาสที่ควรใช้บน OpenMV / MicroPython

ข้อยกเว้น

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

คลาสย่อยของ ValueError เกิดขึ้นโดยคอนสตรักเตอร์ APDS9960 เมื่อค่าที่อ่านจากรีจิสเตอร์ ID ของชิปไม่มีอยู่ในรายการ valid_id

exception apds9960.ADPS9960InvalidMode(mode: int)

คลาสย่อยของ ValueError เกิดขึ้นโดย APDS9960.setMode() เมื่ออาร์กิวเมนต์ mode อยู่นอกช่วง APDS9960_MODE_POWER..\ APDS9960_MODE_ALL

ค่าคงที่

ที่อยู่ I2C และ device ID

apds9960.APDS9960_I2C_ADDR: int

ที่อยู่ I2C 7 บิตเริ่มต้นของ APDS9960 (0x39)

apds9960.APDS9960_DEV_ID: list

รายการเริ่มต้นของค่ารีจิสเตอร์ device-ID ที่ถูกต้อง ([0xAB, 0x9C, 0xA8, -0x55])

การปรับแต่ง gesture

apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int

ขนาดของสัญญาณตัวอย่างขั้นต่ำ (ต่อ photodiode) ที่ใช้โดยตัวถอดรหัส gesture เมื่อค้นหาตัวอย่าง FIFO แรก/สุดท้ายในช่วง

apds9960.APDS9960_GESTURE_SENSITIVITY_1: int

ค่าขีดแบ่งของเดลต้า U/D และ L/R สะสมที่ตัวถอดรหัสยืนยันทิศทางการปัด

apds9960.APDS9960_GESTURE_SENSITIVITY_2: int

ค่าขีดแบ่งของเดลต้า U/D และ L/R ต่อขั้นตอนที่ตัวถอดรหัสพิจารณาว่าตัวอย่างเป็นตัวเลือก near/far แทนการปัด

apds9960.APDS9960_TIME_FIFO_PAUSE: int

มิลลิวินาทีที่ลูป gesture หยุดระหว่างการดึงข้อมูลจาก FIFO

โหมดฟีเจอร์

ค่าเหล่านี้จะถูกส่งไปยัง APDS9960.setMode()

apds9960.APDS9960_MODE_POWER: int

บิต Power-on (0)

apds9960.APDS9960_MODE_AMBIENT_LIGHT: int

บิตเปิดใช้งานเอนจิน Ambient-light/color (1)

apds9960.APDS9960_MODE_PROXIMITY: int

บิตเปิดใช้งานเอนจิน Proximity (2)

apds9960.APDS9960_MODE_WAIT: int

บิตเปิดใช้งาน Wait-state (3)

apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int

บิตเปิดใช้งาน Ambient-light interrupt (4)

apds9960.APDS9960_MODE_PROXIMITY_INT: int

บิตเปิดใช้งาน Proximity interrupt (5)

apds9960.APDS9960_MODE_GESTURE: int

บิตเปิดใช้งานเอนจิน Gesture (6)

apds9960.APDS9960_MODE_ALL: int

ค่า Sentinel (7) ที่บอก APDS9960.setMode() ให้เปิดหรือปิดทุกบิตในรีจิสเตอร์ ENABLE พร้อมกัน

LED drive currents

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) ค่าเริ่มต้นที่ใช้โดยคอนสตรักเตอร์

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) ค่าเริ่มต้นที่ใช้โดยคอนสตรักเตอร์

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) ค่าเริ่มต้นที่ใช้โดยคอนสตรักเตอร์

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) ใช้งานโดยอัตโนมัติโดย APDS9960.enableGestureSensor()

เวลารอ gesture

apds9960.APDS9960_GWTIME_0MS: int

0 ms (0)

apds9960.APDS9960_GWTIME_2_8MS: int

2.8 ms (1) ค่าเริ่มต้นที่ใช้โดยคอนสตรักเตอร์

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)

ทิศทาง gesture

ค่าเหล่านี้จะถูกส่งคืนโดย APDS9960.readGesture()

apds9960.APDS9960_DIR_NONE: int

ไม่มีการตรวจจับ gesture (0)

apds9960.APDS9960_DIR_LEFT: int

ปัดซ้าย (1)

apds9960.APDS9960_DIR_RIGHT: int

ปัดขวา (2)

apds9960.APDS9960_DIR_UP: int

ปัดขึ้น (3)

apds9960.APDS9960_DIR_DOWN: int

ปัดลง (4)

apds9960.APDS9960_DIR_NEAR: int

เหตุการณ์ Near (5)

apds9960.APDS9960_DIR_FAR: int

เหตุการณ์ Far (6)

apds9960.APDS9960_DIR_ALL: int

ค่า Sentinel (7) ที่ใช้ภายในเพื่อแทนค่า "ทิศทางใดก็ได้"

สถานะ gesture

ค่าสถานะภายในที่รายงานผ่านสเตตแมชชีน gesture

apds9960.APDS9960_STATE_NA: int

ไม่มีสถานะ (0)

apds9960.APDS9960_STATE_NEAR: int

ตรวจพบสถานะ Near (1)

apds9960.APDS9960_STATE_FAR: int

ตรวจพบสถานะ Far (2)

apds9960.APDS9960_STATE_ALL: int

ค่า Sentinel (3) ที่ใช้ภายในเพื่อแทนค่า "สถานะใดก็ได้"