当前位置:   article > 正文

STM32+ESP8266上传温湿度到onenet(HTTP)新手易懂指南_通过http方式向onenet发送温湿度

通过http方式向onenet发送温湿度

哎,上云很简单的,但是我花了好几天因为各种莫名其妙的错误耽误了大量时间。所有很有必要总结一下

咳咳。但是我也比新手好不了多少,以免误导新人,只教操作,理由核心不阐述,自己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成功

  1. POST /devices/1021097154/datapoints?type=3 HTTP/1.1
  2. api-key:=uojX7FWUuWZ8cgj=mGRy47Ando=
  3. Host:api.heclouds.com
  4. Content-Length:20
  5. {"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,简化与优化的好处就体现出来了。

  1. 在主函数或者其他函数里依顺序编写
  2. Usart_SendString(AT_AT,sizeof(AT_AT));//esp8266连接到那个串口就用那个串口发送
  3. delay();//延时函数
  4. Usart_SendString(AT+CWMODE,sizeof(AT+CWMODE));
  5. delay();//延时函数
  6. 。。。。。。(还有4条AT指令)

3、关键代码分析(最核心地方)

我们回想一下手动发送过程中,AT指令结束后做什么?

没错,就是发送你要传到云平台内容。

如何实现?构造json格式句式(原理和为什么,csdn找)

是不是感觉下面部分很相似,模板构造好了一半,但没有数据和长度

  1. POST /devices/1021097154/datapoints?type=3 HTTP/1.1
  2. api-key:=uojX7FWUuWZ8cgj=mGRy47Ando=
  3. Host:api.heclouds.com
  4. Content-Length:20
  5. {"temp_data":19.8}
  6. #define MASSAGE "POST /devices/1021097154/datapoints?type=3 HTTP/1.1 \
  7. \napi-key:=uojX7FWUuWZ8cgj=mGRy47Ando=\
  8. \nHost:api.heclouds.com\
  9. \nContent-Length:%d\
  10. \n\r\n "

数据构造

  1. void OneNet_SendData(void)
  2. {
  3. char buf[256];//申明一个char类型数组
  4. memset(buf, 0, sizeof(buf));//清空数组
  5. OneNet_FillBuf(buf);//核心,构建后半块的数据
  6. Usart2_SendString(buf,strlen(buf)); //这就是最后我们发送那一步
  7. }

strcpy,sprintf使用效果,csdn找很简单

  1. #define DEVID "1021097154"
  2. #define APIKEY "=uojX7FWUuWZ8cgj=mGRy47Ando="
  3. void OneNet_FillBuf(char *buf)
  4. {
  5. char text[24];
  6. char buf1[128];
  7. memset(text, 0, sizeof(text));
  8. memset(buf1, 0, sizeof(buf1));
  9. strcpy(buf1, "{");
  10. memset(text, 0, sizeof(text));
  11. sprintf(text, "\"Temperature\":%d,",(int)dht_data[2]);
  12. strcat(buf1, text);
  13. memset(text, 0, sizeof(text));
  14. sprintf(text, "\"Humidity\":%d",(int)dht_data[0]);
  15. strcat(buf1, text);
  16. strcat(buf1, "}");
  17. sprintf(buf, "POST /devices/%s/datapoints?type=3 HTTP/1.1\r\napi-key:%s\r\nHost:api.heclouds.com\r\n"
  18. "Content-Length:%d\r\n\r\n",
  19. DEVID, APIKEY, strlen(buf1));
  20. strcat(buf, buf1);
  21. }

然后就结束了,结果就是将上面最开始手动敲代码过程转化为事先写好,单片机自己执行过程。使用以上代码就可以实现stm32温湿度上云。

主函数代码,我延时函数不正常所有看起来多,除去延时函数,主函数只有6行代码。

可以代码参考,看看优化后的逻辑。新手看不懂。需要耐心一行一行读。

链接:https://pan.baidu.com/s/1iK41x2e_0_Gnkm9IKKc0KQ

提取码:1234

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/397961
推荐阅读
相关标签
  

闽ICP备14008679号