| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> KM2S键鼠模块串口通信协议-V1.0 -> 正文阅读 |
|
[嵌入式]KM2S键鼠模块串口通信协议-V1.0 |
目录
1. 概述KM2S模块为串口TTL转USB键盘鼠标模块,把串口接收到的指令转成标准USB键盘鼠标数据发送给电脑。KM2S模块支持普通键盘、多媒体键盘、相对坐标鼠标、绝对坐标鼠标功能。 普通键盘:支持所有多功能键(ctrl/alt/shift)+6个普通按键(a/b/1/2/,/.)同时按下; 多媒体键盘:静音、音量+、音量-、关机、休眠、唤醒、计算器等等; 相对坐标鼠标:鼠标移动时是根据光标当前位置进行移动,例如当前位置为(100,100),向右移动50像素,光标就会移动到(150,100); 绝对坐标鼠标:鼠标可以精准移动到任何指定坐标,不管当前光标在哪里;绝对坐标需要知道屏幕分辨率才能精准移动。 XCOM V2.6串口调试助手下载链接:https://pan.baidu.com/s/1u2twAZfLwNY0CRoKJvTakw? 2. 通信说明KM2S模块串口为TTL类型(不是232串口),通信结构框图如下: ?通信波特率为57600,1位停止位,8位数据位,无校验位 3. 帧格式说明注:以下所有描述的数据均为16进制格式。
帧头:占两个字节,固定为0x57、0xAB; 地址码:占一个字节,默认为0x00,可接收任意地址码的命令包,如果芯片地址设置成0x01---0xFE,则只能接收对应地址码或地址码为 0xFF 的命令包。 0xFF 为广播包,芯片不需要进行应答; 命令码:占一个字节,普通键盘为0x01,多媒体键盘为0x11;相对坐标鼠标为0x02,绝对坐标鼠标为0x12;修改PID/VID为0x20,查询PID/VID为0x21;修改地址码为0x22,查询地址码为0x23;查询芯片ID为0x24;复位为0x0F; 后续数据:此长度根据命令码来决定 3.1 普通键盘/0x01通过该命令向芯片发送普通键盘数据包,模拟普通按键按下或释放动作。 支持全键盘、组合键操作,可支持 8+6 个无冲突按键,其中 8 为 8 个控制键(左 Ctrl、 右 Ctrl、左 Shift、右 Shift、左Windows、右 Windows、左 Alt 和右 Alt), 6 为 6 个控制键之外的普通按键。
8字节键盘数据:(1)第1个字节为控制键,每个位代表1个按键,1代表按下,0代表松开,具体如下:
(2)第2个字节固定为0x00; (3)第3-8个字节代表6个普通按键,最多可以表示 6 个按键按下,如果无按键按下则填写 0x00;普通按键的键码请下载键值对照表: 键值对照表链接:https://pan.baidu.com/s/1hs4tmFJgecZiuNFT4sGmCA? 举例1:模拟先按下“A”键,再释放“A”键,则需要发送 2 个命令包为: 按下“A”键:57 AB 00 01 00 00 04 00 00 00 00 00 释放所有按键:?57 AB 00 01 00 00 00 00 00 00 00 00 举例 2:模拟先同时按下“左 Shift” +“A”键+“B”键,然后先释放“B”键,再释放“左 Shift” +“A”键,则需要发送 3 个命令包为: 同时按下“左 Shift” +“A”键+“B”键:57 AB 00 01 02 00 04 05 00 00 00 00 先释放“B”键(“左 Shift” +“A”键保持按下):57 AB 00 01 02 00 04 00 00 00 00 00 释放所有按键:57 AB 00 01 00 00 00 00 00 00 00 00 指令执行成功后,模块会返回0x01! 3.2 多媒体键盘/0x11通过该命令向芯片发送多媒体键盘数据包,模拟多媒体按键按下或释放动作。多媒体按键有两类,一类是ACPI键,主要为唤醒键、睡眠键、关机键三个按键;另一类为其他多媒体键,包含静音键、刷新键、计算器键等; 3.2.1 ACPI键
1字节ACPI按键数据:
举例1:模拟按下睡眠键,再释放按键,则需要发送 2 个命令包为: 按下睡眠键:57 AB 00 11 01 02 释放按键:?57 AB 00 01 01 00 电脑进入睡眠后,可以通过发送唤醒键唤醒电脑; 举例2:模拟按下关机键,再释放按键,则需要发送 2 个命令包为: 按下关机键:57 AB 00 11 01 01 释放按键:?57 AB 00 01 01 00 其实关机键,不发送松开指令也是没问题的,因为关机了。 3.2.2 其他多媒体键
3字节多媒体按键数据:
举例1:模拟按下音量减键,再释放按键,则需要发送 2 个命令包为: 按下音量减键:57 AB 00 11 02 02 00 00 释放按键:?57 AB 00 01 02 00 00 00 举例2:模拟按下计算器键,再释放按键,则需要发送 2 个命令包为: 按下调出计算器键:57 AB 00 11 02 00 00 04 释放按键:?57 AB 00 11 02 00 00 00 指令执行成功后,模块会返回0x11! ?3.3 相对坐标鼠标/0x02通过该命令向KM2S模块发送相对鼠标数据包,模拟相对鼠标相关动作(包括左中右键按下与释放、滚轮上下滚动、光标上下左右移动)。
4个字节相对坐标鼠标数据: (1)第1个字节为鼠标按键数据,最低 3 位每位表示 1 个按键:
BIT2---BIT0:为 1 表示该键按下,为 0 表示该键释放或未按下。 (2)第2个字节为光标在X方向(左右方向)的移动距离:
(3)第3个字节为光标在Y方向(上下方向)的移动距离:
(4)第4个字节为滚轮滚动齿数: 0x01---0x7F,表示滚轮向上滚动,单位:齿数; 举例1:模拟同时按下左,中,右键,再一起释放按键,则需要发送 2 个命令包为: 按下左,中,右键:57 AB 00 02 07 00 00 00 释放按键:?57 AB 00 02 00 00 00 00 举例2:模拟同时按下左键移动一段距离,再释放按键,则需要发送 3个命令包为: 按下左键:57 AB 00 02 01 00 00 00 向右移动100像素,向上移动50像素:57 AB 00 02 01 64 CE 00 计算方法: 向右(下)移动距离:0x64(16进制)=100(10进制) 0x32(10进制)=50(10进制) 向上(左)移动距离:0xCE(16进制)=0x100(16进制) - 0x32(16进制) 释放按键:?57 AB 00 02 00 00 00 00 指令执行成功后,模块会返回0x02! ?如果电脑移动的单位与实际单位不一致,需要关闭电脑的提高指针精准度功能,如图: 3.4 绝对坐标鼠标/0x12通过该命令向KM2S模块发送绝对鼠标数据包,模拟绝对鼠标相关动作(包括左中右键按下与释放、滚轮上下滚动、光标移动位置)。
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 00 12 01 00 00 00 00 00 释放按键:?57 AB 00 12 00 00 00 00 00 00 举例2:屏幕分辨率1920x1080,光标移动到(1000,500),则需要发送1个命令包为: 移动到(1000,500):57 AB 00 12 00 55 08 68 07 00 指令执行成功后,模块会返回0x12! 3.5 VID及PIDVID为厂商ID,PID为产品ID;正常使用无需修改,如有特殊用途,可以自定义进行修改; 3.5.1 修改VID及PID/0x20
指令执行成功后,模块会返回0x20,并自动重启! 3.5.2 读取VID及PID/0x21读取指令格式:
返回数据格式:
?3.6 地址码地址码为通信数据里面的地址字节,默认为0x00,可接收任意地址码的命令包,如果模块地址设置成0x01---0xFE,则只能接收对应地址码或地址码为 0xFF 的命令包。 0xFF 为广播包,KM2S模块不需要进行应答;设置成功后立即生效; 3.6.1 设置地址码/0x22设置地址码格式:
设置成功后会返回0x22及新地址码; 3.6.2 读取地址码/0x23读取指令格式:
返回数据格式:
?3.7 查询芯片ID/0X24芯片ID为四字节长度的芯片内置ID,无法修改且唯一,可用于识别模块; 读取指令格式:
返回数据格式:
?3.8 复位/0x0F复位指令可控制KM2S模块进行软复位,不需要拔插设备;系统复位前会先发送普通键盘、多媒体键盘、相对鼠标和绝对鼠标所有按键松开指令; |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:24:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |