Подключение датчика жестов APDS9960 к ESP8266

Подключение датчика жестов 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

Поделитесь с друзьями
Подписаться
Уведомить о
guest

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

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

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

Alex Mextner
3 лет назад

а приближение и отдаление есть?

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

Жесты это охуенно, гораздо лучше чем click, dbl_click, hold, они могут быть даже семантичными и при этом не надо делать громоздкий пульт

Alex Mextner
3 лет назад

Здесь тоже достаточно примитивно: https://kvvhost.ru/2021/01/07/news-control-tv-with-the-force/

Управлять телеком и колонками действительно удобнее без пульта. У меня сейчас сделана многофункциональная кнопка. Она всегда в одном месте у дивана и не теряется, можно по памяти неглядя протянуть руку. А некоторые действия требовали множества нажатий на дух пультах.

И управляет не только с ИК, но и по сетевому протоколу

https://t.me/home_things/99