哎,上云很简单的,但是我花了好几天因为各种莫名其妙的错误耽误了大量时间。所有很有必要总结一下
咳咳。但是我也比新手好不了多少,以免误导新人,只教操作,理由核心不阐述,自己csdn找。
一、首先创建个HTTP协议onenet云平台(不会,就csdn里找,一堆堆)
对于初学者,最简单的第一步,看直接效果,就这几行代码,第一行系统初始化,后面初始化2个串口,我因为不能直接将esp8266与串口1(CH340)直接相连,所有转串口2。通过串口助手能看见直接效果。
二、然后下载到单片机里,打开串口调式助手(能用就行,安信可有快捷AT指令,csdn找有免费的,但是后来发现安可信AT指令方便,但是发送消息不方便,不建议使用,也可能是我不会操作)
AT(准备好了吗?)
AT+CWMODE=1(有3种模式,区别csdn找)
AT+CWJAP="0606","12345678"(连接自己热点,名字,密码)
AT+CIPSTART="TCP","183.230.40.33",80(连接云平台,有好几种不同的)
AT+CIPMODE=1(开透传)开与不开有区别的,理由csdn里找,开了简单操作一些
AT+CIPSEND(准备发送)
安信可发送消息地方好窄,粘贴代码过去还不行。我就换了一个正点原子的,csdn或者正点原子官网找,免费的。(如果发送没反应,看看点没点“换行发送”,一定要点)
最后发送下面代码就可以看见以下结果,succ成功
POST /devices/1021097154/datapoints?type=3 HTTP/1.1
api-key:=uojX7FWUuWZ8cgj=mGRy47Ando=
Host:api.heclouds.com
Content-Length:20
{"temp_data":19.8}
模板,记住要改产品ID(1021097154)与api-key,发到我云平台上,你们可是看不见哦
长度一定要一致,20指{"temp_data":19.8}长度,不对会报错,符号也算长度
三、最后你就发现自己云平台有数据了
是不是看完发现很简单。接下来就是将以上过程变为代码形式,就是stm32单片机作用。
四、代码部分来了,准备好了吗
1、首先你需要获取温湿度的代码,如果你是其他传感器,原理相通。(csdn找,一堆堆)
2、上云前初始化代码(是不是没看懂,因为只有部分代码,截图这一段理由是因为,有没有发现跟我们之前手动输入AT指令一样的。就是一样的,不过这是写在程序里的,不用在执行过程时候,我们手动再次敲写)。上云代码不多,但是简化(美化)过后就看着多。
后续会提供代码,实在无法理解原理,最简单的就是一句一句发送
特别对于AT+CWJAP延时要充分,然后发送那6条AT指令,你就做到与上面一堆代码一样的事情。简化(美化)好处,虽然看起来复杂,但安全性和抗干扰性会更强,但是为了方便学习理解,可以使用下面方法(看见busy(忙碌)就要重来过,后面就会直接报错,重新调大延时函数,简单但麻烦)正常全是ok,延时过低就看见busy,简化与优化的好处就体现出来了。
在主函数或者其他函数里依顺序编写
Usart_SendString(AT_AT,sizeof(AT_AT));//esp8266连接到那个串口就用那个串口发送
delay();//延时函数
Usart_SendString(AT+CWMODE,sizeof(AT+CWMODE));
delay();//延时函数
。。。。。。(还有4条AT指令)
3、关键代码分析(最核心地方)
我们回想一下手动发送过程中,AT指令结束后做什么?
没错,就是发送你要传到云平台内容。
如何实现?构造json格式句式(原理和为什么,csdn找)
是不是感觉下面部分很相似,模板构造好了一半,但没有数据和长度
POST /devices/1021097154/datapoints?type=3 HTTP/1.1
api-key:=uojX7FWUuWZ8cgj=mGRy47Ando=
Host:api.heclouds.com
Content-Length:20
{"temp_data":19.8}
#define MASSAGE "POST /devices/1021097154/datapoints?type=3 HTTP/1.1 \
\napi-key:=uojX7FWUuWZ8cgj=mGRy47Ando=\
\nHost:api.heclouds.com\
\nContent-Length:%d\
\n\r\n "
数据构造
void OneNet_SendData(void)
{
char buf[256];//申明一个char类型数组
memset(buf, 0, sizeof(buf));//清空数组
OneNet_FillBuf(buf);//核心,构建后半块的数据
Usart2_SendString(buf,strlen(buf)); //这就是最后我们发送那一步
}
strcpy,sprintf使用效果,csdn找很简单
#define DEVID "1021097154"
#define APIKEY "=uojX7FWUuWZ8cgj=mGRy47Ando="
void OneNet_FillBuf(char *buf)
{
char text[24];
char buf1[128];
memset(text, 0, sizeof(text));
memset(buf1, 0, sizeof(buf1));
strcpy(buf1, "{");
memset(text, 0, sizeof(text));
sprintf(text, "\"Temperature\":%d,",(int)dht_data[2]);
strcat(buf1, text);
memset(text, 0, sizeof(text));
sprintf(text, "\"Humidity\":%d",(int)dht_data[0]);
strcat(buf1, text);
strcat(buf1, "}");
sprintf(buf, "POST /devices/%s/datapoints?type=3 HTTP/1.1\r\napi-key:%s\r\nHost:api.heclouds.com\r\n"
"Content-Length:%d\r\n\r\n",
DEVID, APIKEY, strlen(buf1));
strcat(buf, buf1);
}
然后就结束了,结果就是将上面最开始手动敲代码过程转化为事先写好,单片机自己执行过程。使用以上代码就可以实现stm32温湿度上云。
主函数代码,我延时函数不正常所有看起来多,除去延时函数,主函数只有6行代码。
可以代码参考,看看优化后的逻辑。新手看不懂。需要耐心一行一行读。
链接:https://pan.baidu.com/s/1iK41x2e_0_Gnkm9IKKc0KQ 文章来源:https://www.toymoban.com/news/detail-451231.html
提取码:1234文章来源地址https://www.toymoban.com/news/detail-451231.html
到了这里,关于STM32+ESP8266上传温湿度到onenet(HTTP)新手易懂指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!