物联网4G模块WH-LTE-7S1上传float类型数据至有人云流程详解
有人云平台使用流程
- 首先,注册有人云平台的账号
- 其次,并对云平台进行配置。
- 最后,通过配置软件对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
可以知道寄存器的宽度为16位即两字节(一个寄存器存了两个字节)
2、根据上面博客的步骤,在添加变量时选择"32位浮点数(AB CD)"
同时,如果你想要设置多个float类型变量,注意将寄存器以1、3、5…的形式去选择,原因就是float类型变量占4字节,而一个寄存器可以保存两个字节,因此需要两个寄存器保存一个float类型数据。
3、最后,上报数据格式如下(以两个float类型数据为例):
01 46 00 00 00 04 08 ** ** ** ** ^^ ^^ ^^ ^^ xx xx
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);
}
作者:蓝色机器猫