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毫米。