KM2S键鼠模块串口通信协议-V1.0

目录

2. 通信说明

        2.1接线说明

3. 帧格式说明

3.1 普通键盘/0x01

8字节键盘数据:

3.2 相对坐标鼠标/0x02

3.3 多媒体键盘/0x03

3.2.1 ACPI键

3.2.2 其他多媒体键

3.4 绝对坐标鼠标/0x04

3.5 VID及PID

3.5.1 修改VID及PID/0x10

3.5.2 读取VID及PID/0x20

3.6 键盘指示灯/0x55

1. 概述

版本号变更范围变更内容修改人
V1.0文档建立初稿Knight20
v 1.13.6章1.新增读取键盘灯状态指令Knight20

KM2S模块为串口TTL转USB键盘鼠标模块,把串口接收到的指令转成标准USB键盘鼠标数据发送给电脑。KM2S模块支持普通键盘、多媒体键盘、相对坐标鼠标、绝对坐标鼠标功能。

普通键盘:支持所有多功能键(ctrl/alt/shift)+6个普通按键(a/b/1/2/,/.)同时按下;

多媒体键盘:静音、音量+、音量-、关机、休眠、唤醒、计算器等等;

相对坐标鼠标:鼠标移动时是根据光标当前位置进行移动,例如当前位置为(100,100),向右移动50像素,光标就会移动到(150,100);

绝对坐标鼠标:鼠标可以精准移动到任何指定坐标,不管当前光标在哪里;绝对坐标需要知道屏幕分辨率才能精准移动。

KM2S模块:https://item.taobao.com/item.htm?spm=a213gs.20824378.0.0.731a7a861N3CDs&id=671312111906

XCOM V2.6串口调试助手下载链接:https://pan.baidu.com/s/1u2twAZfLwNY0CRoKJvTakw 
提取码:1234

2. 通信说明

KM2S模块串口为TTL类型(不是232串口),通信结构框图如下:

 通信波特率为57600,1位停止位,8位数据位,无校验位

2.1接线说明

如果使用电脑发送指令,需要配合USB转TTL模块进行接线;KM2S模块和串口模块可以插同一台电脑;串口模块插入电脑后,电脑会识别出串口号,在串口调试助手打开此串口号发送数据即可;(如电脑未识别串口号,则安装CH340驱动)

 如果使用单片机发送数据,则把模块的TXD接单片机的RXD;模块的RXD接单片机的TXD;模块的GND接单片机的GND;模块的5V为对外输出5V供电,可以给单片机进行供电。

3. 帧格式说明

注:以下所有描述的数据均为16进制格式。

帧头命令码后续数据
2个字节1个字节N个字节

帧头:占两个字节,固定为0x57、0xAB;

命令码:占一个字节,普通键盘为0x01,多媒体键盘为0x03;相对坐标鼠标为0x02,绝对坐标鼠标为0x04;修改PID/VID为0x10,查询PID/VID为0x20;

后续数据:此长度根据命令码来决定

3.1 普通键盘/0x01

通过该命令向芯片发送普通键盘数据包,模拟普通按键按下或释放动作。 支持全键盘、组合键操作,可支持 8+6 个无冲突按键,其中 8 为 8 个控制键(左 Ctrl、 右 Ctrl、左 Shift、右 Shift、左Windows、右 Windows、左 Alt 和右 Alt), 6 为 6 个控制键之外的普通按键。

帧头帧头命令码后续数据
0x570xAB0x018个字节键盘数据

8字节键盘数据:

(1)第1个字节为控制键,每个位代表1个按键,1代表按下,0代表松开,具体如下:

bit7bit6bit5bit4bit3bit2bit1bit0

Windows键

Alt键

Shift键

Ctrl键

Windows键

Alt键

Shift键

Ctrl键

(2)第2个字节固定为0x00;

(3)第3-8个字节代表6个普通按键,最多可以表示 6 个按键按下,如果无按键按下则填写 0x00;普通按键的键码请下载键值对照表:

键值对照表链接:https://pan.baidu.com/s/1hs4tmFJgecZiuNFT4sGmCA 
提取码:1234

举例1:模拟先按下“A”键,再释放“A”键,则需要发送 2 个命令包为:

按下“A”键:57 AB 01 00 00 04 00 00 00 00 00

释放所有按键: 57 AB 01 00 00 00 00 00 00 00 00

