5286| 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毫米。 |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed