亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種基于ESP8266與USART HMI的通用WIFI物聯(lián)網(wǎng)接入方式

        2018-01-07 11:02:02盧光鈺
        科學(xué)與技術(shù) 2018年6期

        盧光鈺

        摘要:本文在USART HMI串口觸摸屏、正點(diǎn)原子MINI STM32F103RCT6單片機(jī)開(kāi)發(fā)板、正點(diǎn)原子WIFI模塊ATK-ESP8266的硬件基礎(chǔ)上,通過(guò)C語(yǔ)言malloc函數(shù)動(dòng)態(tài)分配內(nèi)存存儲(chǔ)WIFI賬號(hào)密碼的基本方法,解決了8266靈活動(dòng)態(tài)輸入WIFI賬號(hào)密碼問(wèn)題,從而提高了以8266模塊為核心的物聯(lián)網(wǎng)客戶(hù)端設(shè)備的實(shí)用性。

        關(guān)鍵詞: ESP8266;WIFI;malloc;USART HMI

        物聯(lián)網(wǎng)作為進(jìn)行信息交換和通信的新型平臺(tái),其基礎(chǔ)技術(shù)在于客體(信息、物體、數(shù)據(jù)等)與互聯(lián)網(wǎng)的連接。ESP8266 系列模組是安信可(Ai-thinker)公司采用樂(lè)鑫ESP8266芯片開(kāi)發(fā)的一系列WIFI模組模塊,專(zhuān)為移動(dòng)設(shè)備、可穿戴電子產(chǎn)品和物聯(lián)應(yīng)用設(shè)計(jì)。ESP8266(以下簡(jiǎn)稱(chēng)8266)在TCP client透?jìng)髂J?,即客?hù)端模式下,可以通過(guò)單片機(jī)串口輸入一系列AT指令進(jìn)行操作,連接WIFI網(wǎng)絡(luò)與遠(yuǎn)端服務(wù)器相互通訊,從而完成數(shù)據(jù)上傳的功能?;静襟E為:

        1.單片機(jī)向8266輸入AT+CWMODE=1;(設(shè)置8266為STA模式)

        2.輸入AT+RST;(8266重啟)

        3.輸入AT+CWJAP=”SSID”,”11111111”;(輸入WIFI賬號(hào)密碼)

        4.輸入AT+CIPSTART=”TCP”,"183.230.40.33",80;(輸入遠(yuǎn)端服務(wù)器IP與端口號(hào),此處為中移動(dòng)ONEnet物聯(lián)網(wǎng)平臺(tái)IP與端口號(hào))

        5.輸入AT+CIPMODE=1;(開(kāi)啟透?jìng)髂J剑?/p>

        6.輸入AT+CIPSEND;(開(kāi)始透?jìng)鳎?/p>

        7.輸入網(wǎng)絡(luò)報(bào)文信息。

        在步驟3中,WIFI的賬號(hào)密碼要事先在單片機(jī)程序中確定,當(dāng)8266連接到其他WIFI網(wǎng)絡(luò)時(shí),需要在源程序中更改賬號(hào)密碼,再燒入單片機(jī)中,在很大程度上影響了8266設(shè)備的通用性與便利性。

        本文在USART HMI串口觸摸屏、正點(diǎn)原子MINI STM32F103RCT6單片機(jī)開(kāi)發(fā)板、正點(diǎn)原子WIFI模塊ATK-ESP8266的硬件基礎(chǔ)上,通過(guò)C語(yǔ)言malloc函數(shù)動(dòng)態(tài)分配內(nèi)存存儲(chǔ)WIFI賬號(hào)密碼的基本方法,解決了8266靈活動(dòng)態(tài)輸入WIFI賬號(hào)密碼問(wèn)題,從而提高了以8266模塊為核心的物聯(lián)網(wǎng)客戶(hù)端設(shè)備的實(shí)用性,具體方法如下文所示。

        1 USART HMI觸摸屏功能設(shè)計(jì)

        USART HMI觸摸屏是一款以STM32F030CRT6為核心的可編程LCD電容式觸摸屏,用戶(hù)可以通過(guò)USART HMI上位軟件對(duì)其進(jìn)行編程,運(yùn)用按鈕、進(jìn)度條、切圖、文本等組件,實(shí)現(xiàn)對(duì)下位單片機(jī)的控制、采樣、顯示等功能,觸摸屏與單片機(jī)之間通過(guò)RXTX串口進(jìn)行通信。本文中的USART HMI有兩大基本功能:1,將外置傳感器的參數(shù)顯示在主界面上;2,點(diǎn)擊主界面右下角“WIFI”按鈕時(shí),進(jìn)入WIFI登錄界面,輸入賬號(hào)密碼,點(diǎn)擊”O(jiān)K”,USART HMI將賬號(hào)密碼信息通過(guò)串口3上傳給單片機(jī)并切回到主界面。如圖1、2所示:

        USART HMI在上電時(shí),因?yàn)殡妷翰环€(wěn)定,可能會(huì)發(fā)送幾幀亂碼,影響單片機(jī)識(shí)別,所以設(shè)置觸摸屏初始化事件為“printh 0d 0a”,即發(fā)送兩幀結(jié)束符使單片機(jī)能夠接收完亂碼,不讓亂碼摻雜在正常數(shù)據(jù)代碼之中,后期在正常數(shù)據(jù)碼前端設(shè)置標(biāo)志幀使單片機(jī)能夠正確分辨。

        主界面的傳感器數(shù)據(jù)通過(guò)文本控件顯示,設(shè)置為n0,設(shè)置傳感器數(shù)據(jù)變量名稱(chēng)為k,則單片機(jī)輸入的命令為printf("n0.val=%d\xff\xff\xff",k),三個(gè)0xff為結(jié)束符,否則USART HMI不能識(shí)別。設(shè)置右下方圖片控件p0為WIFI圖標(biāo),彈起事件為“page 1”,即轉(zhuǎn)換到WIFI登陸界面。

        如圖3所示, WIFI登錄界面由SSID賬號(hào)輸入欄、PAS密碼輸入欄、0-9全數(shù)字鍵盤(pán)、A-Z全字母鍵盤(pán)、下劃線、中折線、CAP大小寫(xiě)切換按鍵、BS刪除鍵、OK發(fā)送鍵組成,能夠滿足一般WIFI賬號(hào)密碼輸入要求。SSID賬號(hào)與PAS密碼使用文本控件,用ASCII碼發(fā)送。設(shè)置一個(gè)切換變量va0,SSID按鈕與PAS按鈕改變va0的值,當(dāng)全鍵盤(pán)上的字母與數(shù)字鍵按下時(shí),判斷va0的值,決定按下的文本出現(xiàn)在SSID欄或者PAS欄中。另外設(shè)置一個(gè)變量va1,通過(guò)按鈕CAP鍵改變變量va1的值,設(shè)置一個(gè)黃色CAP鍵與一個(gè)紅色CAP鍵上下疊加,分別對(duì)應(yīng)一個(gè)不同的變量va1的值,一個(gè)CAP鍵按下時(shí),自身就通過(guò)vis命令隱藏,顯露出另一個(gè)CAP鍵,以實(shí)現(xiàn)CAP鍵切換以及字母大小寫(xiě)切換,字母按鈕按下時(shí),根據(jù)va1的值,來(lái)決定輸出字符的大小寫(xiě)。

        OK鍵按下時(shí),完成對(duì)賬號(hào)密碼信息的發(fā)送,按下事件中的代碼為:

        printh 4c 47 59/prints t0.txt,0/printh 22 2c 22/prints t1.txt,0/printh 22/printh 0d 0a

        page main

        例如當(dāng)SSID為123,PAS為111時(shí),發(fā)送的ASCII碼為:

        4c 47 59 31 32 33 22 2c 22 31 31 31 22 0d 0a

        即為L(zhǎng)GY123”,”111”,LGY為標(biāo)志位,代表此幀數(shù)據(jù)為正常數(shù)據(jù)而非亂碼。

        2 單片機(jī)C程序設(shè)計(jì)

        在stm32單片機(jī)中,AT指令是通過(guò)數(shù)組的形式發(fā)送的。在純C語(yǔ)言編程中,在定義數(shù)組的時(shí)候,必須同時(shí)定義數(shù)組的大小,因?yàn)镃語(yǔ)言本身沒(méi)有提供動(dòng)態(tài)數(shù)組這種數(shù)據(jù)結(jié)構(gòu)。但是不同用戶(hù)的SSID賬號(hào)與密碼長(zhǎng)度并不一致,如果定義一個(gè)比較長(zhǎng)的數(shù)組AT3[],將USART HMI傳來(lái)的信息強(qiáng)行賦值,會(huì)在數(shù)組尾部產(chǎn)生空位,使AT指令無(wú)效。

        因此,使用malloc函數(shù)解決此問(wèn)題,malloc函數(shù)是一種分配長(zhǎng)度為num_bytes字節(jié)的內(nèi)存塊的函數(shù),可以向系統(tǒng)申請(qǐng)分配指定size個(gè)字節(jié)的內(nèi)存空間。malloc的全稱(chēng)是memory allocation,中文叫動(dòng)態(tài)內(nèi)存分配,當(dāng)無(wú)法知道內(nèi)存具體位置的時(shí)候,想要綁定真正的內(nèi)存空間,就需要用到動(dòng)態(tài)的分配內(nèi)存。

        具體方法為:1,首先添加頭文件#include "stdlib.h",malloc函數(shù)在此頭文件中定義;2,定義指向數(shù)組AT3的指針char *AT3;定義整型變量WW,作為數(shù)組AT3的動(dòng)態(tài)長(zhǎng)度數(shù)值,在正點(diǎn)原子的串口例程中,定義串口3接收標(biāo)志變量USART3_RX_STA為u8型,前5位為串口3接收到的數(shù)組長(zhǎng)度,長(zhǎng)度可以通過(guò)length = USART3_RX_STA&0x3f;語(yǔ)句得到,而如前文所示,輸入賬號(hào)密碼的AT指令的前10位字段AT+CWJAP=”是固定不變的,然后再扣除3位標(biāo)志位”LGY”,可知AT3的長(zhǎng)度值WW=length+7。

        3,通過(guò)語(yǔ)句AT3=(char*)malloc(sizeof(int)*WW);即可完成定義動(dòng)態(tài)數(shù)組,相當(dāng)于定義char AT3[WW]。

        4,將AT+CWJAP=”依次賦值到AT3[0]到AT3[9],如AT3[0]=0x41;AT3[1]=0x54...直至AT3[9]=0x22; 最后通過(guò)雙循環(huán)賦值語(yǔ)句:

        for(i=10,j=3;i<7+length,j

        {

        AT3[i]=USART3_RX_BUF[j]; /*對(duì)數(shù)組進(jìn)行賦值操作*/

        }

        完成對(duì)AT3[WW]的定義賦值操作。

        最后說(shuō)明整個(gè)main函數(shù)的基本流程與單片機(jī)-ESP8266通訊的基本方法。當(dāng)單片機(jī)向ESP8266發(fā)送AT指令時(shí),ESP8266都會(huì)產(chǎn)生相應(yīng)的響應(yīng),如發(fā)送AT1:AT+CWMODE=1;(設(shè)置8266為STA模式)時(shí),8266會(huì)返回字符數(shù)組“OK”,如果單片機(jī)檢測(cè)到“OK”,說(shuō)明8266成功完成了AT1操作,單片機(jī)可以繼續(xù)發(fā)送AT2指令,以此類(lèi)推。當(dāng)最后開(kāi)始透?jìng)髦噶預(yù)T7[]={"AT+CIPSEND\r\n"};響應(yīng)成功之后,發(fā)送網(wǎng)絡(luò)報(bào)文:

        char postT[]={

        "POST /devices/39163308/datapoints?type=3 HTTP/1.1 \r\n"

        "api-key:E6uOnPTftKQX=KwIfO8BHnL63mg=\r\n"

        "Host:api.heclouds.com\r\n"

        "Content-Length:50\r\n"

        "\r\n"

        "{\"001\":50.5,\"002\":50.6,\"003\":506}\r\n"

        即可將傳感器數(shù)據(jù)發(fā)送至設(shè)備ID為39163308,

        api-key為E6uOnPTftKQX=KwIfO8BHnL63mg=的ONENET物聯(lián)網(wǎng)平臺(tái)應(yīng)用的數(shù)據(jù)流001、002、003中,此處數(shù)據(jù)固定為50.5、50.6和506.傳感器數(shù)據(jù)需要重新賦值到網(wǎng)絡(luò)報(bào)文數(shù)組相應(yīng)位中。id與api-key可在onenet平臺(tái)自由申請(qǐng),具體方法不贅述,最后需要注意設(shè)備供電應(yīng)該穩(wěn)定充足,否則8266不能正常工作。

        通過(guò)串口助手連接8266的TX端,監(jiān)控8266返回給單片機(jī)的響應(yīng)信息,如圖4、5所示,可見(jiàn)8266成功識(shí)別所有AT指令,并且成功與上位服務(wù)器連接,發(fā)送網(wǎng)絡(luò)報(bào)文。

        如圖6所示,ONENET物聯(lián)網(wǎng)平臺(tái)成功接收到了8266傳來(lái)的數(shù)據(jù)信息,實(shí)現(xiàn)了遠(yuǎn)程監(jiān)控功能。

        使用本文提出的方法,可以方便實(shí)現(xiàn)8266的WIFI連接,用戶(hù)不需要改寫(xiě)各戶(hù)端設(shè)備的源程序,自行在觸摸屏輸入SSID賬號(hào)與密碼即可,提高了8266設(shè)備的實(shí)用性。設(shè)備可以方便接入各種傳感器接口,采集溫濕度、甲醛含量、用電量等等,有很強(qiáng)通用性,工程技術(shù)人員可以參考使用。

        作者簡(jiǎn)介:夏云鑫,1994年2月18日,女,漢族,云南曲靖,云南藝術(shù)學(xué)院環(huán)境藝術(shù)設(shè)計(jì)全日制在讀研究生

        一区二区三区婷婷中文字幕| 欧美深夜福利网站在线观看| 狠狠躁夜夜躁av网站中文字幕| 亚洲综合伦理| 亚洲色欲久久久久综合网| 免费网站内射红桃视频| 精品人妻av中文字幕乱| 国产成人精品三级在线影院| 国产精品国产三级国av在线观看| 国产品精品久久久久中文| 国产伦精品一区二区三区| 色佬精品免费在线视频| 亚洲人成伊人成综合网中文| 肉体裸交丰满丰满少妇在线观看 | 北条麻妃在线视频观看| 亚洲国产精品综合久久网络 | 日韩精品久久久久久免费| 免费在线国产不卡视频| 无码精品a∨在线观看十八禁| 国产亚州精品女人久久久久久 | 9 9久热re在线精品视频| 男女交射视频免费观看网站| 国产精品综合色区av| 国产成人一区二区三中文| 亚洲av日韩综合一区在线观看| 亚洲av无码乱码国产麻豆| 国产高清大片一级黄色| 阿v视频在线| 国产精品后入内射日本在线观看 | av无码久久久久不卡网站下载| 亚洲日韩精品无码av海量| 国产精品一区av在线| 饥渴少妇一区二区三区| 亚欧同人精品天堂| 国产精品1区2区| 破了亲妺妺的处免费视频国产| 风流老太婆大bbwbbwhd视频| 亚洲av极品尤物不卡在线观看| 精品国内自产拍在线视频| 国产女人高潮视频在线观看| 亚洲国产精品国自产拍久久蜜av|