apds9960 — 근접, 제스처 및 색상 센서 드라이버

이 모듈은 I2C를 통해 Broadcom/Avago APDS9960 디지털 근접, 주변광, RGB 색상 및 제스처 센서를 위한 드라이버를 제공합니다. 이 드라이버는 기능별 활성화/비활성화 제어, 원시 채널 읽기(클리어, 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, 제스처 인터럽트 활성화)을 적용합니다.

모드 및 전원 제어

getMode() int

ENABLE 레지스터의 원시 값을 반환하며, 현재 어떤 기능(전원, ALS, 근접, 대기, ALS 인터럽트, 근접 인터럽트, 제스처)이 활성화되어 있는지를 인코딩합니다.

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

ENABLE 레지스터에서 개별 기능을 활성화하거나 비활성화합니다. modeAPDS9960_MODE_* 값(APDS9960_MODE_POWER ..\ APDS9960_MODE_ALL) 중 하나여야 합니다. modeAPDS9960_MODE_ALL인 경우 모든 비트가 한 번에 켜지거나 꺼집니다. 범위를 벗어난 값에 대해서는 ADPS9960InvalidMode를 발생시킵니다.

enablePower() None

APDS9960을 켭니다(ENABLE의 PON 비트를 설정합니다).

disablePower() None

APDS9960을 끕니다(ENABLE의 PON 비트를 지웁니다).

주변광 / RGB 센서

enableLightSensor(interrupts: bool = True) None

기본 ALS 게인을 복원하고, ALS 인터럽트 활성화 비트를 구성하며, 디바이스 전원을 켜고, 주변광/색상 엔진을 활성화합니다.

disableLightSensor() None

ALS 인터럽트를 비활성화하고 주변광/색상 엔진을 중지합니다.

readAmbientLight() int

클리어 채널 주변광 레벨을 16비트 부호 없는 값으로 읽습니다.

readRedLight() int

레드 채널 레벨을 16비트 부호 없는 값으로 읽습니다.

readGreenLight() int

그린 채널 레벨을 16비트 부호 없는 값으로 읽습니다.

readBlueLight() int

블루 채널 레벨을 16비트 부호 없는 값으로 읽습니다.

근접 센서

enableProximitySensor(interrupts: bool = True) None

기본 근접 게인과 LED 드라이브를 복원하고, 근접 인터럽트 활성화 비트를 구성하며, 디바이스 전원을 켜고, 근접 엔진을 활성화합니다.

disableProximitySensor() None

근접 인터럽트를 비활성화하고 근접 엔진을 중지합니다.

readProximity() int

근접 레벨을 8비트 부호 없는 값으로 읽습니다.

제스처 엔진

enableGestureSensor(interrupts: bool = True) None

제스처 상태를 재설정하고, WTIME과 제스처 펄스 카운트를 설정하며, LED를 300%로 부스트하고, 제스처 인터럽트 활성화 비트를 구성하며, 제스처 상태 머신에 진입하고, 디바이스 전원을 켜고, 대기, 근접 및 제스처 모드를 활성화합니다.

disableGestureSensor() None

제스처 상태를 재설정하고, 제스처 인터럽트와 상태 머신을 비활성화하며, 제스처 엔진을 중지합니다.

isGestureAvailable() bool

제스처 상태 레지스터의 GVALID 비트가 설정되어 제스처 FIFO 데이터를 읽을 준비가 되었음을 나타내면 True를 반환합니다.

readGesture() int

제스처 FIFO를 비우고, 온보드 제스처 디코더를 실행하며, APDS9960_DIR_* 방향 상수 중 하나를 반환합니다. 엔진이 실행 중이 아니거나, 유효한 데이터가 없거나, 데이터가 인식된 제스처로 해석되지 않은 경우 APDS9960_DIR_NONE을 반환합니다.

resetGestureParameters() None

내부 제스처 FIFO 버퍼, 델타, 카운트, 근접/원거리 카운터, 상태 및 마지막으로 디코딩된 동작을 지웁니다.

processGestureData() bool

현재 버퍼링된 원시 U/D/L/R FIFO 샘플을 처리하여 U/D 및 L/R 델타와 근접/원거리 카운터를 업데이트합니다. 근접 또는 원거리 이벤트가 감지되면 True를, 그렇지 않으면 False를 반환합니다.

