PB00003-DFRobot UART 通讯协议 V1.0
DFRobot 串口通信协议
支持一主多从方式,通讯由主机发起,从机应答主机的命令。 主机不需要地址,每个从机都有一个1字节的地址。0xAB为广播地址,使用该地址,所有级联的从机都会响应。
通信命令帧格式
- 命令格式:
帧头 | 目的地址 | 数据长度 | 命令字 | 数据 | 校验和 | |
0x55 | 0xAA | 1字节 | 1字节 | 1字节 | 数据1~数据n | 1字节 |
- 应答格式:与命令格式相同;其中“目的地址” 为 “源地址”,“命令字”为返填主机发来的命令字。
下面以DFRobot出品的超声波为例做为讲解:
命令字定义
命令字 | 功能说明 | 命令-数据长度(字节) | 命令-数据 | 应答-数据长度(字节) | 应答-数据 |
0x02 | 读取测量测距 | 0 | 无 | 2 | 距离值,高位在前,单位mm |
0x03 | 读取温度 | 0 | 无 | 2 | 十倍温度值,高位在前,有符号数,单位摄氏度;实际温度值=十倍温度值/10 |
0x04 | 设置从机测量距离上限 | 2 | 距离值,高位在前,单位mm | 1 | 0xCC = 操作成功, 0xEE = 操作失败 |
0x05 | 读取从机测量距离上限 | 0 | 无 | 2 | 距离值,高位在前,单位mm |
0x08 | 设置从机通讯波特率 | 1 | 波特率标识,参见注(1) | 1 | 0xCC = 操作成功, 0xEE = 操作失败 |
0x55 | 设置从机地址 | 1 | 设置地址 | 1 | 0xCC = 操作成功, 0xEE = 操作失败 |
注(1):波特率标识说明
0x00: 波特率为1200 bps
0x01: 波特率为2400 bps
0x02: 波特率为4800 bps
0x03: 波特率为9600 bps
0x04: 波特率为14400 bps
0x05: 波特率为19200 bps
0x06: 波特率为28800 bps
0x07: 波特率为38400 bps
0x08: 波特率为57600 bps
0x09: 波特率为115200 bps
0x0A: 波特率为128000 bps
0x0B: 波特率为256000 bps
使用举例
读取测量测距
主机通过UART接口向超声波模块发送一帧命令,触发模块开始测距,然后返回距离值。
例如超声波模块地址为 0x11,则主机发送:
帧头---------0x55
帧头---------0xAA
目的地址-----0x11
数据长度-----0x00
超声波读取---0x02
校验和-------0x12
超声波模块应答为:0x55 0xAA 0x11 0x02 0x02 0x12 0x34 0x5A
其中数据: 0x12 为距离的高位数据,0x34 为距离的低位数据
距离值为 0x1234,单位为 毫米,即十进制4660毫米。
读取温度
主机通过UART接口读取超声波模块测得的当前温度。
例如超声波模块地址为 0x11,则主机发送
帧头---------0x55
帧头---------0xAA
目的地址-----0x11
数据长度-----0x00
温度读取-----0x03
校验和-------0x13
超声波模块应答为:0x55 0xAA 0x11 0x02 0x03 0x00 0xFF 0x14
其中数据: 0x00 为温度的高位数据,0xFF 为温度的低位数据
温度值为 0x00FF即十进制255,表示25.5摄氏度。
设置超声波模块地址
主机通过UART接口设置超声波模块地址。
例如设置超声波模块地址为 0x11,则主机发送
帧头---------0x55
帧头---------0xAA
目的地址-----0xAB (广播地址,使用原地址也可以)
数据长度-----0x01
命令---------0x55
设置地址-----0x11
校验和-------0x11
设置成功则超声波模块应答为:0x55 0xAA 0x11 0x01 0x55 0xCC 0x32
返回数据:0xCC——操作成功
从机地址设定成功后,模块将使用自己新地址给主机应答。
设置超声波模块波特率
主机通过UART接口设置超声波模块通信波特率。
例如超声波模块地址为 0x11,设置波特率为2400,则主机发送:
帧头---------0x55
帧头---------0xAA
目的地址-----0x11
数据长度-----0x01
命令---------0x08
波特率选择---0x05
校验和-------0x1E
设置成功则超声波模块应答为:0x55 0xAA 0x11 0x01 0x08 0xCC 0xE4
返回数据:0xCC——操作成功
设置超声波模块测量距离上限值
主机通过UART接口设置超声波模块测量距离上限值。可以根据不同的应用设定超声波模块测量距离上限,同时根据应用环境适当减小测量上限能够提高传感器数据输出刷新率。
例如超声波模块地址为 0x11,要设置测量上限3840(0x0F00)毫米,则主机发送:
帧头---------0x55
帧头---------0xAA
对方地址-----0x11
数据长度-----0x02
命令---------0x04
高字节-------0x0F
低字节-------0x00
校验和-------0x25
设置成功则超声波模块应答为:0x55 0xAA 0x11 0x00 0x04 0xCC 0xE0
返回数据:0xCC——操作成功
读取超声波模块测量距离上限值
主机通过UART接口读取超声波模块测量距离上限值。
例如超声波模块地址为 0x11,要读取该模块测量上限值,则主机发送:
帧头---------0x55
帧头---------0xAA
对方地址-----0x11
数据长度-----0x00
命令---------0x05
校验和-------0x15
超声波模块应答为:0x55 0xAA 0x11 0x02 0x05 0x0F 0x00 0x26
返回数据:0x0F00, 即十进制3840毫米。