通信前提--数据格式的定义

举报
王建峰 发表于 2021/11/19 03:17:15 2021/11/19
【摘要】 写在最前面 华清远见教育集团 15年专注高端IT培训 做良心教育,做专业教育,做受人尊敬的职业教育 创客学院官网:http://www.makeru.com.cn/ 华清远见创客学院嵌入式课程链接:http://www.makeru.com.cn/emb 华清远见创客学院物联网课程链接:http://www.makeru.c...

写在最前面

华清远见教育集团
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个字节)


  
  1. struct sendEnv
  2. {
  3.     uint8_t head[3];//标识位st:
  4.     uint8_t type;       //数据类型
  5.     uint8_t snum;       //仓库编号
  6.     uint8_t temp[2]; //温度
  7.     uint8_t hum[2];  //湿度
  8.     uint8_t x;      //三轴信息
  9.     uint8_t     y;             
  10.     uint8_t     z;             
  11.     uint32_t ill;     //光照
  12.     uint32_t bet;     //电池电量
  13.     uint32_t adc;  //电位器信息
  14. };
  15. RFID商品识别结构体包含:数据头、数据类型、仓库号、I/O、商品编号、商品数量
  16. 8个字节)
  17. struct sendGoods
  18. {
  19.     uint8_t head[3]; //标识位st:
  20.     uint8_t type;        //数据类型
  21.     uint8_t snum;        //仓库编号
  22.     uint8_t io;        //进出仓库
  23.     uint8_t goodsno;  //商品编号
  24.     uint8_t goodsnum; //商品数量
  25. };
  26. typedef struct storage_info
  27. {
  28.     char index[2];
  29.     unsigned char storage_status;     // Storage No.
  30.     unsigned char led_status;          // Device status.
  31.     unsigned char buzzer_status;  // Device status.
  32.     unsigned char key_status;      // Device status.
  33.     signed char x;                 // A value detected by Sensor MPU6050.
  34.     signed char y;                 // A value detected by Sensor MPU6050.
  35.     signed char z;                 // A value detected by Sensor MPU6050.
  36.     float temperature;                 // The current temperature of curtain reposity.
  37.     float temperatureMIN;             // The lowest limit to temperature for curtain reposity.
  38.     float temperatureMAX;             // The highest limit to temperature for curtain reposity.
  39.     float humidity;             // The current humidity of curtain reposity.
  40.     float humidityMIN;             // The lowest limit to humidity for curtain reposity.
  41.     float humidityMAX;             // The highest limit to humidity for curtain reposity.
  42.     float illumination;             // The strength of lightnss.
  43.     float illuminationMIN;                 // The lowest limit to strength of lightnss for curtain reposity.
  44.     float illuminationMAX;                 // The highest limit to strength of lightnss for curtain reposity.
  45.     struct storage_goods_info goods_info[GOODS_NUM];     // Goods info for all types of goods.
  46. } __attribute__((packed)) REPO_ENV;


这里使用 __attribute__ 是为了 将来要定义的结构体变量中的成员进行内存对齐。如果要使用编译器默认的对齐规则的话,会造成内存的浪费,故而这里使用内存对齐的方法。

文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/feit2417/article/details/84898279

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。