物联网4G模块WH-LTE-7S1上传float类型数据至有人云流程详解

有人云平台使用流程

  1. 首先,注册有人云平台的账号
  2. 其次,并对云平台进行配置。
  3. 最后,通过配置软件对4G模块进行配置

云平台配置具体步骤及配置软件配置过程可参考此博客:https://blog.csdn.net/zrcucvbjk/article/details/134756690?fromshare=blogdetail&sharetype=blogdetail&sharerId=134756690&sharerefer=PC&sharesource=qq_52167751&sharefrom=from_link

重点:如何通过有人云上传float数据(上面的博客只说明了整形数据的上传)

1、根据以下指令格式:


有人云(V6.0.1)主动上报测试-济南有人物联网技术有限公司官网 (usr.cn)https://m.usr.cn/Faq/1663.html

WH-L101-L有人云云端采集–不采集主动上报案例-济南有人物联网技术有限公司官网 (usr.cn)

及例子:

01 46 00 00 00 01 02 00 25 E2 9D

  • 01 代表从设备地址
  • 46 代表寄存器单元类型
  • 00 00 为起始地址
  • 00 01为寄存器单元长度
  • 02 为数据长度
  • 00 25为数据 转换成10进制就是37
  • E2 9D为CRC16校验(可在下方输入框中输入数据自动完成校验)
  • 可以知道寄存器的宽度为16位即两字节(一个寄存器存了两个字节)

    2、根据上面博客的步骤,在添加变量时选择"32位浮点数(AB CD)"


    同时,如果你想要设置多个float类型变量,注意将寄存器以1、3、5…的形式去选择,原因就是float类型变量占4字节,而一个寄存器可以保存两个字节,因此需要两个寄存器保存一个float类型数据。

    3、最后,上报数据格式如下(以两个float类型数据为例):

    01 46 00 00 00 04 08 ** ** ** ** ^^ ^^ ^^ ^^ xx xx

  • 01 代表从设备地址
  • 46 代表寄存器单元类型
  • 00 00 为起始地址
  • 00 04为寄存器单元长度
  • 08 为数据长度
  • ** ** ** ** 表示第一个float类型数据(需先转为十六进制)
  • ^^ ^^ ^^ ^^ 表示第二个flaot类型数据(需先转为十六进制)
  • xx xx为CRC16校验(可在下方输入框中输入数据自动完成校验)
  • 4、float类型数据转U8类型(注意:代码中已经进行了大小端转换,如果自己写注意要进行大小端转换):

    //data:需要转换的float数据
    //arr:数据转换完成后的存储地址
    void FloatToUint8(float data,uint8_t *arr){
    	uint8_t *p=(uint8_t*)&data;
    	for(uint8_t i=0;i<4;i++){
    		*(arr + 3 - i)=*(p+i);
    	}
    }
    

    5、CRC校验代码:

    /****************************************************************************************
    功  能:计算CRC校验位的值
    参  数:1:*buffer:数据的第一个字节   buffer:数据的首地址 
    		2:len:数据长度
    返回值:CRC校验值
    ****************************************************************************************/
    
    uint8_t CRC_L,CRC_H;
    
    uint16_t GetCRCData(uint8_t *buffer,uint8_t len)
    {
    	uint16_t wcrc = 0xFFFF;					//16位CRC寄存器预置
    	uint8_t temp;
    	uint8_t i = 0, j = 0;						//计数
    	for (i = 0; i < len; i++)						//循环计算每个数据
    	{
    		temp = *buffer & 0x00FF;					//将八位数据与crc寄存器亦或
    		buffer++;									//指针地址增加,指向下个数据
    		wcrc ^= temp;								//将数据存入crc寄存器
    		for (j = 0; j < 8; j++)						//循环计算数据的
    		{
    			if (wcrc & 0x0001)						//判断右移出的是不是1,如果是1则与多项式进行异或。
    			{
    				wcrc >>= 1;							//先将数据右移一位
    				wcrc ^= 0xA001;						//与上面的多项式进行异或
    			}
    			else									//如果不是1,则直接移除
    			{
    				wcrc >>= 1;							//直接移除
    			}
    		}
    	}
    							//定义数据高低位
    	CRC_L = wcrc & 0xFF;							//CRC的低8位
    	CRC_H = wcrc >> 8;								//CRC的高8位
    	return((CRC_L << 8) | CRC_H);
    }
    

    作者:蓝色机器猫

    物联沃分享整理
    物联沃-IOTWORD物联网 » 物联网4G模块WH-LTE-7S1上传float类型数据至有人云流程详解

    发表回复