最近在弄51单片机检测温湿度后上传到阿里云,遇到一下一些问题:
在编写esp8266上传云端的代码时,发现要发送的float类型在做了一些简单的处理后就无法上传到云端了。
一下是我一开始上传云端的代码:
(arduino部分)
//ESP8266串口接收数据与数据处理函数
void Serial_Rece_Process(void)
{
unsigned char i =0;
unsigned char sg = 0;
while (Serial.available())
{
Serial_Buf[Rx_Cnt] = Serial.read();
Rx_Cnt++;
delay(3);
}
if (Rx_Cnt != 0)
{
AliyunIoTSDK::send("temperature",atof(Serial_Buf));
AliyunIoTSDK::send("Humidity",atof(Serial_Buf));
Rx_Cnt = 0;
//此处放置串口数据处理等代码
}
}
(keil部分)
sprintf(usart_SendTemp,"%d.%d \r\n",rec_dat[2],rec_dat[3]);
sprintf(usart_SendHump,"%d.%d \r\n",rec_dat[0],rec_dat[1]);
Uart_SendStrData(usart_SendTemp);
delay_ms(3);
Uart_SendStrData(usart_SendHump);
这段代码可以成功上传阿里云,但是不可以区分到温湿度:
为了尝试区分温湿度,我把代码改成了这样:
(arduino部分)
//ESP8266串口接收数据与数据处理函数
void Serial_Rece_Process(void)
{
unsigned char i =0;
unsigned char sg = 0;
while (Serial.available())
{
Serial_Buf[Rx_Cnt] = Serial.read();
Rx_Cnt++;
delay(3);
}
if (Rx_Cnt != 0)
{
if(Serial_Buf[0] == 't')
{
for(i=0;i<=Rx_Cnt-2;i++)
{
Serial_Buf[i]=Serial_Buf[i+2];
}
AliyunIoTSDK::send("temperature",atof(Serial_Buf));
}
if(Serial_Buf[0] == 'h')
{
for(i=0;i<=Rx_Cnt-2;i++)
{
Serial_Buf[i]=Serial_Buf[i+2];
}
AliyunIoTSDK::send("Humidity",atof(Serial_Buf));
}
Rx_Cnt = 0;
//此处放置串口数据处理等代码
}
}
(keil部分)
sprintf(usart_SendTemp,"t=%d.%d \r\n",rec_dat[2],rec_dat[3]);
sprintf(usart_SendHump,"h=%d.%d \r\n",rec_dat[0],rec_dat[1]);
Uart_SendStrData(usart_SendTemp);
delay_ms(3);
Uart_SendStrData(usart_SendHump);
但是这样,上传数据到阿里云上就会失败,阿里云接收不到数据,不知道时什么原因
不知道你这个问题是否已经解决, 如果还没有解决的话: