通信前提--数据格式的定义
写在最前面
华清远见教育集团
15年专注高端IT培训
做良心教育,做专业教育,做受人尊敬的职业教育创客学院官网:http://www.makeru.com.cn/
华清远见创客学院嵌入式课程链接:http://www.makeru.com.cn/emb
华清远见创客学院物联网课程链接:http://www.makeru.com.cn/iot
正文
为了完成通信双方的交互,要有一种通信协议,将通过数据包的形式进行数据传递。一方将数据进行数据的打包发送,另一方接收数据包进行拆包分析;由于整个项目有两个方向的数据流,即硬件层开始的对上进行数据的上报,用户层开始的对下进行命令的发送。在C语言总可以通过结构体将数据封装。
(发送方)发出一定格式的数据包 ---> (接收方)按照相同的格式进行拆包
对下下发对硬件控制的数据流(命令)
命令总长一个字节,不用构造结构体。仓库编号 + 设备编号 + 操作掩码 = 命令
例如:
0x40 + 0x00 + 0x01 = 0x41 风扇一档
0x40 + 0x30 + 0x08 = 0x78 数码管显示8
0x40 + 0x30 + 0x0f = 0x7f 关闭数码管
对上上报传感器采集的数据流(数据)
环境结构体包含:数据头+数据类型+仓库号+温度+湿度+三轴加速+光度+电量+ADC
(24个字节)
-
struct sendEnv
-
{
-
uint8_t head[3];//标识位st:
-
uint8_t type; //数据类型
-
uint8_t snum; //仓库编号
-
uint8_t temp[2]; //温度
-
uint8_t hum[2]; //湿度
-
uint8_t x; //三轴信息
-
uint8_t y;
-
uint8_t z;
-
uint32_t ill; //光照
-
uint32_t bet; //电池电量
-
uint32_t adc; //电位器信息
-
};
-
-
RFID商品识别结构体包含:数据头、数据类型、仓库号、I/O、商品编号、商品数量
-
(8个字节)
-
struct sendGoods
-
{
-
uint8_t head[3]; //标识位st:
-
uint8_t type; //数据类型
-
uint8_t snum; //仓库编号
-
uint8_t io; //进出仓库
-
uint8_t goodsno; //商品编号
-
uint8_t goodsnum; //商品数量
-
};
-
-
-
typedef struct storage_info
-
{
-
char index[2];
-
unsigned char storage_status; // Storage No.
-
unsigned char led_status; // Device status.
-
unsigned char buzzer_status; // Device status.
-
unsigned char key_status; // Device status.
-
signed char x; // A value detected by Sensor MPU6050.
-
signed char y; // A value detected by Sensor MPU6050.
-
signed char z; // A value detected by Sensor MPU6050.
-
float temperature; // The current temperature of curtain reposity.
-
float temperatureMIN; // The lowest limit to temperature for curtain reposity.
-
float temperatureMAX; // The highest limit to temperature for curtain reposity.
-
float humidity; // The current humidity of curtain reposity.
-
float humidityMIN; // The lowest limit to humidity for curtain reposity.
-
float humidityMAX; // The highest limit to humidity for curtain reposity.
-
float illumination; // The strength of lightnss.
-
float illuminationMIN; // The lowest limit to strength of lightnss for curtain reposity.
-
float illuminationMAX; // The highest limit to strength of lightnss for curtain reposity.
-
struct storage_goods_info goods_info[GOODS_NUM]; // Goods info for all types of goods.
-
} __attribute__((packed)) REPO_ENV;
这里使用 __attribute__ 是为了 将来要定义的结构体变量中的成员进行内存对齐。如果要使用编译器默认的对齐规则的话,会造成内存的浪费,故而这里使用内存对齐的方法。
文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/feit2417/article/details/84898279
- 点赞
- 收藏
- 关注作者
评论(0)