找回密码
 立即注册

微信扫码登录

搜索
查看: 1295|回复: 13

[进阶教程] Home Assistant 平板中控亮屏与电视遥控新姿势:ESPHome 蓝牙 HID 键盘攻略

[复制链接]

233

主题

3508

回帖

1万

积分

元老级技术达人

积分
11785
金钱
8024
HASS币
100
发表于 2026-8-18 00:02:39 | 显示全部楼层 |阅读模式
esp32_ble_keyboard_cover.jpg

不知道大家在折腾 Home Assistant 中控大屏的时候,有没有遇到过这个痛点:想实现“人来亮屏、人走灭屏”,结果发现无论是 iPad 还是安卓平板,都挺难搞。iPad 基本上只能靠推送通知或者特定的 App 保持前台,安卓虽然能用 ADB,但很多品牌的电视和平板一旦关机重启,ADB 调试开关就自动关了,非常心累。

最近,“瀚思彼岸”论坛的网友 “keepwin2023” 给我安利了一个神器——ESPHome-espidf_ble_keyboard。这是一个专门为 ESPHome 开发的外部组件,基于 ESP-IDF 框架。它的原理非常硬核且巧妙:直接把 ESP32 模拟成一个原生的 BLE(蓝牙低功耗)HID 键盘

适用于 ESPHome 的 ESP32 BLE HID 键盘 GitHub 文档(https://github.com/markusg1234/ESPHome-espidf_ble_keyboard)

为什么是蓝牙键盘?(对比 ADB 的优势)

其实不管是 iPad 人来亮屏,还是安卓平板的人来亮屏,都要折腾一番才能实现。

  • 安卓方案:通常要通过 ADB 命令或者安装 HA 官方 App,利用 App 的通知命令来控制亮屏。这不仅需要后台权限,最头疼的是稳定性——特别是有些品牌安卓的平板或者电视,关机或者重启后,ADB 调试开关会自动关闭,导致自动化失效。
  • 蓝牙键盘方案:这款 ESPHome-espidf_ble_keyboard 插件的主要功能就是利用 ESP32 开发板,把它模拟成一个原生的蓝牙键盘。它可以控制安卓手机/平板/电视、苹果手机/iPad,甚至是 Windows 电脑。

最核心的优势在于: 只要在设备端蓝牙连接成功后,即使设备关机重开,蓝牙也会自动重连。它是系统底层的输入协议,不需要任何额外的 App 权限,丝滑稳定。


核心功能一:平板中控的人来亮屏/人走灭屏

这是该组件最常用的场景。配合人体传感器、毫米波雷达或者摄像头,你可以实现真正的“原生丝滑”体验。

当有人靠近时,HA 触发自动化,命令 ESP32 发送一个“电源键”或“媒体按键”指令。平板收到指令后,会像被物理键盘唤醒一样瞬间亮屏。相比于网络通知,这种方式几乎是零延迟,而且 iPad 对外部键盘唤醒的支持非常友好,避免了各种复杂的推送配置。


核心功能二:替代红外,实现电视“穿墙”遥控

我家里客厅的电视是安卓系统的,以前一直在HA中用红外遥控方案。红外方案最大的缺点就是“怕遮挡、不能穿墙”。

我尝试把这个插件集成到了我卧室的一个 Sonoff 开关里(刷了 ESPHome 固件)。由于它是基于 BLE 低功耗蓝牙的射频信号,只要加上几行代码,这个开关就变成了一个“蓝牙遥控器”。

我在次卧按开关,隔着一堵墙,客厅电视的音量依然可以精准加减。这种“盲操”的快感是红外方案给不了的。

目前的一个小局限:
实测发现,如果电视处于完全关机(断电)状态,蓝牙遥控暂时还无法唤醒开机。我后续打算研究一下 BLE 广播唤醒。如果能实现开机,那它就是一个完美的、可定制的万能蓝牙遥控器。


核心功能三:获取 IRK 密钥,实现精准手机存在检测

这是在最新的 v1.8.0 版本中,作者根据我提出的需求新增的功能!

什么是 IRK 密钥?
现代手机为了隐私,蓝牙 MAC 地址是每隔几分钟就会改变的随机地址。普通的蓝牙追踪器会发现“设备 ID”一直在变,根本没法判断是谁。而 IRK (Identity Resolving Key) 是唯一能将这些随机地址与已知主机关联起来的东西。

以前获取 IRK 非常麻烦,通常要用 ESPresense 这种固件,折腾半天。现在,只要你的手机连接了这个 ESP32 键盘,插件就会直接显示该设备的身份解析密钥。

将这个密钥交给 Home Assistant 或另一个 ESP32 运行存在检测,就可以精准识别手机。这对于判断主人“回家/离家”非常有用。

⚠️ 重要避坑指南(必须看!)

不要将 esp32_ble_tracker 和这个 hid键盘 安装在同一个 ESP32 芯片上!

虽然程序可以编译通过且启动正常,但它们都会调用 esp32_ble。这会导致两个组件争用同一个回调函数,追踪器最终无法获取任何扫描结果。日志里不会报错,但你会发现手机明明在旁边,HA 却显示“永久不在”。

正确做法: 用第二个 ESP32 专门跑存在检测。示例代码如下:

esp32_ble_tracker:

binary_sensor:
  - platform: ble_presence
    name: "My iPhone Presence"
    irk: 0123***********************def # 这里填你获取到的密钥

专属 Web 控制页:一键变身实体控制器

该插件内置了一个非常强大的 Web 控制页面。只需要在代码里配置 web_control: true,并在 esphome 里开启 web_server

后续你可以通过访问 http://<esphome-device-ip>/ble_keyboard 进入。在这个页面里,你拥有:

  • 全键盘模拟:直接在手机浏览器里给电视输入文字。
  • 鼠标与触摸板:远程控制电视的光标。
  • 媒体控制按钮:播放、暂停、音量调节。

这对于调试代码或者临时找不到遥控器的时候,简直是救命神器。


如何配置与使用?

注意:ESP8266 没有蓝牙,是不行的。必须使用 ESP32 芯片的设备(目前测试 ESP32 原生芯片完美支持,C3/S3 理论上也支持)。

以下是完整的 ESPHome 示例代码:

esphome:
  name: cwd
  friendly_name: cwd

esp32:
  board: esp32dev
  framework:
    type: esp-idf
    sdkconfig_options:
      CONFIG_BT_ENABLED: y
      CONFIG_BT_CONTROLLER_ENABLED: y
      CONFIG_BT_BLUEDROID_ENABLED: y
      CONFIG_BT_NIMBLE_ENABLED: n
      CONFIG_BT_BLE_ENABLED: y
      CONFIG_BT_GATTS_ENABLE: y
      CONFIG_BT_BLE_42_FEATURES_SUPPORTED: y
      CONFIG_BT_BLE_50_FEATURES_SUPPORTED: n
      CONFIG_BT_BLE_42_ADV_EN: y
      CONFIG_BT_BLE_42_SCAN_EN: y
      CONFIG_BT_BLE_SMP_ENABLE: y
      CONFIG_BT_ACL_CONNECTIONS: "4"

# 日志输出
logger:

# HA API 接入
api:
  encryption:
    key: "Cde********U="

ota:
  - platform: esphome
    password: "dd*********86"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: "Cwd Fallback Hotspot"
    password: "5L*****7"

captive_portal:

web_server:
  port: 80

# 引入外部组件
external_components:
  - source:
      type: git
      url: https://github.com/markusg1234/ESPHome-espidf_ble_keyboard.git
      ref: main
      path: components
    refresh: 0s
    components: [ espidf_ble_keyboard ]

# 核心键盘配置
espidf_ble_keyboard:
  id: my_keyboard
  device_name: "cwdble" # 蓝牙搜索到的名字
  api_services: true
  key_delay_ms: 80
  passkey_mode: legacy
  host_slots: 2
  web_control: true # 开启网页控制台

# 实体化控制按钮
button:
  - platform: restart
    name: "重启 ESP32"
  - platform: espidf_ble_keyboard
    keyboard_id: my_keyboard
    name: "电视音量+"
    action: "volume_up"
  - platform: espidf_ble_keyboard
    keyboard_id: my_keyboard
    name: "电视音量-"
    action: "volume_down"
  - platform: espidf_ble_keyboard
    keyboard_id: my_keyboard
    name: "电视关机"
    action: "remote_power"

代码刷入后,打开电视或平板的蓝牙设置,你会看到一个叫 cwdble 的键盘,点击配对。配对成功后,你在 HA 里的这些按钮就生效了,实际效果见下图!

20268138(02).jpg

微信图片_20260816223401_32_6.jpg


插件评价与 v1.8.0 更新总结

这个组件的原作者 Markusg 非常给力,更新极其频繁,在 GitHub 社区的讨论也特别热烈。插件整体代码质量很高,基于原生的 ESP-IDF 框架,比普通的 Arduino 蓝牙库要稳定得多。

最近的 v1.8.0 版本更新了以下重点内容:

  1. IRK 密钥读取:在 Host Actions 中可以直接查看已配对设备的身份密钥,这是做高阶存在追踪的基石。
  2. 独立遥控器页面:支持 /ble_keyboard#remote 直接访问遥控器界面,并支持窗口弹出与置顶。
  3. 样式完全自定义:遥控器皮肤现在存储在设备上,支持圆形导航环、音量/频道摇杆、每按键颜色自定义。你可以通过导出的 JSON 自由定义布局。
  4. HA 动作映射:允许遥控器按键直接触发 HA 的 Native API 动作,打破了蓝牙设备与网关自动化之间的隔阂。
  5. 报错排查优化:新增了冲突检测,会明确告知哪个蓝牙组件占用了资源。
  6. 请求频率优化:大幅减少了 Web 端的 Polling 轮询请求,即使页面在后台也会自动停止请求,极大地减轻了 ESP32 的性能负担。

结语

如果你也正在为 HA 的平板中控亮屏而烦恼,或者想给电视做一个“不瞄准”的遥控器,这个 ESP32 蓝牙键盘组件绝对是目前的“标准答案”。

它不仅解决了 ADB 的不稳定性,还带来了 IRK 追踪这种高阶玩法。赶紧拿出你吃灰的 ESP32 试试吧!

评分

参与人数 1金钱 +12 收起 理由
book123 + 12 高手,这是高手!

查看全部评分

公众号:Home Assistant分享
回复

使用道具 举报

1

主题

53

回帖

1211

积分

金牌会员

积分
1211
金钱
1157
HASS币
0
发表于 2026-8-18 08:39:31 来自手机 | 显示全部楼层
牛而逼之,我那个小米平板2刷了windows,就是息屏后wifi会断,只能用鼠标来唤醒,这下完整了,感谢大佬
回复

使用道具 举报

233

主题

3508

回帖

1万

积分

元老级技术达人

积分
11785
金钱
8024
HASS币
100
 楼主| 发表于 2026-8-18 10:44:52 | 显示全部楼层
cmxiaoxiao 发表于 2026-8-18 08:39
牛而逼之,我那个小米平板2刷了windows,就是息屏后wifi会断,只能用鼠标来唤醒,这下完整了,感谢大佬 ...

这个东西稳定性很高,因为是系统底层支持,遥控电视跟实体红外遥控器一样
公众号:Home Assistant分享
回复

使用道具 举报

0

主题

185

回帖

1788

积分

金牌会员

积分
1788
金钱
1603
HASS币
0
发表于 2026-8-19 10:43:15 | 显示全部楼层
看着挺不错的
感谢分享
学习学习
回复

使用道具 举报

8

主题

191

回帖

1355

积分

金牌会员

积分
1355
金钱
1156
HASS币
0
发表于 2026-8-19 11:19:23 | 显示全部楼层
能不能同时连接多个设备呀?
回复

使用道具 举报

233

主题

3508

回帖

1万

积分

元老级技术达人

积分
11785
金钱
8024
HASS币
100
 楼主| 发表于 2026-8-19 11:26:13 | 显示全部楼层
a784174467 发表于 2026-8-19 11:19
能不能同时连接多个设备呀?

可以的,当然没有问题、
公众号:Home Assistant分享
回复

使用道具 举报

8

主题

191

回帖

1355

积分

金牌会员

积分
1355
金钱
1156
HASS币
0
发表于 2026-8-19 14:31:02 | 显示全部楼层
bugensui 发表于 2026-8-19 11:26
可以的,当然没有问题、

好嘟,谢谢🙏!
回复

使用道具 举报

3

主题

101

回帖

757

积分

高级会员

积分
757
金钱
653
HASS币
0
发表于 2026-8-20 14:48:25 | 显示全部楼层
人来亮屏好思路啊
回复

使用道具 举报

0

主题

24

回帖

98

积分

注册会员

积分
98
金钱
74
HASS币
0
发表于 2026-8-20 21:47:37 | 显示全部楼层
谢谢分享,增长知识啦
回复

使用道具 举报

0

主题

103

回帖

1105

积分

金牌会员

积分
1105
金钱
1002
HASS币
0
发表于 2026-8-24 14:59:09 | 显示全部楼层
雷鸟电视的蓝牙另一个esp追踪不到,一直关闭,但是iphone可以,键盘可以连接到esp键盘
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )|网站地图

GMT+8, 2026-9-16 05:49 , Processed in 0.015999 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表