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) ที่ใช้ภายในเพื่อแทนค่า "สถานะใดก็ได้"