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

写在最前面

华清远见教育集团
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__ 是为了 将来要定义的结构体变量中的成员进行内存对齐。如果要使用编译器默认的对齐规则的话,会造成内存的浪费,故而这里使用内存对齐的方法。

全部评论

相关推荐

就前几天旅游的时候,打开抖音就经常刷到这类视频:以前是高学历学生、老师、主持人,现在做着团播、擦边主播的工作,以及那些经过精心包装的“职业转型”故事——从铺天盖地的VLOG到所谓的“04年夜场工作日记”,这些内容在初中升学、高考放榜等关键时间节点持续发酵。可以说非常直接且精准地在潜移默化地影响着心智尚未成熟的青少年,使其对特殊行业逐渐脱敏。那我就想问了:某些传播公司、平台运营者甚至某些夜场的老板,你们究竟在传递怎样的价值观?点开那些视频,评论区里也是呈现明显的两极分化:一种是​​经济下行论​​:“现在就业市场已经艰难到这种程度了吗?”​​一种是事实反驳派​​:这些创作者往往拥有名校背景,从事着...
牛客刘北:被环境教育的,为了能拿到足够的钱养活自己,不甘心也得甘心,现在的短视频传播的思想的确很扭曲,但是很明显,互联网玩上一年你就能全款提A6,但你全心全意不吃不喝工作一年未必能提A6,但是在高考中考出现这个的确很扭曲,在向大家传播“不上学,玩互联网也可以轻松年入百万”,不是人变了,是社会在变
预测一下26届秋招形势
点赞 评论 收藏
分享
06-26 17:24
已编辑
宁波大学 Java
迷失西雅图:别给,纯kpi,别问我为什么知道
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务