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发送指令,同时考虑调用的时效性,请合理利用状态机,并尽量不要在中断函数中添加任何具有阻塞性质的代码(比较典型的就是延时函数)。