举例 2:模拟先同时按下“左 Shift” +“A”键+“B”键,然后先释放“B”键,再释放“左 Shift” +“A”键,则需要发送 3 个命令包为:

同时按下“左 Shift” +“A”键+“B”键:57 AB 01 02 00 04 05 00 00 00 00

先释放“B”键(“左 Shift” +“A”键保持按下):57 AB 01 02 00 04 00 00 00 00 00

释放所有按键:57 AB 01 00 00 00 00 00 00 00 00

指令执行成功后,模块会返回0x01!

3.2 相对坐标鼠标/0x02

通过该命令向KM2S模块发送相对鼠标数据包,模拟相对鼠标相关动作(包括左中右键按下与释放、滚轮上下滚动、光标上下左右移动)。

帧头帧头命令码后续数据
0x570xAB0x024个字节相对坐标鼠标数据

4个字节相对坐标鼠标数据:

(1)第1个字节为鼠标按键数据,最低 3 位每位表示 1 个按键:

bit7bit6bit5bit4bit3bit2bit1bit0

0

0

0

0

0

中键

右键

左键

BIT2---BIT0:为 1 表示该键按下,为 0 表示该键释放或未按下。

(2)第2个字节为光标在X方向(左右方向)的移动距离:

  • 不动,字节2=0x00,光标在X轴方向不移动;
  • 向右移动,0x01<=字节2<=0x7F;移动像素点 = 字节 2;
  • 向左移动: 0x80 <= 字节 2 <= 0xFF; 移动像素点 = 0x100 - 字节 2;

(3)第3个字节为光标在Y方向(上下方向)的移动距离:

  • 不动,字节3=0x00,光标在Y轴方向不移动;
  • 向下移动,0x01<=字节3<=0x7F;移动像素点 = 字节 3;
  • 向上移动: 0x80 <= 字节 3 <= 0xFF; 移动像素点 = 0x100 - 字节 3;

(4)第4个字节为滚轮滚动齿数:

0x01---0x7F,表示滚轮向上滚动,0x01为向上滚动1齿;单位:齿数;
0x81---0xFF,表示滚轮向下滚动,0xFF为向下滚动1齿;单位:齿数;

举例1:模拟同时按下左,中,右键,再一起释放按键,则需要发送 2 个命令包为:

按下左,中,右键:57 AB 02 07 00 00 00

释放按键: 57 AB 02 00 00 00 00

举例2:模拟同时按下左键移动一段距离,再释放按键,则需要发送 3个命令包为:

按下左键:57 AB 02 01 00 00 00

向右移动100像素,向上移动50像素:57 AB 02 01 64 CE 00

释放按键: 57 AB 02 00 00 00 00

移动像素计算方法:

向右(下)移动距离:0x64(16进制)=100(10进制)

0x32(10进制)=50(10进制)

向上(左)移动距离:0xCE(16进制)=0x100(16进制) - 0x32(16进制)

指令执行成功后,模块会返回0x02!

 如果电脑移动的单位与实际单位不一致,需要关闭电脑的提高指针精准度功能,以及把指针移动速度设置在中间位置,如图:

3.3 多媒体键盘/0x03

通过该命令向芯片发送多媒体键盘数据包,模拟多媒体按键按下或释放动作。多媒体按键有两类,一类是ACPI键,主要为唤醒键、睡眠键、关机键三个按键;另一类为其他多媒体键,包含静音键、刷新键、计算器键等;

3.2.1 ACPI键

帧头帧头命令码ACPI键类后续数据
0x570xAB0x030x011字节ACPI按键数据

1字节ACPI按键数据:

bit7bit6bit5bit4bit3bit2bit1bit0

0

0

0

0

0

唤醒键

睡眠键

关机键

举例1:模拟按下睡眠键,再释放按键,则需要发送 2 个命令包为:

按下睡眠键:57 AB 03 01 02

释放按键: 57 AB 03 01 00

电脑进入睡眠后,可以通过发送唤醒键唤醒电脑;

举例2:模拟按下关机键,再释放按键,则需要发送 2 个命令包为:

按下关机键:57 AB 03 01 01

释放按键: 57 AB 03 01 00

其实关机键,不发送松开指令也是没问题的,因为关机了。

3.2.2 其他多媒体键

帧头帧头命令码键类后续数据
0x570xAB0x030x023字节多媒体按键数据

3字节多媒体按键数据:

