11-STM32物聯(lián)網(wǎng)開發(fā)WIFI(ESP8266)+GPRS(Air202)系統(tǒng)方案升級(jí)篇(遠(yuǎn)程升級(jí)STM32程序,基于WIFI(AT指令TCP透?jìng)?,STM32主動(dòng)升級(jí)版)

https://www.cnblogs.com/yangfengwu/p/10858262.html


視頻教程

https://www.bilibili.com/video/av55149706


請(qǐng)先自行補(bǔ)充基礎(chǔ)內(nèi)容 ?

https://www.cnblogs.com/yangfengwu/p/6921832.html


https://www.cnblogs.com/yangfengwu/category/1383497.html1-3節(jié)


?終于可以了,8266AT指令版本,實(shí)現(xiàn)遠(yuǎn)程升級(jí)單片機(jī)程序....主要問題是兩個(gè)printf離得太近,wifi當(dāng)成一個(gè)數(shù)據(jù)了





先說明一下,如果自己不是用的8266應(yīng)該修改的地方,由于只是IAP程序里面實(shí)現(xiàn)的升級(jí),所以只需要修改IAP程序就可以,大家可以在用戶程序里面實(shí)現(xiàn)自己的具體功能,如果想升級(jí),就復(fù)位一下單片機(jī)就可以


其實(shí)程序和上一版并沒有太大改動(dòng)...連解析協(xié)議都沒動(dòng),只是修改鏈接TCP的函數(shù)而已













還有個(gè)地方需要注意:http數(shù)據(jù)解析的地方


我現(xiàn)在用的是8266透?jìng)鲗?shí)現(xiàn)的,也就是說,網(wǎng)絡(luò)回給8266什么數(shù)據(jù),8266就發(fā)給單片機(jī)什么數(shù)據(jù),不摻雜任何其他東西





如果自己的模塊回復(fù)的整個(gè)數(shù)據(jù)是這樣也可以


XXXXXX ?http數(shù)據(jù) http數(shù)據(jù) ?http數(shù)據(jù) ? ? ??


這樣的不可以


XXXXXX http數(shù)據(jù) XXXX http數(shù)據(jù) ?XXXX http數(shù)據(jù)


需要在這里剔除,...算了,我再做一版.....下一節(jié)吧





這是我的數(shù)據(jù)解析部分


void USART1_IRQHandler(void)? ? ? ? ? ? ? ? ? ? //′??ú1?D??·t??3ìDò

{

? ? u8 Res;

? ? if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

? ? {

? ? ? ? Res =USART_ReceiveData(USART1);? ? //?áè??óê?μ?μ?êy?Y


? ? ? ? if(Usart1ReadCnt < 399)

? ? ? ? {

? ? ? ? ? ? Usart1ReadBuff[Usart1ReadCnt] = Res;

? ? ? ? }

? ? ? ? else

? ? ? ? {

? ? ? ? ? ? Usart1ReadCnt=0;

? ? ? ? }

? ? ? ? Usart1ReadCnt ++;? ? //êy?Y??êy

? ? ? ? Usart1IdleCnt = 0;

? ? ? ? /*?óê??üD?3ìDò*/

? ? ? ? if(UpdateStartFlage == 1)

? ? ? ? {

? ? ? ? ? ? if(UpdateOverflow==0)

? ? ? ? ? ? {

? ? ? ? ? ? ? if(PutData(&Res,1) == -1)//沒有溢出

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? UpdateOverflow = 1;//溢出

? ? ? ? ? ? ? ? }? ?

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? else//?y3£êy?Y

? ? ? ? {

? ? ? ? ? ? //HTTP/1.1 200 OK

? ? ? ? ? ? //HTTP/1.1 400 Bad Request

? ? ? ? ? ? if(!Usart1ReadHttpHeadOK)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? if(Res=='H' && Usart1ReadHttpHeadCnt==0)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='T' && Usart1ReadHttpHeadCnt==1)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='T' && Usart1ReadHttpHeadCnt==2)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='P' && Usart1ReadHttpHeadCnt==3)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='/' && Usart1ReadHttpHeadCnt==4)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='1' && Usart1ReadHttpHeadCnt==5)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='.' && Usart1ReadHttpHeadCnt==6)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='1' && Usart1ReadHttpHeadCnt==7)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res==' ' && Usart1ReadHttpHeadCnt==8)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='2' && Usart1ReadHttpHeadCnt==9)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='0' && Usart1ReadHttpHeadCnt==10)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='0' && Usart1ReadHttpHeadCnt==11)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res==' ' && Usart1ReadHttpHeadCnt==12)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='O' && Usart1ReadHttpHeadCnt==13)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='K' && Usart1ReadHttpHeadCnt==14){Usart1ReadHttpHeadOK = 1;Usart1ReadHttpHeadCnt=0;Usart1ReadHttpDataLength=0;}?

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? Usart1ReadHttpHeadCnt=0;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? //Content-Length: XXXXXXXX

