找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

410

积分

0

好友

42

主题
发表于 昨天 04:54 | 查看: 0| 回复: 0

天冷不想动手?一款自制的蓝牙手机遥控器能让你把手藏在被窝里,轻松刷抖音、快手等短视频。

这款遥控器的核心功能是通过蓝牙连接,远程模拟触控手势,实现上下翻页、暂停播放、点赞等操作,彻底解放双手。

对于嵌入式开发者来说,直接购买成品非首选。这次我们利用手边已有的沁恒CH585开发板,它功能强大,曾用于NFC模拟门禁卡等项目。本次任务相对简单,主要利用其BLE-HID功能。我们基于官方提供的HID_Mouse参考例程(路径:CH585EVT\EVT\EXAM\BLE\HID_Mouse)进行修改,即可实现目标。

实现原理:模拟手指滑动

要实现短视频的上下翻页,本质是模拟出手指在屏幕上“按下-滑动-松开”的完整触控手势。这里我们通过蓝牙HID鼠标协议来间接实现。

手机操作系统会将连接的HID鼠标报告解析为相应的指针移动和点击事件。我们的策略是:

  1. 按下:发送鼠标左键按下的报告,相当于手指触碰屏幕。
  2. 滑动:在保持按下状态的同时,连续发送带有Y轴位移(正值或负值)的报告,模拟手指持续滑动。
  3. 松开:发送鼠标左键释放的报告,完成手势。

代码实现步骤

HID_Mouse例程连接后,会控制鼠标指针每隔0.5秒向右下角移动。我们需要修改为通过按键触发一次完整的上滑动作。

1. 增加按键检测功能

首先初始化按键并设置扫描事件。可以参考按键检测实现文章中的方法。

void Key_Init(){
    GPIOB_ModeCfg( GPIO_Pin_22, GPIO_ModeIN_PU );
    tmos_set_event( hidEmuTaskId, START_KEYSCAN_EVT );
}
2. 实现按键触发的翻页逻辑

当检测到按键(如S3)被按下时,执行一个预设的鼠标动作序列。我们可以编写一个简单的状态机或顺序逻辑来控制以下步骤:

  • 移动到屏幕预设位置(或利用当前指针位置)
  • 执行“按下 → 上移 → 松开”的操作

关键API调用示例:

  • 鼠标左键按下:hidEmuSendMouseReport(0x01, 0x00, 0x00); (第一个参数0x01表示按下)
  • 按下并向上移动:hidEmuSendMouseReport(0x01, 0x00, -50); (第三个参数为Y轴位移,负值表示向上)
  • 释放左键:hidEmuSendMouseReport(0x00, 0x00, 0x00);

通过组合和循环发送这些报告,即可实现一次长距离的上滑翻页操作,然后让鼠标指针归位。

方案优化:从HID Mouse到HID Touch

上述方案存在一个视觉瑕疵:手机屏幕上会一直显示一个鼠标指针。

更优的方案是使用HID触控(HID Touch)协议。沁恒CH585EVT中也提供了HID_Touch示例。该协议直接模拟触摸屏的绝对坐标输入,没有光标,体验上更接近真实的触控操作,符合移动应用对直接触控交互的需求。

核心区别

  • HID Mouse:报告相对坐标位移,系统显示指针。
  • HID Touch:报告绝对坐标位置,系统视为直接触摸事件。

目前,该HID Touch方案在安卓手机上已验证成功。在苹果iOS设备上的支持情况,取决于沁恒蓝牙协议栈的后续更新。

总结

本文介绍了基于沁恒CH585蓝牙SoC开发手机蓝牙遥控器的两种实现思路:利用成熟的HID鼠标协议快速实现基本功能,或采用更专业的HID触控协议获得原生触控体验。这为嵌入式开发爱好者提供了一个结合具体应用场景(如懒人刷视频)的实战项目,同时也涉及了操作系统中外设协议的基本工作原理。对于希望在移动应用交互硬件层面进行创新的开发者来说,这是一个很好的入门实践。




上一篇:高超音速导弹的民企量产之路:深度解析成本控制与供应链创新
下一篇:银狐远控源码安全分析:识别与清除第三方依赖库后门实战
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-12 08:56 , Processed in 0.114137 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

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