哎,上云很簡單的,但是我花了好幾天因為各種莫名其妙的錯誤耽誤了大量時間。所有很有必要總結(jié)一下
咳咳。但是我也比新手好不了多少,以免誤導(dǎo)新人,只教操作,理由核心不闡述,自己csdn找。
一、首先創(chuàng)建個HTTP協(xié)議onenet云平臺(不會,就csdn里找,一堆堆)
對于初學(xué)者,最簡單的第一步,看直接效果,就這幾行代碼,第一行系統(tǒng)初始化,后面初始化2個串口,我因為不能直接將esp8266與串口1(CH340)直接相連,所有轉(zhuǎn)串口2。通過串口助手能看見直接效果。

二、然后下載到單片機里,打開串口調(diào)式助手(能用就行,安信可有快捷AT指令,csdn找有免費的,但是后來發(fā)現(xiàn)安可信AT指令方便,但是發(fā)送消息不方便,不建議使用,也可能是我不會操作)
AT(準備好了嗎?)
AT+CWMODE=1(有3種模式,區(qū)別csdn找)
AT+CWJAP="0606","12345678"(連接自己熱點,名字,密碼)
AT+CIPSTART="TCP","183.230.40.33",80(連接云平臺,有好幾種不同的)
AT+CIPMODE=1(開透傳)開與不開有區(qū)別的,理由csdn里找,開了簡單操作一些
AT+CIPSEND(準備發(fā)送)


安信可發(fā)送消息地方好窄,粘貼代碼過去還不行。我就換了一個正點原子的,csdn或者正點原子官網(wǎng)找,免費的。(如果發(fā)送沒反應(yīng),看看點沒點“換行發(fā)送”,一定要點)
最后發(fā)送下面代碼就可以看見以下結(jié)果,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}
模板,記住要改產(chǎn)品ID(1021097154)與api-key,發(fā)到我云平臺上,你們可是看不見哦
長度一定要一致,20指{"temp_data":19.8}長度,不對會報錯,符號也算長度
三、最后你就發(fā)現(xiàn)自己云平臺有數(shù)據(jù)了

是不是看完發(fā)現(xiàn)很簡單。接下來就是將以上過程變?yōu)榇a形式,就是stm32單片機作用。
四、代碼部分來了,準備好了嗎
1、首先你需要獲取溫濕度的代碼,如果你是其他傳感器,原理相通。(csdn找,一堆堆)
2、上云前初始化代碼(是不是沒看懂,因為只有部分代碼,截圖這一段理由是因為,有沒有發(fā)現(xiàn)跟我們之前手動輸入AT指令一樣的。就是一樣的,不過這是寫在程序里的,不用在執(zhí)行過程時候,我們手動再次敲寫)。上云代碼不多,但是簡化(美化)過后就看著多。

后續(xù)會提供代碼,實在無法理解原理,最簡單的就是一句一句發(fā)送
特別對于AT+CWJAP延時要充分,然后發(fā)送那6條AT指令,你就做到與上面一堆代碼一樣的事情。簡化(美化)好處,雖然看起來復(fù)雜,但安全性和抗干擾性會更強,但是為了方便學(xué)習(xí)理解,可以使用下面方法(看見busy(忙碌)就要重來過,后面就會直接報錯,重新調(diào)大延時函數(shù),簡單但麻煩)正常全是ok,延時過低就看見busy,簡化與優(yōu)化的好處就體現(xiàn)出來了。
在主函數(shù)或者其他函數(shù)里依順序編寫
Usart_SendString(AT_AT,sizeof(AT_AT));//esp8266連接到那個串口就用那個串口發(fā)送
delay();//延時函數(shù)
Usart_SendString(AT+CWMODE,sizeof(AT+CWMODE));
delay();//延時函數(shù)
。。。。。。(還有4條AT指令)

3、關(guān)鍵代碼分析(最核心地方)
我們回想一下手動發(fā)送過程中,AT指令結(jié)束后做什么?
沒錯,就是發(fā)送你要傳到云平臺內(nèi)容。
如何實現(xiàn)?構(gòu)造json格式句式(原理和為什么,csdn找)
是不是感覺下面部分很相似,模板構(gòu)造好了一半,但沒有數(shù)據(jù)和長度
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 "
數(shù)據(jù)構(gòu)造
void OneNet_SendData(void)
{
char buf[256];//申明一個char類型數(shù)組
memset(buf, 0, sizeof(buf));//清空數(shù)組
OneNet_FillBuf(buf);//核心,構(gòu)建后半塊的數(shù)據(jù)
Usart2_SendString(buf,strlen(buf)); //這就是最后我們發(fā)送那一步
}
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);
}
然后就結(jié)束了,結(jié)果就是將上面最開始手動敲代碼過程轉(zhuǎn)化為事先寫好,單片機自己執(zhí)行過程。使用以上代碼就可以實現(xiàn)stm32溫濕度上云。
主函數(shù)代碼,我延時函數(shù)不正常所有看起來多,除去延時函數(shù),主函數(shù)只有6行代碼。

可以代碼參考,看看優(yōu)化后的邏輯。新手看不懂。需要耐心一行一行讀。
鏈接:https://pan.baidu.com/s/1iK41x2e_0_Gnkm9IKKc0KQ 文章來源:http://www.zghlxwxcb.cn/news/detail-451231.html
提取碼:1234文章來源地址http://www.zghlxwxcb.cn/news/detail-451231.html
到了這里,關(guān)于STM32+ESP8266上傳溫濕度到onenet(HTTP)新手易懂指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!