Чтобы собрать свою прошивку Tasmota для устройств на базе ESP (Sonoff, Wemos) нам потребуется среда разработки Visual Studio Code с установленными расширениями PlatformIO. Делается это один раз.
1. Выбираем свою платформу и скачиваем Visual Studio Code
2. Запускаем VS и переходим на вкладку Расширения (Extensions), или нажимаем CTRL+SHIFT+X
Добавим возможность удаленного управления клапаном КИВ-125 для автоматизации простой и не дорогой вентиляции.
По моим расчетам, в двухэтажном доме будет стоять по одному клапану на комнату итого 6-7 КИВов. Это ж сколько раз надо вставать и дёргать за шнурок, если кому-то "задуло"?!
Есть два варианта подключения
На каждый КИВ вешать по Wemos D1 mini (или любой другой ESP8266) и сервопривод SG90. Потребуется всего один провод питания, но увеличится количество подключений по Wifi, так как у каждого ESP8266 свой IP-адрес.
Сделать центральный узел с Wemos D1 mini и подключить к нему расширительную плату PCA9685. От каждого КИВа тянуть по одному 3х жильному кабелю для коммутации сервопривода SG90 к PCA9685.
Так как провода тянуть придётся по-любому, выбрал второй вариант с центральным Wemos.
Программная подготовка.
При прошивке Wemos D1 mini, надо добавить поддержку драйвера PCA9685 в my_user_config.h
Будем считать, что сервер MQTT уже установлен и настроен. Прописываем настройки сервера либо в my_user_config.h сразу, либо через веб-морду управлением Wemos позже.
После прошивки, подключаем Wemos к PCA9685 по схеме
5V -> VCC
G-> GND
D1 -> SCL
D2 -> SDA
Через веб-морду, правим настройки портов D1 и D2
Осталось подключить сервопривод SG90 к плате PCA9685 к одному из 15 портов и подключаем питание 5V2A к PCA9685 и 5V2A к Wemos.
Внимание! В документации к PCA9685 указано, что ёмкость конденсатора должна выбираться из расчета 100мкф на 1 SG90. В моём случае, мне пришлось перепаять штатный конденсатор 10V 470мкф на более ёмкий 10V 1000мкф, так как я планирую подключить до 10 сервоприводов.
Управление поворотом сервопривода осуществляется через http-запрос, MQTT или через консоль с веб-морды Wemos. Я назначил устройству статический IP-адрес, и буду посылать команды через http. Список команд описан на вики Tasmota
Нас интересуют
http://ip-address/cm?cmnd=driver15%20pwm,1,400
Где 1 - это номер порта PCA9685, к которому подключен сервопривод
А 400 - длина импульса.
Подбирать длину импульса (читай угол поворота привода) пока бесполезно, так как все положения изменятся после установки привода в КИВ.
Теперь поработаем руками.
Потребуется жёсткая пластина ~140*35мм в которой будет возможно сделать посадочное отверстие для SG90. Мне попалась текстолитовая пластина, толщиной 3мм. Отрезаем шпильку и прикручиваем по центру к шестеренкам пластиковую лопасть из комплекта SG90 чтобы сервопривод был ровно по центру. Закрепляем сервопривод на пластине, и шпильками прикручиваем к корпусу КИВа.
После того, как всё ровно и крепко держится - переходим к настройкам поворота лопастей. Подбираем параметр xxx и записываем, при каких лопасти полностью закрыты, открыты и приоткрыты.
http://ip-address/cm?cmnd=driver15%20pwm,1,xxx
Осталось добавить все это в Domoticz. Создадим новое устройство Настройка > Оборудование > Тип Dummy
Жмём Создать виртуальные датчики
Тип датчика Переключатель селекторный
Переходим в Переключатели, ищем свой КИВ-125 и жмём Редактировать.
Создаём 3 уровня переключателя и 3 действия в зависимости от подобранных параметров.
Тесты показали, что при длине витой пары около 5 метров, сигнал на сервопривод не теряется, и задержки никакой нет. Я переживал что из-за просадки напряжения на длинном проводе, сервы будут отваливаться.
!!!UPD 10.2019
Режим отладки. Никак не могу придумать как красиво подключить к витухе
Запустил наконец в продакшн в детской КИВ-125 и подключил по витой паре. Расстояние до сервера wemos примерно 8-9 метров. Выскочил неприятный момент. После отправки команды на любое действие (pwm 300, pwm 500 или любой другой), действие совершается, но затем SG90 начинает мерзко дёргаться (см. видео).
Вероятно потому, что сервопривод не навсегда удерживает свое положение, импульсы позиционирования должны повторяться, информируя сервопривод о сохранении положения. Если отправить pwm 4096, то серв замирает. Поэтому после отправки команды на любое действие, следом тут же следует отправлять 4096. В Меню Domoticz'a "Действия переключателя" не возможно отправить несколько команд следом и мне пришлось набросать по одному простенькому скрипту на каждое действие следующего содержания:
#!/bin/bash
# Control your KIV-125 over weemos d1 with ip 10.0.0.205.
# Current script - send OPEN command to kiv and poweroff
curl -i --silent http://10.0.0.205/cm?cmnd=driver15%20pwm,7,320
sleep 0.5
curl -i --silent http://10.0.0.205/cm?cmnd=driver15%20pwm,7,4096
Скачать три скрипта можно тут. ИМЕЙТЕ ввиду, что значение PWM для каждого уникально (зависит от того, в каком положении зафиксирован SG90 и шестерня клапана КИВа). Да, и IP адрес wemos-сервера тоже.
Кладём все в папку domoticz/scripts и делаем их исполняемыми
chmod +x kiv-*.sh
Демонстрация корректной работы
Взял в руки клеевой пистолет, монтажную коробку, 4 монтажных разъема RJ45 и собрал наконец wemos-сервер с PCA9685 в одну коробку. Замудохался припаивать по 3 проводульки к RJ45, но зато теперь можно быстро подключить\отключить КИВ. Ничего не выпадает. Остальные 5 проводов можно использовать под датчики температуры\влажности, если их примастить у КИВа, или рядом с ним. Мне показалось это излишним, но возможность я эту оставил.
Процедура прошивки Wemos D1 mini ещё проще чем на устройствах Sonoff. Не нужны никакие преобразователи USB to TTL для связи с компьютером, даже паять ничего не надо.
Подключаем wemos к компьютеру через MicroUSB-кабель, смотрим в диспетчер устройств и запоминаем номер COM-порта. Инструкция на английском. Тут можно почитать, как просто установить, и подготовить для сборки прошивки Visual Studio Code.
Скачиваем последние исходники Source Code (zip). Распаковываем в любую директорию и запускаем Visual Studio Code. Открываем разархивированные папку и сразу переходим к редактированию platformio.ini. Добавим в конец файла настройки для Wemos
[env:wemos-d1-mini]
platform = espressif8266
framework = arduino
board = esp01_1m
board_flash_mode = dout
build_flags = -Wl,-Tesp8266.flash.1m0.ld -DMQTT_MAX_PACKET_SIZE=1000
lib_deps = PubSubClient, NeoPixelBus, IRremoteESP8266, ArduinoJSON
extra_scripts = pio/strip-floats.py
; *** Serial Monitor options
monitor_baud = 115200
; *** Upload Serial reset method for Wemos and NodeMCU
upload_resetmethod = nodemcu
upload_speed = 115200
upload_port = COM6
; *** Upload file to OTA server using SCP
;upload_port = user@host:/path
;extra_scripts = pio/strip-floats.py, pio/sftp-uploader.py
; *** Upload file to OTA server using HTTP
;upload_port = domus1:80/api/upload-arduino.php
;extra_scripts = pio/strip-floats.py, pio/http-uploader.py
Проверяем настройки upload_port и проверяем в начале файла, чтобы
env_default = wemos-d1-mini
В файле my_user_config.h меняем
#define MODULE WEMOS
И пробегаемся по настройкам WiFi, MQTT и прочих необходимых параметров.
Приводим всё к виду, как на скриншоте
Настройки платы
Далее жмём Build, Upload и после перезагрузки переходим в веб-браузер по IP-адресу, который роутер выдал Wemos.
UPD! В октябре 2019 собирал свежую 6.7.1 прошивку на wemos (да, люблю обновления). Теперь процесс сборки упростился донельзя. Собирать можно без внесения каких-либо правок в файл platformio.io, и не надо выставлять настройки платы. Собираем стандартную прошивку sonoff, а после прошивки wemos, в настройках выбираем тип модуля 18 Generic.
!!! Если собираем прошивку управления КИВом, не забываем добавить поддержку платы PCA9685 в my_user_config.h