Подключение датчика жестов APDS9960 к esp8266 или esp32 с прошивкой ESPHome и интеграция в Home Assistant.

Очередной модуль для опытов. На этот раз датчик, умеющий определять жесты и rgb цвета.

 


Ссылка на датчик: https://aliexpress.ru/item/32885465005.html


Кому интересно, могут почитать на хабре пару статей об этом датчике, в которых более подробно описана техническая составляющая. 1 и 2.

Но я остановлюсь только на жестах. Подключается APDS9960 по I²C шине. Активируем ее, добавив в конфиг:

i2c:
  sda: D1 # gpio5
  scl: D2 # gpio4
  scan: true
  id: i2c_bus_1

Теперь подключим датчик по следующей схеме:

Прошиваем esp8266 и смотрим лог, чтобы найти I2C адрес:

Стандартный i2c адрес датчика APDS9960: 0x39

Далее добавляем в конфиг раздел для APDS9960, указав нужный интервал опроса, у меня 1 секунда:

apds9960:
  address: 0x39
  update_interval: 1s

Теперь про жесты. На странице интеграции ESPHome датчика APDS9960 расписан способ отображения жестов в Home Assistant. Они предлагают использовать бинарный сенсор, который будет активен при срабатывании. Мне же хотелось более наглядного отображения. Поэтому я добавил те же предложенные binary_sensor, но убрал поле name и добавил поле id, чтобы они не отображались в Home Assistant, а были использованы только внутри прошивки. Для отображения в HA я добавил text_sensor и повесил на него отображение информации о срабатывании binary_sensor датчиков всех четырех положений.

Часть этого конфига:

binary_sensor:
  - platform: apds9960
    direction: UP
    id: apds960_up
    on_state:
      then:
        - text_sensor.template.publish:
            id: direction_status
            state: "UP"

  - platform: apds9960
    direction: DOWN
    id: apds960_down
    on_state:
      then:
        - text_sensor.template.publish:
            id: direction_status
            state: "DOWN"

  - platform: apds9960
    direction: LEFT
    id: apds960_left
    on_state:
      then:
        - text_sensor.template.publish:
            id: direction_status
            state: "LEFT"

  - platform: apds9960
    direction: RIGHT
    id: apds960_right
    on_state:
      then:
        - text_sensor.template.publish:
            id: direction_status
            state: "RIGHT"

text_sensor:
  - platform: template
    name: "direction_status"
    id: direction_status

В итоге в Home Assistant нормально отображается текущий жест:

Так же я видел много вопросов о срабатывании датчика через прозрачные поверхности, поэтому специально проверил. Через прозрачный пластик, толщиной около 3мм, датчик не срабатывает. Через прозрачную пленку (файл для листа А4) датчик срабатывает.

Полный конфиг для моей тестовой nodemcu:

esphome:
  name: nodemcu
  platform: ESP8266
  board: nodemcuv2

wifi:
  ssid: "ssid"
  password: "password"

captive_portal:

logger:

api:
  password: "nodemcu"

ota:
  password: "nodemcu"

i2c:
  sda: D1 # gpio5
  scl: D2 # gpio4
  scan: true
  id: i2c_bus_1

apds9960:
  address: 0x39
  update_interval: 1s

binary_sensor:
  - platform: apds9960
    direction: UP
    id: apds960_up
    on_state:
      then:
        - text_sensor.template.publish:
            id: direction_status
            state: "UP"

  - platform: apds9960
    direction: DOWN
    id: apds960_down
    on_state:
      then:
        - text_sensor.template.publish:
            id: direction_status
            state: "DOWN"

  - platform: apds9960
    direction: LEFT
    id: apds960_left
    on_state:
      then:
        - text_sensor.template.publish:
            id: direction_status
            state: "LEFT"

  - platform: apds9960
    direction: RIGHT
    id: apds960_right
    on_state:
      then:
        - text_sensor.template.publish:
            id: direction_status
            state: "RIGHT"

text_sensor:
  - platform: template
    name: "direction_status"
    id: direction_status

 

5 2 голоса
Рейтинг статьи

Подписаться
Уведомить о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Sem2000
Sem2000
3 месяцев назад

Так а каково практическое применение ?