STM32+ESP8266上传温湿度到onenet(HTTP)新手易懂指南

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

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

提取码:1234

文章来源地址https://uudwc.com/A/GYMd

原文地址:https://blog.csdn.net/qq_57202690/article/details/129484127

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年06月14日 16:25
基于AI的3DLUT系列论文分享
下一篇 2023年06月14日 16:25