decodeGesture() bool

현재 U/D 및 L/R 카운트와 누적된 델타를 내부 gesture_motion_ 필드에 저장되는 방향으로 변환합니다. 방향이 인식되면 True를, 그렇지 않으면 False를 반환합니다.

근접 임계값

getProxIntLowThresh() int

낮은 근접 인터럽트 임계값(PILT 레지스터)을 반환합니다.

setProxIntLowThresh(threshold: int) None

낮은 근접 인터럽트 임계값을 설정합니다.

getProxIntHighThresh() int

높은 근접 인터럽트 임계값(PIHT 레지스터)을 반환합니다.

setProxIntHighThresh(threshold: int) None

높은 근접 인터럽트 임계값을 설정합니다.

getProximityIntLowThreshold() int

getProxIntLowThresh()의 별칭입니다.

setProximityIntLowThreshold(threshold: int) None

setProxIntLowThresh()의 별칭입니다.

getProximityIntHighThreshold() int

getProxIntHighThresh()의 별칭입니다.

setProximityIntHighThreshold(threshold: int) None

setProxIntHighThresh()의 별칭입니다.

LED 드라이브, 게인 및 부스트

getLEDDrive() int

근접 및 ALS에 사용되는 LED 드라이브 강도를 반환합니다. APDS9960_LED_DRIVE_* 값(0 = 100 mA, 1 = 50 mA, 2 = 25 mA, 3 = 12.5 mA) 중 하나로 인코딩됩니다.

setLEDDrive(drive: int) None

근접 및 ALS에 사용되는 LED 드라이브 강도를 설정합니다. driveAPDS9960_LED_DRIVE_* 값 중 하나입니다.

getProximityGain() int

근접 수신기 게인을 반환합니다. APDS9960_PGAIN_* 값(0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x) 중 하나로 인코딩됩니다.

setProximityGain(drive: int) None

근접 수신기 게인을 설정합니다. driveAPDS9960_PGAIN_* 값 중 하나입니다.

getAmbientLightGain() int

주변광 센서 게인을 반환합니다. APDS9960_AGAIN_* 값(0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x) 중 하나로 인코딩됩니다.

setAmbientLightGain(drive: int) None

주변광 센서 게인을 설정합니다. driveAPDS9960_AGAIN_* 값 중 하나입니다.

getLEDBoost() int

LED 전류 부스트를 반환합니다. APDS9960_LED_BOOST_* 값(0 = 100%, 1 = 150%, 2 = 200%, 3 = 300%) 중 하나로 인코딩됩니다.

setLEDBoost(boost: int) None

LED 전류 부스트를 설정합니다. boostAPDS9960_LED_BOOST_* 값 중 하나입니다.

근접 게인 보정 및 포토다이오드 마스크

getProxGainCompEnable() bool

근접 게인 보정이 활성화되어 있으면 True를 반환합니다.

setProxGainCompEnable(enable: bool) None

근접 게인 보정을 활성화하거나 비활성화합니다.

getProxPhotoMask() int

비활성화된 근접 포토다이오드의 4비트 마스크를 반환합니다. 비트는 3=UP, 2=DOWN, 1=LEFT, 0=RIGHT로 매핑됩니다. 1은 포토다이오드를 비활성화하고 0은 활성화합니다.

setProxPhotoMask(mask: int) None

비활성화된 근접 포토다이오드의 4비트 마스크를 설정합니다(위의 인코딩 참조).

제스처 구성

getGestureEnterThresh() int

제스처 모드에 진입하는 데 필요한 근접 임계값을 반환합니다.

setGestureEnterThresh(threshold: int) None

제스처 모드에 진입하는 데 필요한 근접 임계값을 설정합니다.

getGestureExitThresh() int

제스처 모드에서 이탈하는 데 필요한 근접 임계값을 반환합니다.

setGestureExitThresh(threshold: int) None

제스처 모드에서 이탈하는 데 필요한 근접 임계값을 설정합니다.

getGestureGain() int

제스처 모드 동안 사용되는 포토다이오드 게인을 반환합니다. APDS9960_GGAIN_* 값(0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x) 중 하나로 인코딩됩니다.