? ? ? ? ? ? if(Usart1ReadHttpHeadOK && !Usart1ReadHttpDataLengthOK)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? if(Res=='-' && Usart1ReadHttpHeadCnt==0)? ? Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='L' && Usart1ReadHttpHeadCnt==1)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='e' && Usart1ReadHttpHeadCnt==2)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='n' && Usart1ReadHttpHeadCnt==3)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='g' && Usart1ReadHttpHeadCnt==4)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='t' && Usart1ReadHttpHeadCnt==5)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res=='h' && Usart1ReadHttpHeadCnt==6)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res==':' && Usart1ReadHttpHeadCnt==7)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res==' ' && Usart1ReadHttpHeadCnt==8)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Usart1ReadHttpHeadCnt>=9 && Usart1ReadHttpHeadCnt<=16 )//數(shù)據(jù)設(shè)置的最大是99999999個(gè)字節(jié)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? if(Res!=0x0D)

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? Usart1ReadHttpDataLength = Usart1ReadHttpDataLength*10 + Res - '0';

? ? ? ? ? ? ? ? ? ? ? ? Usart1ReadHttpHeadCnt++;


? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? Usart1ReadHttpDataLengthOK = 1;

? ? ? ? ? ? ? ? ? ? ? ? Usart1ReadHttpHeadCnt = 0;


? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? Usart1ReadHttpHeadCnt = 0;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? //0D 0A 0D 0A

? ? ? ? ? ? if(Usart1ReadHttpHeadOK && Usart1ReadHttpDataLengthOK && Usart1ReadHttpDataLength && !Usart1ReadHttpHeadEndOK)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? if(Res==0x0D && Usart1ReadHttpHeadCnt==0)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res==0x0A && Usart1ReadHttpHeadCnt==1)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res==0x0D && Usart1ReadHttpHeadCnt==2)Usart1ReadHttpHeadCnt++;

? ? ? ? ? ? ? ? else if(Res==0x0A && Usart1ReadHttpHeadCnt==3){Usart1ReadHttpHeadEndOK = 1;PCout(13) =1;}

? ? ? ? ? ? ? ? else Usart1ReadHttpHeadCnt = 0;

? ? ? ? ? ? }

? ? ? ? }


? ? ? ? if(Usart1ReadHttpHeadEndOK == 1)//http 頭解析完成

? ? ? ? {

? ? ? ? ? ? Usart1ReadHttpHeadEndOK=0;

? ? ? ? ? ? Usart1ReadHttpHeadCnt = 0;

? ? ? ? ? ? Usart1ReadHttpDataLengthOK=0;

? ? ? ? ? ? if(Status==2)//詢問的是程序

? ? ? ? ? ? {

? ? ? ? ? ? ? ? UpdateStartFlage = 1;//把程序?qū)懭腈湵?/p>

? ? ? ? ? ? ? ? SysTickIdleTime = 5000;//超時(shí)時(shí)間大一點(diǎn)

? ? ? ? ? ? }

? ? ? ? }

? ? }

}




現(xiàn)在看使用


1,給Wi-Fi刷AT指令的固件.依照自己的模塊選擇





2,下載單片機(jī)程序(先看一下后面的說明再下載)





因?yàn)閃IFI需要聯(lián)網(wǎng),程序默認(rèn)加入了SmartConfig配網(wǎng)


可以先運(yùn)行APP的配網(wǎng),然后按下這個(gè)按鈕


配網(wǎng)APP直接用,就可以,也支持微信配網(wǎng)









?當(dāng)然如果不想配網(wǎng)可以




根據(jù)自己的修改




3,服務(wù)器


其實(shí)服務(wù)器上和上一節(jié)一樣,用戶程序沒有任何的改動(dòng),直接用上一節(jié)的就可以(記得修改為自己的IP地址哈)





我沒有再弄個(gè)單片機(jī)型號(hào),因?yàn)闆]有必要.......盡量不做重復(fù)的工作







?4,測(cè)試,非SmartConfig






下載





?去云端修改下版本









現(xiàn)在說一下SmartConfig的




SmartConfig的我只寫在了IAP程序里面


復(fù)位單片機(jī),(10S之前)按下這個(gè)PB5按鍵哈,,如果執(zhí)行了用戶程序就不可以了,大家自己可以把這個(gè)按鈕在用戶程序里面再實(shí)現(xiàn)一下這個(gè)功能也可以..



?大家可以復(fù)位單片機(jī)以后一直按著這個(gè)按鈕,

看到這個(gè)燈亮了再松開



?打開APP






?只要配上網(wǎng)其實(shí)就代替了



?用SmartConfig比較好一些,因?yàn)殪`活


https://www.cnblogs.com/yangfengwu/p/10886436.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蝗敢,更是在濱河造成了極大的恐慌影所,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敌呈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蚓胸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來除师,“玉大人沛膳,你說我怎么就攤上這事⊙淳郏” “怎么了锹安?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)倚舀。 經(jīng)常有香客問我叹哭,道長(zhǎng),這世上最難降的妖魔是什么痕貌? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任风罩,我火速辦了婚禮,結(jié)果婚禮上舵稠,老公的妹妹穿的比我還像新娘超升。我一直安慰自己入宦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布室琢。 她就那樣靜靜地躺著乾闰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盈滴。 梳的紋絲不亂的頭發(fā)上涯肩,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音巢钓,去河邊找鬼病苗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛竿报,可吹牛的內(nèi)容都是我干的铅乡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼烈菌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼阵幸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起芽世,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤挚赊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后济瓢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荠割,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年旺矾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蔑鹦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡箕宙,死狀恐怖嚎朽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柬帕,我是刑警寧澤哟忍,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站陷寝,受9級(jí)特大地震影響锅很,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凤跑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一爆安、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧仔引,春花似錦扔仓、人聲如沸致扯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鲤看,卻和暖如春缘揪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背义桂。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工找筝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慷吊。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓袖裕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親溉瓶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子急鳄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容