Remote control with 8/12/20 buttons Zigbee End Device by TLSR8258 (ZTU module)
Freepad является многофункциональным пультом дистанционного управления устройствами в сети Zigbee. Freepad является конечным устройством, которое питается от батарейки CR2450. Freepad может быть реализован с 8, 12 или 20 кнопками. Нумерация кнопок происходит слева направо, сверху вниз (светодиод сверху). Номер кнопки соответствует номеру endpoint'а.
Прототипом этой версии Freepad'а был проект на CC2530 - "Универсальный пульт Zigbee"
Freepad дает возможность управлять устройствами в сети Zigbee напрямую, без использования автоматизаций в УД.
Выбор работы каждой клавиши выбирается отдельно через Switch type.
toggle- устанавливает режим работы кнопки для включения и выключения какого-либо устройства. Фиксируются только одиночные нажатия. Высылаются командыon,offилиtoggleв зависимости от настроекSwitch actions. Команды высылаются только при нажатии кнопки.momentary- устанавливает режим работы кнопки для включения и выключения какого-либо устройства. Фиксируются только одиночные нажатия. Высылаются командыon,offилиtoggleв зависимости от настроекSwitch actions. Команды высылаются как при нажатии кнопки, так и при ее отпускании. ЕслиSwitch actionустановлен вon, то при нажатии высылается командаon, а при отпусканииoff. ЕслиSwitch actionустановлен вoff, то при нажатии высылается командаoff, а при отпусканииon. ЕслиSwitch actionустановлен вtoggle, то и при нажатии, и при отпускании высылается командаtoggle.multifunction- устанавливает режим работы кнопки для отправкиactions. Фиксируются одиночное нажатие, двойное нажатие, тройное нажатие, удержание и отпускание кнопки после удержания. Высылаются одноименныеactions-"hold","single","double","triple"и"release".brightness_level- устанавливает режим работы кнопки для управления яркостью одной кнопкой. Фиксируется одиночное нажатие, удержание и отпускание после удержания.- Одно нажатие - высылается команда
toggleна устройство, для изменения его состояния на противоположное. - Удержание - высылается команда
move to level. Устройство должно плавно увеличивать или уменьшать яркость (направление меняется при каждом последующем нажатии), пока последняя не станет равна значениюlevel, который берется из атрибутаminLevelилиmaxLevel. Скорость увеличения/уменьшения яркости берется из атрибутаonOffTransitionTime, который можно изменить через dev-консоль. По умолчанию это значение равно 25. Если устройство выключено, то при команде на увеличение яркости устройство включается. При достижении минимального значения яркости устройство не выключается. - Отпускание после удержания - высылается команда
level stop.
- Одно нажатие - высылается команда
brightness_level_up- устанавливает режим работы кнопки для увеличения яркости. Фиксируется одиночные и двойные нажатия, удержание и отпускание после удержания.- Одно нажатие - высылается команда
onна устройство. - Двойное нажатие - высылается команда
step levelна устройство (прибавляет к текущему значению яркости примерно 25 единиц). Если устройство выключено, оно включается. - Удержание - высылается команда
move to level. Устройство должно плавно увеличивать яркость, пока последняя не станет максимальной - значение максимальной яркости берется из атрибутаmaxLevel. Увеличение продолжается, пока удерживается кнопка и не достигнуто значениеmaxLevel. Скорость увеличения яркости берется из атрибутаonOffTransitionTime, который можно изменить через dev-консоль. По умолчанию это значение равно 25. Если устройство было выключено, оно включается. - Отпускание после удержания - высылается команда
stop level.
- Одно нажатие - высылается команда
brightness_level_down- устанавливает режим работы кнопки для уменьшения яркости. Фиксируется одиночные и двойные нажатия, удержание и отпускание после удержания.- Одно нажатие - высылается команда
offна устройство. - Двойное нажатие - высылается команда
step levelна устройство (отнимает от текущего значения яркости примерно 25 единиц). Если устройство включено, а яркость достигла минимального предела, оно выключается. - Удержание - высылается команда
move to level. Устройство должно плавно уменьшать яркость, пока последняя не станет минимальной - значение минимальной яркости берется из атрибутаminLevel. Уменьшение продолжается, пока удерживается кнопка и не достигнуто значениеminLevel. Скорость уменьшения яркости берется из атрибутаonOffTransitionTime, который можно изменить через dev-консоль. По умолчанию это значение равно 25. Устройство не выключается если яркость достигла минимального предела. - Отпускание после удержания - высылается команда
stop level.
- Одно нажатие - высылается команда
move_to_color_temperature- устанавливает режим работы кнопки для управления температурой цвета одной кнопкой. Фиксируется удержание и отпускание после удержания.- Удержание - высылается команда
move to color temperature. Устройство должно плавно увеличивать или уменьшать температуру цвета (направление меняется при каждом последующем нажатии). - Отпускание после удержания - высылается команда
stop move step.
- Удержание - высылается команда
move_to_color_temperature_up- устанавливает режим работы кнопки для увеличения температуры цвета. Фиксируется одиночные нажатия, удержание и отпускание после удержания.- Одно нажатие - высылается команда
step color temperatureна устройство (прибавляет к текущему значению 87 единиц). - Удержание - высылается команда
move to color temperature. Устройство должно плавно увеличивать температуру цвета. Увеличение продолжается, пока удерживается кнопка. - Отпускание после удержания - высылается команда
stop move step.
- Одно нажатие - высылается команда
move_to_color_temperature_down- устанавливает режим работы кнопки для уменьшения температуры цвета. Фиксируется одиночные нажатия, удержание и отпускание после удержания.- Одно нажатие - высылается команда
step color temperatureна устройство (отнимает от текущего значения 87 единиц). - Удержание - высылается команда
move to color temperature. Устройство должно плавно уменьшать температуру цвета. Уменьшение продолжается, пока удерживается кнопка. - Отпускание после удержания - высылается команда
stop move step.
- Одно нажатие - высылается команда
scene- работа со сценами. Сцены создаются в управляемом устройстве во вкладкеSceneили в группе. При нажатии на кнопку посылается командаrecall sceneна устройство или в группу.
Принципиальная схема устройства.
Плата.
Гербер можно создать самостоятельно вот из этого проекта
Файлы STL для печатного корпуса - case.rar
- Установите Telink IoT Studio. Откройте
Telink IoT Studioи создайте пространствоWorkspace, где будут храниться проекты. - Клонируйте этот репозиторий в
Workspace, который создали вTelink IoT Studio
git clone https://github.com/slacky1965/freepad_tlsr_zed.git - Импортируйте проект в
Telink IoT Studio-File -> Import -> General -> Existing Projects into Workspace. ВSelect root directoryукажите директорию, куда склонировали проект. НажмитеFinish. - Отредактируйте пути в
makefileк компилятору (он там, куда установилиTelink IoT Studio). - Разверните проект и в
Build Targetsзапуститеcleanдля проверки. Если отработает без ошибок, значит все сделано правильно.
Проект можно собрать не только из IDE, можно в терминале, находясь в директории проекта, дать команду make.
- Через оригинальный программатор.
- Через DIY программатор. Как его сделать описано тут.
- Через USB-UART адаптер.
Прошивка грузится по адресу 0.
- Для добавления
Freepadв сеть нужно 5 раз быстро нажать на любую кнопку, после чего светодиод загорится на 3 секунды. Пока он горит, нужно нажать и удерживать эту же кнопку. - Для сброса (reset) микроконтроллера
Freepadнужно просто быстро нажать 10 раз любую кнопку. - Для принудительной отправки репорта по батарейке нужно просто быстро нажать 4 раза любую кнопку.
Рассмотрим настройку на примере управления яркостью умной лампы.
- Выбрать кнопки, которые будут отвечать за увеличение и уменьшение яркости. Пусть это будут 1 и 2 кнопки.
- Зайти в
z2mвExposesи назначить для 1 кнопкиbrightness_level_up, а для 2 кнопкиbrightness_level_down.
- Зайти в
z2mвBindи для 1 и 2endpoint'овнастроить биндинг на нужную лампу.
Не забываем после нажатия в web-интерфейсе Bind или выбора режма кнопки Switch type нажимать на любую кнопку на Freepad'е для того, чтобы он проснулся и принял изменения.
Все готово.
Теперь при коротком нажатии на 1 кнопку лампа будет включаться. При двойном нажатии на 1 кнопку будет увеличивать яркость на один шаг. При удержании будет повышать яркость, пока удерживается кнопка.
При коротком нажатии на 2 кнопку лампа будет выключаться. При двойном нажатии на 2 кнопку будет уменьшаться яркость на один шаг. При удержании будет уменьшаться яркость, пока удерживается кнопка.
Если нажимать кнопку один раз в минуту, то батарейки должно хватить на чуть более 1 года.
Но есть возможность еще больше сэкономить на потреблении. Не зависимо от настроек, при нажатии на любую кнопку Freepad будет отправлять команду или экшен на координатор. К примеру, вы не будете использовать автоматизации в УД для управления устройством. Вам нужно просто управлять яркостью. Для этого все лишние бинды можно удалить.
По умолчанию, после настройки биндов для управления яркостью вкладка Bind будет выглядеть так
Если убрать все лишнее, то получим следующее
Теперь, при нажатии на кнопку будет уходить не две команды (одна на лампу, вторая на координатор), а одна (только на лампу).
Нужно только проследить, чтобы в первом endpoint'е остался бинд на кластер genPowerCfg - это отвечает за репортинг заряда батарейки.
Ну и последнее. Пульт в дежурном режиме спит. Если его вообще не трогать, то спать он будет 4 часа. Потом проснется, измерит батарейку, отправит репорт и опять уснет на 4 часа. 4 часа берутся из настройки репортинга батарейки из параметра Max rep interval. Если изменить это значение, то просыпаться Freepad будет уже исходя из этого зачения.
Связаться с Олегом, автором схемы и платы, можно в Telegram.
Связаться со мной можно в Telegram.
Если захотите отблагодарить автора, то это можно сделать через ЮMoney
- 1.0.01
- Начало.
















