Подключение датчика жестов 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
Так а каково практическое применение ?
Тут уже каждый для себя придумает) Я ради интереса взял, на тесты
а приближение и отдаление есть?
надо бы найти датчик с более детальный распознаванием. Но это скорее всего другого класса решение и на прядок дороже. Хочется чтобы понимал как пальцы сложены, вращения, дельты перемещения и тд.
Жесты это охуенно, гораздо лучше чем click, dbl_click, hold, они могут быть даже семантичными и при этом не надо делать громоздкий пульт
Здесь тоже достаточно примитивно: https://kvvhost.ru/2021/01/07/news-control-tv-with-the-force/
Управлять телеком и колонками действительно удобнее без пульта. У меня сейчас сделана многофункциональная кнопка. Она всегда в одном месте у дивана и не теряется, можно по памяти неглядя протянуть руку. А некоторые действия требовали множества нажатий на дух пультах.
И управляет не только с ИК, но и по сетевому протоколу
https://t.me/home_things/99