setGestureGain(gain: int) None

제스처 모드 동안 사용되는 포토다이오드 게인을 설정합니다.

getGestureLEDDrive() int

제스처 모드 동안 사용되는 LED 드라이브 전류를 반환합니다. APDS9960_LED_DRIVE_* 값 중 하나로 인코딩됩니다.

setGestureLEDDrive(drive: int) None

제스처 모드 동안 사용되는 LED 드라이브 전류를 설정합니다.

getGestureWaitTime() int

제스처 감지 사이의 저전력 대기 시간을 반환합니다. APDS9960_GWTIME_* 값(0 = 0 ms .. 7 = 39.2 ms) 중 하나로 인코딩됩니다.

setGestureWaitTime(time: int) None

제스처 감지 사이의 저전력 대기 시간을 설정합니다.

getGestureMode() bool

제스처 상태 머신이 현재 실행 중이면 True를 반환합니다.

setGestureMode(enable: bool) None

제스처 상태 머신에 진입하거나 이탈합니다.

주변광 인터럽트 임계값

getLightIntLowThreshold() int

주변광 인터럽트에 사용되는 16비트 낮은 임계값을 반환합니다.

setLightIntLowThreshold(threshold: int) None

주변광 인터럽트에 사용되는 16비트 낮은 임계값을 설정합니다.

getLightIntHighThreshold() int

주변광 인터럽트에 사용되는 16비트 높은 임계값을 반환합니다.

setLightIntHighThreshold(threshold: int) None

주변광 인터럽트에 사용되는 16비트 높은 임계값을 설정합니다.

인터럽트 활성화 및 클리어

getAmbientLightIntEnable() bool

주변광 인터럽트가 활성화되어 있으면 True를 반환합니다.

setAmbientLightIntEnable(enable: bool) None

주변광 인터럽트를 활성화하거나 비활성화합니다.

getProximityIntEnable() bool

근접 인터럽트가 활성화되어 있으면 True를 반환합니다.

setProximityIntEnable(enable: bool) None

근접 인터럽트를 활성화하거나 비활성화합니다.

getGestureIntEnable() bool

제스처 인터럽트가 활성화되어 있으면 True를 반환합니다.

setGestureIntEnable(enable: bool) None

제스처 인터럽트를 활성화하거나 비활성화합니다.

clearAmbientLightInt() None

대기 중인 주변광 인터럽트를 지웁니다.

clearProximityInt() None

대기 중인 근접 인터럽트를 지웁니다.

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

APDS9960의 MicroPython 서브클래스입니다. 동일한 공개 API를 가지지만, 내부 레지스터 접근은 SMBus 스타일 메서드 대신 machine.I2C 스타일의 readfrom_memwriteto_mem 호출을 사용합니다. 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.APDS9960_I2C_ADDR: int

APDS9960의 기본 7비트 I2C 주소(0x39)입니다.

apds9960.APDS9960_DEV_ID: list

유효한 디바이스 ID 레지스터 값의 기본 목록([0xAB, 0x9C, 0xA8, -0x55])입니다.

제스처 튜닝

apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int

제스처 디코더가 범위 내의 첫 번째/마지막 FIFO 샘플을 검색할 때 사용하는 최소 샘플 크기(포토다이오드별)입니다.

apds9960.APDS9960_GESTURE_SENSITIVITY_1: int

디코더가 스와이프 방향을 확정하는 기준이 되는 누적 U/D 및 L/R 델타에 대한 임계값입니다.

apds9960.APDS9960_GESTURE_SENSITIVITY_2: int

디코더가 샘플을 스와이프가 아닌 근접/원거리 후보로 간주하는 기준이 되는 단계별 U/D 및 L/R 델타에 대한 임계값입니다.

apds9960.APDS9960_TIME_FIFO_PAUSE: int

제스처 루프가 FIFO 비우기 사이에 대기하는 밀리초입니다.

기능 모드

이 값들은 APDS9960.setMode()에 전달됩니다.

apds9960.APDS9960_MODE_POWER: int

전원 켜기 비트(0)입니다.

apds9960.APDS9960_MODE_AMBIENT_LIGHT: int

주변광/색상 엔진 활성화 비트(1)입니다.

