简介
在这个科技飞速发展的时代,用户所追求的不再是层出不穷的智能平台,而是能够实现不同智能设备协同工作的智能生态系统,以及简化智能设备管理的工具。这不仅要求智能设备之间能够实现互联互通,还要求它们能够深入理解并响应用户的多样化需求,提供更加个性化和智能化的服务。因此,实现跨品牌和跨平台的通信已成为智能领域中日益凸显的挑战。
ESP-Knob 是一款基于 ESP32-H2 芯片自主开发的多功能智能旋钮控制器。它不仅能够接入 Home Assistant,还广泛支持 BLE-HID、Thread 、Matter 、ESP-BLE-MESH 和 Zigbee 等无线通信协议。通过与苹果 Homepod、亚马逊 Echo 等主流智能设备同时建立连接,它轻松打破了跨平台的壁垒,使得跨平台的设备间的协同工作变得十分简单、直观,为用户提供了一种全新的智能家居控制方式。
ESP-Knob 正面为一个铝合金外壳的按压旋钮,能够读取按压、旋转等事件;背部自带磁吸底座,可以稳固地吸附在金属表面,实现设备的便捷操控。
视频展示
供电方式
ESP-Knob 仅需一节纽扣电池,即可实现高效稳定的运行;同时支持低功耗管理,来延迟电池的使用寿命。
在硬件设计上,ESP-Knob 预留了 USB TYPE-C 接口 ,通过 USB 连接可以实现持续供电,也便于程序下载和调试,为用户提供了更多的使用场景,增强了便利性。
功能演示
1. BLE ADV 广播功能
ESP-Knob 通过 BTHome 协议 接入 Home Assistant 智能家居系统 ,通过发送符合 BTHome 格式的广播包,以轻松控制第三方智能设备,例如控制米家床头灯的灯光亮度、颜色和开、关灯。
2. Matter 控制功能
ESP-Knob 还适配 Matter Over Thread 协议,能够轻松与苹果 HomePod、亚马逊 Echo 等智能设备同时建立连接,允许用户通过 Matter 协议无缝管理和控制家中的多种智能家居设备,轻松实现跨平台的智能家居控制系统,提升用户体验的连贯性和便捷性。
3. BLE-HID Device 控制功能
ESP-Knob 也支持 BLE-HID 协议,通过连接蓝牙即可作为 音量调节设备 和 无线 PPT 翻页器。
- ESP-Knob 能够轻松与智能手机或其他蓝牙设备配对,即可作为一个直观的音量调节器。用户可以通过旋钮轻松调整音量大小,无论是在家中享受音乐,还是在办公室进行视频会议,都能提供便捷的音量控制。
- 在需要演示或演讲的场合,ESP-Knob 可作为一款便捷的无线 PPT 翻页器,借助其对 BLE-HID 协议的支持即可实现 PPT 远程翻页。
4. BLE-Mesh & Zigbee 组网控制功能
对于多设备组网场景,ESP-Knob 同时支持 ESP-BLE-MESH 和 Zigbee 协议,可实现高效率和高可靠性的多设备群体控制。
- 多设备灯光控制演示
5. 远距离 & 穿墙控制功能
凭借 ESP32-H2 高达 20dBm
的发射功率和最高 -106.5 dBm
的接收灵敏度, ESP-Knob 不仅能够轻松实现穿墙通讯,还能在远距离条件下保持稳定连接。这意味着即使在障碍物众多、信号易受干扰的复杂环境中,ESP-Knob 依然能够提供可靠、连续的无线连接,确保智能家居设备的远程控制和数据传输的稳定性和响应速度。
- 穿墙 & 远距离控制 演示
硬件设计
ESP-Knob 的硬件设计比较简洁,除了基础的电池供电电路、旋钮电路和下载、调试电路外,只有一个简单的 LED 指示灯电路。ESP-Knob 的硬件系统组成如下:
- 主控 MCU : ESP32-H2-MINI-1-H2 模组
EC11
(旋转编码器):用于用户输入,能够检测旋转和按压操作。通过 EC11 的按压信号控制VCC_EN
,用于电源开关或模式切换。5V —> 3.3V
(电源模块):通过 XC6206P332MR-G 低压差线性稳压器,将 USB 供电(5V)降压为 ESP32-H2 所需的 3.3V 电压。VBAT —> 3.3V
(电源模块):通过 TPS61291 升压芯片适应宽输入电压范围,在 ESP32-H2 工作时为芯片提供 3.3V 电压;在 ESP32-H2 休眠时通过电池直接供电,从而支持低功耗的休眠唤醒功能。USB-C
接口:使用 USB-C 接口,连接到 ESP32-H2 ,用于数据传输和供电。LED
(指示灯模块):使用 ESP32-H2 的GPIO2
和GPIO3
引脚控制双色 LED 的点亮与熄灭,用于指示 ESP-Knob 不同的工作状态。BATTERY
(电池管理模块):通过 BT1 连接外部锂电池(VBAT)并监测电池电压,将电压分压到 BAT_ADC ,引入 ESP32-H2 以监控电池电压。DEBUG
(下载 & 调试接口):为ESP-Knob
设备预留下载接口和硬件复位接口的测试点。通过连接到 ESP32-H2 的UART0
接口(TXD0 、RXD0
)可用于固件烧录和调试;通过拉低ESP_EN
管脚可用于ESP-Knob
的硬件复位。
ESP-Knob 完整的硬件开源资料可在【嘉立创-乐鑫小铁匠】ESP32-H2-Knob 获取,更多 ESP 硬件设计说明请参考 《ESP 硬件设计指南》 。
软件设计
目前,ESP-Knob 设备提供了 BLE-HID
、BTHOME
和 Matter Switch
三种固件,烧录对应固件后即可接入不同的智能家居系统,用户可直接在 ESP-LAUNCHPAD 下载 ESP-Knob 的三种固件。
1. BLE-HID 的固件功能:
- 默认开启 BLE 广播,设备广播名称为 ESP-HID-X(其中 X 代表第几个设备)
- 通过旋转旋钮进行音量调节
- 通过按压旋钮进行 PPT 翻页
- 长按旋钮切换绑定设备
- 断开 BLE 连接
30s
后自动进入DeepSleep 深度睡眠模式,通过旋转或者长按旋钮即可再次唤醒。
【技术解析】
- BLE HID Device 应用例程可参考:esp-idf/examples/bluetooth/bluedroid/ble/ble_hid_device_demo,BLE HID 组件使用说明参见:BLE HCI 组件;
- 使用按压旋钮来切换工作模式,软件使用 espressif/button 组件实现不同类型的按键事件的注册。更多用户指南参见:按键;
- 借助 espressif/knob 组件实现 EC11 编码器的解码以实现多种旋钮功能,更多用户指南参见:Knob;
- 使用普通 GPIO 驱动 两个 LED 指示灯,通过不同类型的闪烁来指示 ESP-Knob 不同工作模式。对于 LED 指示灯应用,可以使用乐鑫提供的 espressif/led_indicator 组件,快速定义多组不同的 LED 闪烁类型。更多用户指南参见:LED 指示灯;
- 使用
EXT1
作为唤醒源,通过RTC GPIO10、RTC GPIO11
以及RTC GPIO12
触发中断唤醒 DeepSleep 深度睡眠模式。DeepSleep 应用例程参考:esp-idf/examples/system/deep_sleep。
2. BT Home 的固件功能:
- 集成了一个
Button
和一个Dimmer
,发送符合BTHome
格式的广播包进行按压和旋转控制; - 可接入
Home Assistant
; - 支持低功耗管理,发完 BTHome 广播包后自动进入 DeepSleep 深度睡眠状态。
【技术解析】
-
通过 BLE HCI 组件 来创建满足 BTHome 协议 规范的广播包进行旋钮控制,相关控制代码可参考如下:
uint8_t adv[31] = {0}; uint8_t payload_len = 0; uint8_t payload[31]; settings_read_parameter_from_nvs(); sys_param_t *sys_param = settings_get_parameter(); sys_param->counter = sys_param->counter + 100; bthome_set_counter(s_dimmer->bthome, sys_param->counter); settings_write_parameter_to_nvs(); ESP_LOGI(TAG, "counter %lu", sys_param->counter); ble_hci_set_random_address(local_mac); ble_hci_adv_param_t adv_param = { .adv_int_min = 0x50, .adv_int_max = 0x50, .adv_type = ADV_TYPE_NONCONN_IND, .own_addr_type = BLE_ADDR_TYPE_RANDOM, .peer_addr_type = BLE_ADDR_TYPE_PUBLIC, .channel_map = ADV_CHNL_ALL, .adv_filter_policy = ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY, }; memcpy(adv_param.peer_addr, peer_mac, BLE_HCI_ADDR_LEN); ble_hci_set_adv_param(&adv_param);
-
设置 Auto Light Sleep 模式来进行 BLE 保活,同时降低 BLE 广播功耗。Auto Light Sleep 模式代码参考如下:
#if CONFIG_PM_ENABLE // Configure dynamic frequency scaling: // maximum and minimum frequencies are set in sdkconfig, // automatic light sleep is enabled if tickless idle support is enabled. esp_pm_config_t pm_config = { .max_freq_mhz = 96, .min_freq_mhz = 32, #if CONFIG_FREERTOS_USE_TICKLESS_IDLE .light_sleep_enable = true #endif }; ESP_ERROR_CHECK(esp_pm_configure(&pm_config)); #endif // CONFIG_PM_ENABLE
【注意】
由于
Auto Light Sleep
模式本质上是根据空闲任务,配置一个 Timer 唤醒源进行自动唤醒。如果在Auto Light Sleep
模式下直接进入 DeepSleep 模式,则芯片会自动被 Timer 唤醒源进行唤醒。应在进入 DeepSleep 深度睡眠模式前,先通过esp_pm_config_t pm_config
配置关闭Light Sleep
模式,代码如下:esp_err_t bsp_enter_deep_sleep(void) { ESP_LOGI(TAG, "enter deep sleep"); #if CONFIG_PM_ENABLE // Configure dynamic frequency scaling: // maximum and minimum frequencies are set in sdkconfig, // automatic light sleep is enabled if tickless idle support is enabled. esp_pm_config_t pm_config = { .max_freq_mhz = 96, .min_freq_mhz = 96, #if CONFIG_FREERTOS_USE_TICKLESS_IDLE .light_sleep_enable = false #endif }; ESP_ERROR_CHECK(esp_pm_configure(&pm_config)); #endif // CONFIG_PM_ENABLE bsp_power_ctrl_set(false); esp_deep_sleep_start(); }
- 使用按压旋钮来切换工作模式,软件使用 espressif/button 组件实现不同类型的按键事件的注册。更多用户指南参见:按键
- 借助 espressif/knob 组件实现 EC11 编码器的解码以实现多种旋钮功能, 更多用户指南参见: Knob
3. Matter 通用开关的固件功能:
- 配网后成为一个 Matter 开关,能够提供旋钮按压事件对智能设备进行控制。
【技术解析】
- 基于乐鑫官方的 ESP MATTER SDK,提供简化的 API、常用的外围设备、用于安全、制造和生产的工具和实用程序,并附有丰富的 Matter 应用例程:esp-matter/examples ;以及详尽的文档说明:ESP-Matter 编程指南
- 借助 espressif /esp_bsp_generic 组件初始化 通用按键 和 LED 指示灯 功能。
对于 ESP-Knob 的 BLE-Mesh 组网应用可以参考乐鑫官方的 esp-idf/examples/bluetooth/esp_ble_mesh 应用例程,软件编程指南参见:ESP-BLE-MESH。
ESP Zigbee Mesh 组网应用可参考:esp-zigbee-sdk ,软件编程指南参见:ESP Zigbee SDK Programming Guide。
总结
基于 ESP32-H2 芯片自主研发的 ESP-Knob 智能旋钮,以其卓越的兼容性和灵活性,真正简化了多平台的智能设备管理,为用户提供无缝、流畅且高度个性化的智能家居控制体验。欢迎各位开发者 DIY 自己的专属智能旋钮,探索更多智能生活的可能性。