bit7bit6bit5bit4bit3bit2bit1bit0
Byte1Eject

CD 

Stop

Prev.

Track

Next

Track

Play/

Pause

MuteVolume-Volume+
Byte2Refresh

WWW

Stop

WWW

Forward

WWW

Back

WWW

Home

WWW

Favorites

WWW

Search

E-Mail
Byte3RewindRecordMinimize

My

Computer

Screen

Save

CalculatorExplorerMedia

举例1:模拟按下音量减键,再释放按键,则需要发送 2 个命令包为:

按下音量减键:57 AB 03 02 02 00 00

释放按键: 57 AB 03 02 00 00 00

举例2:模拟按下计算器键,再释放按键,则需要发送 2 个命令包为:

按下调出计算器键:57 AB 03 02 00 00 04

释放按键: 57 AB 03 02 00 00 00

指令执行成功后,模块会返回0x03!

3.4 绝对坐标鼠标/0x04

通过该命令向KM2S模块发送绝对鼠标数据包,模拟绝对鼠标相关动作(包括左中右键按下与释放、滚轮上下滚动、光标移动位置)。

帧头帧头命令码后续数据
0x570xAB0x046个字节绝对坐标鼠标数据

6个字节绝对坐标鼠标数据:

(1)第1个字节为鼠标按键数据,与相对坐标鼠标功能一致;

(2)第2-3个字节为X轴坐标值,字节2为第字节,字节3为高字节;

(3)第4-5个字节为Y轴坐标值,字节4为第字节,字节5为高字节;

(4)第6个字节为滚轮滚动齿数,与相对坐标鼠标功能一致;

坐标计算方法:

芯片默认模拟的绝对鼠标分辨率为 4096 * 4096,外围串口设备下传 XY 绝对值时,需要先根据自身屏幕分辨率进行计算,再下传计算后的值;

例如当前屏幕分辨率为1920x1080,想让光标移动到(1000,500)的位置:

X = (4096*1000)/ 1920 = 2133(10进制)= 0x0855(16进制);字节2=0x55,字节3=0x08;

Y = (4096*500)/ 1080 = 1896(10进制)= 0x0768(16进制);字节4=0x68,字节5=0x07;

例如当前屏幕分辨率为1280x768,想让光标移动到(100,30)的位置:

X = (4096*100)/ 1280 = 320(10进制)= 0x0140(16进制);字节2=0x40,字节3=0x01;

Y = (4096*30)/ 768 = 160(10进制)= 0x00A0(16进制);字节4=0xA0,字节5=0x00;

举例1:模拟按下左键,再释放按键,则需要发送 2 个命令包为:

按下左键:57 AB 04 01 00 00 00 00 00

释放按键: 57 AB 04 00 00 00 00 00 00

举例2:屏幕分辨率1920x1080,光标移动到(1000,500),则需要发送1个命令包为:

移动到(1000,500):57 AB 04 00 55 08 68 07 00

指令执行成功后,模块会返回0x04!

3.5 VID及PID

VID为厂商ID,PID为产品ID;正常使用无需修改,如有特殊用途,可以自定义进行修改;

注:切勿任意修改VID,某些VID会导致系统不识别,例如VID=0x0000等;

3.5.1 修改VID及PID/0x10

帧头帧头命令码VIDPID
0x570xAB0x102字节VID2字节PID

指令执行成功后,模块会返回0x10,并自动重启!

3.5.2 读取VID及PID/0x20

读取指令格式:

帧头帧头命令码
0x570xAB0x20

返回数据格式:

命令码VIDPID
0x202字节2字节

3.6 键盘指示灯/0x55

本指令用于读取当前键盘灯的状态

读取指令格式:

帧头帧头命令码
0x570xAB0x55

返回数据格式:

命令码键盘灯状态
0x551字节

1字节键盘灯状态含义:

bit3-7bit2bit1bit0
保留Scr lockCaps lockNum lock

位1代表灯亮,位0 代表灯灭;

例如:

当只有Num lock灯亮时,此值为0x01;

当只有Caps lock灯亮时,此值为0x02;

当只有Scr lock灯亮时,此值为0x04;

当Num lock 和Caps lock都亮,Scr lock灭时,此值为0x03;

当Num lock 和Scr lock都亮,Caps lock灭时,此值为0x05;

当三个都亮时,此值为0x07。

  • 0
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knight-20

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值