Ультразвуковые датчики расстояния HC-SR04 и JSN-SR04T в ESPHome
Строю потихоньку своими силами дом. Что-то такое... Но рассказ не о нём.

Где-то с год назад решил погрузиться в такую тему, как умный дом. Определился, что облачные решения мне не интересны и как одну из самых популярных платформ выбрал Home Assistant.
Прошёл все стадии построения автономного умного дома: установка Debian, настройка датчиков и устройств с Алихи и других магазов, настройка всяких автоматизаций и т.д. Но в один прекрасный момент понял, что мне не хватает функциональности и универсальности типовых датчиков предлагаемых маркетплейсами. С удивлением открыл для себя мир DIY платформ для умных устройств.
Одной из этих платформ, которая мне приглянулась своей простотой оказалась

Короче, долго ли, коротко, но понадобился мне измеритель расстояния. Выбор пал на ультразвуковые датчики JSN-SR04T и HC-SR04

для интеграции с Home Assistant была выбрана плата WeMos D1

Для понимания цены вопроса, датчик стоит от 200 рублей и платка D1 от 350. И это всё что нужно, чтобы датчик работал.
Соединяется всё это по очень простой схеме

Для прошивки у вас должно быть настроено ПО. Есть несколько вариантов:
1. Прошивка с командной строки
2. Через web интерфейс
3. Используя установленный Home Assistant.
Обо всех вариантах установки написано много статей и снято видео. Можно об том прочитать как на официальном сайте ESPHome, посмотреть в видео у Алекса Квазиса и т.д.
Если же у вас уже установлен Home Assistant, то проще всего поставить к нему дополнение через HACS и использовать этот сервер для первичной прошивки плат. Но статья не о том, как установить Home Assistant или настроить ESPHome. Хочу рассказать с какой проблемой столкнулся при прошивке ультразвуковых датчиков и как она решилась.
Во всех источниках, в том числе и на официальном сайте сказано, что для того, чтобы прошить ESP8622 достаточно в файле конфигурации прописать следующий код:

sensor:
- platform: ultrasonic
trigger_pin: D1
echo_pin: D2 name: 'My Ultrasonic Sensor'
И вправду датчик HC-SR04 заработал без проблем. Но поскольку он имеет открытый корпус, а его брат JSN-SR04T в качестве датчика использует автомобильный парктроник, то было желание использовать второй вариант. Удобно спрятать платы в коробку, а сам датчик встраивать куда надо.
Каково же было мое удивление, когда второй датчик с данной конфигурацией не заработал. Лог упорно выдавал тайм-аут датчика.
Разница в датчиках в том, что первый работает в дуплекс режиме и может одновременно передавать сигнал и принимать его. У второго же только симплекс режим, он поочередно отправляет и принимает сигнал.
До этого додумался только после анализа ксетча этого же датчика для Ардуино. А до этого были эксперименты:
1. Запитал плату датчика не с wemos d1, а напрямую.
2. Сократил расстояние между wemos d1 и платой датчика до минимума.
3. Укоротил длинный провод между платой датчика и самим датчиком.
4. Менял местами rx и tx.
5. Подключал плату датчика на другие пины, d8 и d9 по-моему
6. Запитывал не от usb ноутбука, а от внешнего блока питания.
Как всегда оказалось всё просто, у датчика есть параметр timeout. По умолчанию он установлен в 2.0m. Для дуплексного режима этого достаточно., а вот для симлекса его надо установить в 4.0m и бинго, датчик начал измерять расстояние


Всем любимых хобби!



Комментарии