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