LLQ-82-ESP32 固件说明#
前言#
该程序是直接修改于`ble_hid_device_demo`,本人在此添加了串口和协议
使用说明#
注意本人并没有完成`ESP32`的电池电量更新和键盘`Lock`指示功能,但是在协议中预留了接口,你可以尝试修改修改程序以获取`PC`端的 `lock`指示灯状态、和尝试添加电池服务,将电池电量更新到`PC`蓝牙指示图标。
消息类型#
#define UART_REPORT_ID_MOUSE 0X01//鼠标消息
#define UART_REPORT_ID_KEY 0X02//键盘消息
#define UART_REPORT_ID_MEDIA 0X03//媒体消息
#define UART_REPORT_ID_INFO 0X04//自定义消息
ESP32-UART 配置#
ESP32-TX 协议说明#
ESP32-RX 协议说明#
report id 与 hid_buff[8]#
UART_REPORT_ID_MOUSE#
鼠标每次发送 4 个字节
BYTE1 –
bit7: 1 表示 Y 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出
bit6: 1 表示 X 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出
bit5: Y 坐标变化的符号位,1表示负数,即鼠标向下移动
bit4: X 坐标变化的符号位,1表示负数,即鼠标向左移动
bit3: 恒为1
bit2: 1表示中键按下
bit1: 1表示右键按下
bit0: 1表示左键按下
BYTE2 – X坐标变化量,与byte的bit4组成9位符号数,负数表示向左移,正数表右移。用补码表示变化量
BYTE3 – Y坐标变化量,与byte的bit5组成9位符号数,负数表示向下移,正数表上移。用补码表示变化量
BYTE4 – 滚轮变化。
UART_PARITY_DISABLE(键盘 8 字节)#
键盘发送给 PC 的数据每次 8 个字节
BYTE0 BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7
定义分别是:
BYTE0 --
--bit0: Left Control是否按下,按下为1 |
| --bit1: Left Shift 是否按下,按下为1 |
| --bit2: Left Alt 是否按下,按下为1 |
| --bit3: Left GUI 是否按下,按下为1 |
| --bit4: Right Control是否按下,按下为1 |
| --bit5: Right Shift 是否按下,按下为1 |
| --bit6: Right Alt 是否按下,按下为1 |
| --bit7: Right GUI 是否按下,按下为1 |
BYTE1 -- 暂不清楚,有的地方说是保留位 BYTE2--BYTE7 -- 这六个为普通按键 键盘经过测试。
UART_REPORT_ID_MEDIA(媒体)#
媒体发送给 PC 的数据每次 2 个字节;发送一次按下后需再发送弹起以清空。
BYTE0 -- key_cmd -> 媒体按键
BYTE1 -- key_pressed -> 是否按下
ESP32S3媒体支持
#define HID_CONSUMER_PLAY 176 // Play
#define HID_CONSUMER_SCAN_NEXT_TRK 181 // Scan Next Track
#define HID_CONSUMER_SCAN_PREV_TRK 182 // Scan Previous Track
#define HID_CONSUMER_VOLUME_UP 233 // Volume Increment
#define HID_CONSUMER_VOLUME_DOWN 234 // Volume Decrement
#define HID_CONSUMER_MUTE 226 // Mute
#define HID_CONSUMER_PAUSE 177 // Pause
#define HID_CONSUMER_STOP 183 // Stop
#define HID_CONSUMER_POWER 48 // Power
#define HID_CONSUMER_RECALL_LAST 131 // Recall Last
#define HID_CONSUMER_ASSIGN_SEL 129 // Assign Selection
#define HID_CONSUMER_RECORD 178 // Record
#define HID_CONSUMER_FAST_FORWARD 179 // Fast Forward
#define HID_CONSUMER_REWIND 180 // Rewind
#define HID_CONSUMER_CHANNEL_UP 156 // Channel Increment
#define HID_CONSUMER_CHANNEL_DOWN 157 // Channel Decrement
自定义功能#
你可以添加 0X01~0X04 以外的消息用于扩展自身应用,而不会影响键盘的功能
#define UART_REPORT_ID_MOUSE 0X01//鼠标消息
#define UART_REPORT_ID_KEY 0X02//键盘消息
#define UART_REPORT_ID_MEDIA 0X03//媒体消息
#define UART_REPORT_ID_INFO 0X04//自定义消息
例如你可以使用 UART_REPORT_ID_WIFI 0X05 来扩展wifi应用,例如ESP32点灯、遥控小车等等,而这一部分每个用户都不一样,因此此部分的代码,需要你自己开发,不过值得注意的是,请不要超过消息长度,默认定长收发为12字节,完全可以满足控制需求。而函数的调用通过STM32发送指令,同时考虑调用的时效性,请合理利用状态机,并尽量不要在中断函数中添加任何具有阻塞性质的代码(比较典型的就是延时函数)。