apds9960.APDS9960_MODE_PROXIMITY: int

근접 엔진 활성화 비트(2)입니다.

apds9960.APDS9960_MODE_WAIT: int

대기 상태 활성화 비트(3)입니다.

apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int

주변광 인터럽트 활성화 비트(4)입니다.

apds9960.APDS9960_MODE_PROXIMITY_INT: int

근접 인터럽트 활성화 비트(5)입니다.

apds9960.APDS9960_MODE_GESTURE: int

제스처 엔진 활성화 비트(6)입니다.

apds9960.APDS9960_MODE_ALL: int

APDS9960.setMode()에게 ENABLE 레지스터의 모든 비트를 한 번에 활성화하거나 비활성화하도록 지시하는 센티넬 값(7)입니다.

LED 드라이브 전류

apds9960.APDS9960_LED_DRIVE_100MA: int

100 mA LED 드라이브(0)입니다.

apds9960.APDS9960_LED_DRIVE_50MA: int

50 mA LED 드라이브(1)입니다.

apds9960.APDS9960_LED_DRIVE_25MA: int

25 mA LED 드라이브(2)입니다.

apds9960.APDS9960_LED_DRIVE_12_5MA: int

12.5 mA LED 드라이브(3)입니다.

근접 게인(PGAIN)

apds9960.APDS9960_PGAIN_1X: int

1x 근접 게인(0)입니다.

apds9960.APDS9960_PGAIN_2X: int

2x 근접 게인(1)입니다.

apds9960.APDS9960_PGAIN_4X: int

4x 근접 게인(2)입니다. 생성자에 의해 적용되는 기본값입니다.

apds9960.APDS9960_PGAIN_8X: int

8x 근접 게인(3)입니다.

주변광 게인(AGAIN)

apds9960.APDS9960_AGAIN_1X: int

1x ALS 게인(0)입니다.

apds9960.APDS9960_AGAIN_4X: int

4x ALS 게인(1)입니다. 생성자에 의해 적용되는 기본값입니다.

apds9960.APDS9960_AGAIN_16X: int

16x ALS 게인(2)입니다.

apds9960.APDS9960_AGAIN_64X: int

64x ALS 게인(3)입니다.

제스처 게인(GGAIN)

apds9960.APDS9960_GGAIN_1X: int

1x 제스처 게인(0)입니다.

apds9960.APDS9960_GGAIN_2X: int

2x 제스처 게인(1)입니다.

apds9960.APDS9960_GGAIN_4X: int

4x 제스처 게인(2)입니다. 생성자에 의해 적용되는 기본값입니다.

apds9960.APDS9960_GGAIN_8X: int

8x 제스처 게인(3)입니다.

LED 부스트

apds9960.APDS9960_LED_BOOST_100: int

100% LED 부스트(0)입니다.

apds9960.APDS9960_LED_BOOST_150: int

150% LED 부스트(1)입니다.

apds9960.APDS9960_LED_BOOST_200: int

200% LED 부스트(2)입니다.

apds9960.APDS9960_LED_BOOST_300: int

300% LED 부스트(3)입니다. APDS9960.enableGestureSensor()에 의해 자동으로 적용됩니다.

제스처 대기 시간

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)입니다.

제스처 방향

이 값들은 APDS9960.readGesture()에 의해 반환됩니다.

apds9960.APDS9960_DIR_NONE: int

제스처가 감지되지 않음(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

근접 이벤트(5)입니다.

apds9960.APDS9960_DIR_FAR: int

원거리 이벤트(6)입니다.

apds9960.APDS9960_DIR_ALL: int

내부적으로 “모든 방향”을 나타내는 데 사용되는 센티넬 값(7)입니다.

제스처 상태

제스처 상태 머신을 통해 보고되는 내부 상태 값입니다.

apds9960.APDS9960_STATE_NA: int

상태 없음(0)입니다.

apds9960.APDS9960_STATE_NEAR: int

근접 상태 감지됨(1)입니다.

apds9960.APDS9960_STATE_FAR: int

원거리 상태 감지됨(2)입니다.

apds9960.APDS9960_STATE_ALL: int

내부적으로 “모든 상태”를 나타내는 데 사용되는 센티넬 값(3)입니다.