上位机通讯协议1

preview
需积分: 0 0 下载量 109 浏览量 更新于2022-08-03 收藏 131KB PDF 举报
### 上位机通讯协议解析 #### 一、概述 本文档详细介绍了特定场景下的上位机通讯协议,涉及的关键信息包括连接配置、消息主题、数据格式以及消息处理逻辑等内容。此协议主要应用于智能车辆(例如树莓派控制的小车)与上位机之间的通信。 #### 二、连接信息 **Broker**: mqtt.gycis.me **端口**: 1883 **用户名**: smartcar **密码**: smartcar #### 三、消息主题 1. **路况信息**: `/smartcar/{mac}/traffic` 2. **起终点信息**: `/smartcar/{mac}/task` 3. **命令信息**: `/smartcar/{mac}/command` 4. **位置信息**: `/smartcar/{mac}/position` - `{mac}`: 指树莓派WLAN0接口MAC地址的后三位。例如,如果完整的MAC地址是`01:a2:34:56:78:9a`,那么用于构建消息主题的`{mac}`就是`01a2ee`。 #### 四、数据格式 - **基本格式**: 在MQTT协议上传输的payload全部为十六进制数组,即Python中的`bytes`类型数据。 - **具体格式**: - **路况信息**: - 每个record包含3个字节: - 第0个字节: 路段起点编号 - 第1个字节: 路段终点编号 - 第2个字节: 路段路况 - 路况字节`x`与小车行驶在该路段时电机获得的最高电压`y`的关系为`y = 12 - x(V)`,其中`x`取值范围为0~9,0表示完全不拥堵,9表示最拥堵。 - **起终点信息**: - payload为两个字节: - 第0字节: 起点编号 - 第1字节: 终点编号 - 此信息只在每轮比赛开始时发送一次,有效期为当前一轮比赛。 - **命令信息**: - payload为一个字节的十六进制数组: - `0x00`: 表示比赛开始 - `0x01`: 表示到达终点,比赛正常结束 - `0x02`: 表示小车冲出赛道等异常情况 - **位置信息**: - payload包含8个字节: - 第0字节: 当前所处路段的起点编号 - 第1字节: 当前所处路段的终点编号 - 第2、3字节: 小车距离起点的距离 - 第4、5字节: 在地图中X方向坐标 - 第6、7字节: 在地图中Y方向坐标 - 长度单位均为毫米(mm)。 #### 五、示例代码 以下是一个示例Python代码片段,展示了如何从系统中获取MAC地址,并构建消息主题: ```python import re # 获取MAC地址后三位 with open('/sys/class/net/wlan0/address') as f: mac = re.sub(r'.+((:\w\w){3})\n', r'\1', f.read()).replace(':', '') topic = f"/smartcar/{mac}/traffic" ``` #### 六、发送时间节点 - **比赛开始前**: - 选手将车模放置在赛道起点处,打开车模上的电机开关。 - 上位机会发送本轮比赛的起终点信息。 - **比赛开始时**: - 上位机会发送开始命令。 - 控制电机电源打开。 - **比赛过程中**: - 上位机会循环发送位置信息和路况信息。 - 位置信息会以最快的速度实时发送。 - 路况信息约每5-10秒刷新一次。 - **比赛结束时**: - 上位机会发送结束命令。 - 强制关闭电机电源。 #### 七、数据解析示例 假设接收到的位置信息payload为`0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08`,则可以解析为: - 路段起点编号: `0x01` - 路段终点编号: `0x02` - 小车距离起点距离: `0x04 * 0xFF + 0x03 = 1027mm` - 小车X坐标: `0x06 * 0xFF + 0x05 = 15365mm` - 小车Y坐标: `0x08 * 0xFF + 0x07 = 20487mm` 通过上述解析过程,可以清晰地了解到上位机通讯协议的具体细节及其应用场景,为实际开发提供了明确的指导。
甜甜不加糖
  • 粉丝: 38
  • 资源: 322
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜

最新资源