2019物联网学习总结

XFS5152ce语音识别:

其是将一些特定的语言固定在芯片,然后我们只需要发送:

0XFD 0X00 0X01 0X10  //开启发送0x10,停止第4位发送0x1F

                

XFS5152ce就会自动识别匹配内部存在的语言,若有则返回识别的ID号:

0xFC [(0Xxx) (0Xxx)数据区长度] [0x01 识别ID号(0xXX)数据区]

                 

XFS5152ce语音合成播报:

void XFS_FrameInfo(char *HZdata)
{ 
/****************需要发送的文本**********************************/ 
		unsigned  char  Frame_Info[50]; //定义文本长度 xdata          
         unsigned  int  HZ_Length;  

//	     unsigned  int i=0; 
		 HZ_Length =strlen(HZdata); 			//需要发送的文本长度
 		 
/*****************Ö¡¹Ì¶¨ÅäÖÃÐÅÏ¢**************************************/           
		 Frame_Info[0] = 0xFD ; 			//帧头FD
		 Frame_Info[1] = 0x00 ; 			//数据区长度高字节
		 Frame_Info[2] = HZ_Length+2; 		//数据区长度低字节
		 Frame_Info[3] = 0x01 ; 			//命令字		 		 
		 Frame_Info[4] = 0x01;             //文本编码格式 
 
/*******************发送帧信息***************************************/		  
         memcpy(&Frame_Info[5], HZdata, HZ_Length);
		 PrintCom(Frame_Info,5+HZ_Length); //发送帧数据
}

                  

串口发送长串数据:

void PrintCom(uint8_t *DAT,uint8_t len)
{
	uint8_t i;
	for(i=0;i<len;i++)
	{
	   USART_SendData(USART3,*DAT++);
		 while(USART_GetFlagStatus(USART3, USART_FLAG_TC)==RESET);
	}	
}

新大陆平台数据上传与解析:

解析平台数据做相应的任务:

先判断命令请求,再判断控制号,得到是控制台,解析控制台下发的数据,再执行任务,完成任务后,响应服务器

          

if(strstr((const char *)RxBuf, (const char *)"\"t\":5") != NULL)//是否为命令请求
{
    if(strstr((const char *)RxBuf, (const char *)"\"apitag\":\"bool_work\"") != NULL)
        //读取控制号对应为在平台上添加传感器时的标识名
    {
      if((strstr((const char *)RxBuf, (const char *)"\"data\":1") != NULL))//读取数据
       {
           //对应任务函数调用
           duty();
           //命令响应告诉服务器是否处理成功 status为0成功1失败
           cmdid = USER_GetJsonValue((char *)RxBuf, (char *)"cmdid");
		   sprintf((char *)TxetBuf,"{\"t\":6,\"cmdid\":%s,\"status\":0,\"data\":1}",cmdid);

		   if(ESP8266_IpSend((char *)TxetBuf, strlen((char *)TxetBuf)) < 0)
				{
					printf("上传失败");
				}
       }
    }

}

上传数据到新大陆平台:

先将数据上传到服务器,如果发送成功,则等待服务器响应,判断是否响应成功,如果响应成功,则上传成功。

并且上传的格式有三种:

总格式:
{
	"t": 3,	//固体数字3,代表数据上报	
	"datatype":1  //具体为datas属性内的 传感数据格式类型,如下
                  //= 1:JSON格式1字符串;
                  //= 2:JSON格式2字符串;
                  //= 3:JSON格式3字符串;
	"datas":      //有三种
	"msgid": 123  //消息编号由客户端生成的一个用于表示该条报文的编号,用于服务器下发“上报响应”时原  
                  //样带回
}


该属性根据datatype类型的不同,可以上报多个传感器数据,也可以上报同一传感器的多条数据,其中
apitag1为传感的标识名,value为传感值,可以是数字、浮点、字符串等

数据类型为1(JSON格式1字符串):
"datas":
{ 
"apitag1": "value1",
"apitag2": value2,
…
}

数据类型为2(JSON格式2字符串):
apitag1与value数据格式同上,datetime1须是yyyy-mm-dd hh:mm:ss格式
"datas":
{ 
"apitag1":{"datetime1":"value1"},
"apitag2": {"datetime2":"value2"},
…
}

数据类型为3(JSON格式3字符串)示例:
value数据格式同上,
dt须是yyyy-mm-dd hh:mm:ss格式
"datas":
[
{ 
"apitag":"temperature",
"datapoints":
[
{
"dt":"2018-01-22 22:22:22",  //可选
"value": 36.5  //数字浮点字符串
}
]
},
{ 
"apitag": "location",
"datapoints":
[…]
},
{ … }
]

                                         

int8_t ESP8266_SendSensor(char *SensorTag, char *TimeStr, uint16_t sensor)
{
	uint8_t TryGo = 0;
	int8_t error = 0;
	uint8_t TxetBuf[MAX_AT_TX_LEN];
  
	memset(TxetBuf,0x00,MAX_AT_TX_LEN);//清空缓存
	sprintf((char *)TxetBuf,"{\"t\":3,\"datatype\":2,\"datas\":{\"%s\":{\"%s\":%d}},\"msgid\":001}",SensorTag, TimeStr, sensor);
    if(ESP8266_IpSend((char *)TxetBuf, strlen((char *)TxetBuf)) < 0)
	{//发送失败
		error=-1;
	}
    else
	{ //发送成功
		for(TryGo = 0; TryGo<50; TryGo++)//最多等待50*10=500ms
		{
			if(strstr((const char *)AT_RX_BUF, (const char *)"\"status\":0") == NULL)//检查响应状态是否为成功;
			{
				error = -1;
			}
			else
			{
				error = 0;
				break;
			}
			delay_ms(10);
		}
	}
    ClrAtRxBuf();                                  //清空缓存区
    return error;
}

在这中间其中有几个函数值得关注如:

memset(TxetBuf,0x00,MAX_AT_TX_LEN);//清空缓存

sprintf((char *)TxetBuf,"{\"t\":6,\"cmdid\":%s,\"status\":0,\"data\":1}",cmdid);

strstr((const char *)RxBuf, (const char *)"\"t\":5")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值