無(wú)線模塊的AT指令UDP透?jìng)髟O(shè)計(jì)
作者 / 黃玉金1,2 楊越1,2 薛偉1,2 張?zhí)斐?sup>3
本文引用地址:http://www.ex-cimer.com/article/201712/373591.htm1.中國(guó)地質(zhì)大學(xué)(武漢)自動(dòng)化學(xué)院(湖北 武漢 430074)
2.復(fù)雜系統(tǒng)先進(jìn)控制與智能自動(dòng)化湖北省重點(diǎn)實(shí)驗(yàn)室(湖北 武漢 430074)
3.武漢朗德電氣有限公司(湖北 武漢 430223)
*基金項(xiàng)目:國(guó)家自然科學(xué)基金(編號(hào):61503350)
黃玉金(1978-),碩士,講師,研究方向:無(wú)損檢測(cè)技術(shù)和智能儀器設(shè)計(jì)。
摘要:ESP8266是一款國(guó)產(chǎn)的性能穩(wěn)定、價(jià)格低廉的串口與WiFi橋接器,本文對(duì)單片機(jī)與ESP8266的接口模型和用AT指令配置ESP8266的UDPWiFi SoC,它具有低功耗、緊湊設(shè)計(jì)和高穩(wěn)定性的特點(diǎn)。ESP8266擁有完整的且自成體系的 WiFi 網(wǎng)絡(luò)功能,既能夠獨(dú)立應(yīng)用(集成了32位處理器,帶片上SRAM),也可以用作串口-WiFi橋接模塊,配合其他主機(jī) MCU運(yùn)行。
在獨(dú)立應(yīng)用時(shí),集成的處理器通過(guò)GPIO可以和外部傳感器或模塊進(jìn)行接口,樂(lè)鑫提供了專門軟件開發(fā)方案,其一下游模塊生產(chǎn)商安信可(AI-Thinker)提供了Windows下的GUI方式的IDE實(shí)現(xiàn)SDK編程[1]。這種方法需要用戶對(duì)ESP8266及其編程有相當(dāng)?shù)睦斫猓话阈枰^長(zhǎng)的學(xué)習(xí)和開發(fā)周期。
當(dāng)ESP8266用作橋接模塊配合單片機(jī)(如8051兼容單片機(jī)、ARM Cortex M0、M3等)使用時(shí),可以采用UART串口、I2C或SPI與主控單片機(jī)接口,但是用得最多的還是串口。借由一套便捷的AT指令[2],單片機(jī)可以通過(guò)工作于station模式的ESP8266模塊快速、穩(wěn)定地連上WiFi,也可以生成WiFi AP,供其他設(shè)備連接,甚至還可以工作于AP和station共存的模式。
ESP8266目前在智能燈泡、插座、開關(guān)等智能電器中有廣泛應(yīng)用,在工業(yè)、科研設(shè)備的聯(lián)網(wǎng)方案中也被大量采用[3]。筆者在一個(gè)多路溫控記錄項(xiàng)目中就使用這個(gè)模塊設(shè)計(jì)了RTU,該RTU在室外環(huán)境中也工作穩(wěn)定。
本文主要介紹采用AT指令的UDP編程模型設(shè)計(jì)。采用UDP
2)主控板通過(guò)TTL UART連接 ESP8266模塊,通過(guò)UART發(fā)送AT指令控制ESP8266AP模塊工作于AP+station模式,模塊生成一個(gè)AP,同時(shí)本身也作為station收發(fā)數(shù)據(jù)(圖1b)。這種模式下模塊可以與連接到該模塊所生成的AP的其他模塊或者設(shè)備通信,可用于構(gòu)建小型局域網(wǎng)(最多連接4個(gè)設(shè)備),但是更多的場(chǎng)景還是用于AIR-KISS等無(wú)線方式對(duì)該模塊進(jìn)行配置[5]。因?yàn)檫@種方式在應(yīng)用中可能存在多個(gè)連接,需要?jiǎng)討B(tài)傳遞控制信息,不能進(jìn)行透?jìng)?,也不在本文討論之列?/p>
2.3 ESP8266使用注意事項(xiàng)
ESP8266工作于AT指令操作模式時(shí),為了減少M(fèi)CU解碼的時(shí)間和簡(jiǎn)化內(nèi)部協(xié)議棧的設(shè)計(jì),對(duì)AT指令的設(shè)計(jì)和使用有一些額外的要求,在開發(fā)中注意到這些要求,會(huì)顯著提高開發(fā)效率:
1) 模塊的默認(rèn)波特率(出廠設(shè)置)是115200bps;
2)AT指令必須大寫,而且以回車換行符"rn"結(jié)尾;
3)長(zhǎng)度和時(shí)間間隔成幀機(jī)制。ESP8266 判斷UART傳來(lái)的數(shù)據(jù)時(shí)間間隔, 若時(shí)間間隔大于20ms,則認(rèn)為一幀結(jié)束;否則,一直接收數(shù)據(jù)到上限值2KB,認(rèn)為一幀結(jié)束。ESP8266模塊判斷UART來(lái)的數(shù)據(jù)一幀結(jié)束后,通過(guò)WIFI接口將數(shù)據(jù)轉(zhuǎn)發(fā)出去。成幀時(shí)間間隔為20ms,一幀上限值為2KB。
2.4 AT指令透?jìng)髟O(shè)計(jì)
MCU通過(guò)串口和ESP8266連接,發(fā)送控制信息或者數(shù)據(jù)到串口,ESP8266也將控制命令的執(zhí)行情況和收到的數(shù)據(jù)從串口返回。要進(jìn)行透?jìng)餍枰l(fā)送一系列的配置指令,模塊執(zhí)行命令或者傳遞數(shù)據(jù)的時(shí)間也通常不可忽略,而且有些指令會(huì)執(zhí)行失敗,對(duì)程序結(jié)構(gòu)的設(shè)計(jì)帶來(lái)巨大挑戰(zhàn)。
表1對(duì)進(jìn)行透?jìng)魍ㄐ排渲眠^(guò)程中可能會(huì)用到的指令的執(zhí)行時(shí)間進(jìn)行了統(tǒng)計(jì)。測(cè)試時(shí)將ESP8266恢復(fù)至出廠設(shè)置,近距離( <3米)連接了一個(gè)TPLINK WR845N的家用無(wú)線路由器。從表1可以看到,執(zhí)行簡(jiǎn)單的查詢模塊IP的指令耗時(shí)10ms,從給ESP8266發(fā)出連接路由器指令到反饋連接成功耗時(shí)5.2s。在計(jì)算機(jī)上通過(guò)串口測(cè)試ESP8266時(shí),人工交互式執(zhí)行系列指令很方便,如果某指令未能成功執(zhí)行,用戶可以根據(jù)需要?jiǎng)討B(tài)獲取模塊狀態(tài),調(diào)整指令輸出成功配置模塊正常工作,但在單片機(jī)的程序設(shè)計(jì)中如果有些指令的執(zhí)行時(shí)間太長(zhǎng),或者某條指令執(zhí)行失敗,相應(yīng)的程序的運(yùn)行邏輯就變得很復(fù)雜。
在對(duì)ESP8266的指令表進(jìn)行研究之后,發(fā)現(xiàn)在對(duì)ESP8266進(jìn)行透?jìng)髋渲煤?,有一條指令在保存其透?jìng)髟O(shè)置后可以使得模塊上電之后自動(dòng)連接路由器并綁定預(yù)定的遠(yuǎn)程和本地的IP和端口,再次進(jìn)入透?jìng)鳡顟B(tài)。在利用這個(gè)特性之后,主控板檢測(cè)到ESP8266未能正常工作時(shí),只需復(fù)位重啟模塊即可。對(duì)ESP8266模塊的配置可以使用PC端軟件交互操作,不用在單片機(jī)上額外配置,可以顯著的降低編程難度。
要將ESP8266模塊配置為上電自動(dòng)進(jìn)入透?jìng)髂J?,一般先在PC上進(jìn)行測(cè)試。在將模塊與USB串口橋接器(如CP2102或CH340)的TX和RX交叉連接后,保證ESP8266模塊有充足的3.3V的電源供應(yīng),然后按照下面的流程進(jìn)行測(cè)試和配置:
1.測(cè)試模塊是否正確連接,即發(fā)送測(cè)試指令觀察是否有反饋;
a)注意模塊的通信波特率需設(shè)置正確。一般通過(guò)給模塊斷電并重新上電觀察是否接收到模塊上電時(shí)從串口輸出的狀態(tài)信息(是否正確顯示)來(lái)判斷波特率和電路是否正確連接。
b)發(fā)送AT測(cè)試指令觀察是否有反饋。有的時(shí)候模塊被配置后上電自動(dòng)進(jìn)入透?jìng)髂J剑瑥亩鴮?dǎo)致AT測(cè)試沒(méi)有反應(yīng),此時(shí)可嘗試發(fā)送"+++"退出透?jìng)?。注意退出透?jìng)髦噶畋仨殕为?dú)發(fā)出,即發(fā)送"+++"時(shí)不能同時(shí)跟隨發(fā)送"rn"或其他的字符,必須發(fā)送單獨(dú)成幀的"+++"。
2.發(fā)送 AT+MODE=1 配置模塊工作于透?jìng)髂J?
3.發(fā)送 AT+CWJAP="ap","pw" 配置模塊連接指定的路由器AP;其中ap、pw分別指預(yù)期連接的AP的名稱和密碼;
4.發(fā)送 AT+CIPMUX=0 配置模塊工作于單連接狀態(tài);
5.發(fā)送 AT+CIPSTA="192.168.x.y" 配置模塊使用指定的IP;其中 "192.168.x.y" 表示預(yù)期的IP;
6.發(fā)送 AT+SAVETRANSLINK=1,"192.168.1.8",51081,"UDP",51080 配置模塊透?jìng)鬟h(yuǎn)端IP "192.168.1.8" 和端口51081,自身在51080端口監(jiān)聽;
7.發(fā)送 AT+RST 或者斷電再加電復(fù)位模塊進(jìn)入透?jìng)髂J?圖1a)。
經(jīng)過(guò)上述配置,當(dāng)ESP8266進(jìn)入透?jìng)鳡顟B(tài)之后,主控板通過(guò)TX發(fā)送的數(shù)據(jù)自動(dòng)發(fā)送到遠(yuǎn)端IP綁定的端口,遠(yuǎn)端設(shè)備發(fā)送到本地IP和端口的數(shù)據(jù)也自動(dòng)從RX傳入(圖1a)。
3 結(jié)論
本文用上述方法在設(shè)計(jì)的野外運(yùn)行的多通道溫控系統(tǒng)RTU上實(shí)現(xiàn)了WiFi無(wú)線傳輸,運(yùn)行穩(wěn)定可靠。后又專門設(shè)計(jì)了相應(yīng)的軟件實(shí)現(xiàn)了ESP8266 UDP透?jìng)鞯膱D形化的一鍵配置,可顯著節(jié)約ESP8266 WiFi無(wú)線設(shè)計(jì)的開發(fā)時(shí)間。
參考文獻(xiàn):
[1]曹振民,陳年生,馬強(qiáng),等.基于ESP8266的無(wú)線控制電路設(shè)計(jì)[J].工業(yè)控制計(jì)算機(jī),2017,(01):68-69.
[2] Espressif Systems (Shanghai) Pte., Ltd., ESP8266 AT Instruction Set, Ver2.1.0, 2017.
[3]范興隆.ESP8266在智能家居監(jiān)控系統(tǒng)中的應(yīng)用[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2016,(09):52-56.
[4]深圳市安信可科技有限公司,Espressif AT指令集(安信可修改版),Ver0.21,2015.
[5]羅光瑋.無(wú)線網(wǎng)絡(luò)環(huán)境手機(jī)快速配置智能硬件方法研究[D].華中科技大學(xué),2015.
本文來(lái)源于《電子產(chǎn)品世界》2018年第1期第34頁(yè),歡迎您寫論文時(shí)引用,并注明出處。
評(píng)論