常用通讯协议
DFRobot 串口通信协议支持一主多从方式,通讯由主机发起,从机应答主机的命令。 主机不需要地址,每个从机都有一个1字节的地址。0xAB为广播地址,使用该地址,所有级联的从机都会响应。通信命令帧格式[*]命令格式:
帧头目的地址数据长度命令字数据校验和
0x550xAA1字节1字节1字节数据1~数据n1字节
[*]应答格式:与命令格式相同;其中“目的地址” 为 “源地址”,“命令字”为返填主机发来的命令字。
下面以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 bps0x01: 波特率为2400 bps0x02: 波特率为4800 bps0x03: 波特率为9600 bps0x04: 波特率为14400 bps0x05: 波特率为19200 bps0x06: 波特率为28800 bps0x07: 波特率为38400 bps0x08: 波特率为57600 bps0x09: 波特率为115200 bps0x0A: 波特率为128000 bps0x0B: 波特率为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毫米。
页:
[1]