<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 設計應用 > 無(wú)線(xiàn)模塊的AT指令UDP透傳設計

無(wú)線(xiàn)模塊的AT指令UDP透傳設計

作者:黃玉金 楊越 薛偉 張天成 時(shí)間:2017-12-26 來(lái)源:電子產(chǎn)品世界 收藏
編者按:ESP8266是一款國產(chǎn)的性能穩定、價(jià)格低廉的串口與WiFi橋接器,本文對單片機與ESP8266的接口模型和用AT指令配置ESP8266的UDP透傳通信進(jìn)行了分析與研究,提出了該模式下單片機程序設計的一種簡(jiǎn)化結構和操作步驟,應用在多路溫控RTU設計中運行穩定。

作者 / 黃玉金1,2 楊越1,2 薛偉1,2 張天成3

本文引用地址:http://dyxdggzs.com/article/201712/373591.htm

  1.中國地質(zhì)大學(xué)(武漢)自動(dòng)化學(xué)院(湖北 武漢 430074)

  2.復雜系統先進(jìn)控制與智能自動(dòng)化湖北省重點(diǎn)實(shí)驗室(湖北 武漢 430074)

  3.武漢朗德電氣有限公司(湖北 武漢 430223)

  *基金項目:國家自然科學(xué)基金(編號:61503350)

  黃玉金(1978-),碩士,講師,研究方向:無(wú)損檢測技術(shù)和智能儀器設計。

摘要是一款國產(chǎn)的性能穩定、價(jià)格低廉的串口與橋接器,本文對單片機與的接口模型和用配置的UDP通信進(jìn)行了分析與研究,提出了該模式下單片機程序設計的一種簡(jiǎn)化結構和操作步驟,應用在多路溫控RTU設計中運行穩定。

引言

  ESP8266是上海樂(lè )鑫公司設計的高度集成的 SoC,它具有低功耗、緊湊設計和高穩定性的特點(diǎn)。ESP8266擁有完整的且自成體系的 網(wǎng)絡(luò )功能,既能夠獨立應用(集成了32位處理器,帶片上SRAM),也可以用作串口-WiFi橋接模塊,配合其他主機 MCU運行。

  在獨立應用時(shí),集成的處理器通過(guò)GPIO可以和外部傳感器或模塊進(jìn)行接口,樂(lè )鑫提供了專(zhuān)門(mén)軟件開(kāi)發(fā)方案,其一下游模塊生產(chǎn)商安信可(AI-Thinker)提供了Windows下的GUI方式的IDE實(shí)現SDK[1]。這種方法需要用戶(hù)對ESP8266及其有相當的理解,一般需要較長(cháng)的學(xué)習和開(kāi)發(fā)周期。

  當ESP8266用作橋接模塊配合單片機(如8051兼容單片機、ARM Cortex M0、M3等)使用時(shí),可以采用UART串口、I2C或SPI與主控單片機接口,但是用得最多的還是串口。借由一套便捷的[2],單片機可以通過(guò)工作于station模式的ESP8266模塊快速、穩定地連上WiFi,也可以生成WiFi AP,供其他設備連接,甚至還可以工作于A(yíng)P和station共存的模式。

  ESP8266目前在智能燈泡、插座、開(kāi)關(guān)等智能電器中有廣泛應用,在工業(yè)、科研設備的聯(lián)網(wǎng)方案中也被大量采用[3]。筆者在一個(gè)多路溫控記錄項目中就使用這個(gè)模塊設計了RTU,該RTU在室外環(huán)境中也工作穩定。

  本文主要介紹采用的UDP通信的模型設計。采用UDP,用戶(hù)的主控單片機可以用類(lèi)似有線(xiàn)UART的方式實(shí)現WiFi傳輸,可以顯著(zhù)地降低開(kāi)發(fā)難度,節約開(kāi)發(fā)時(shí)間。

1 ESP8266的AT指令集

  根據數據手冊[2],ESP8266的AT指令包含4個(gè)類(lèi)型,用于實(shí)現基礎功能、WiFi相關(guān)和TCP/IP相關(guān)的功能的操作。

  在設置指令中,根據設置參數的時(shí)間有效性又分為當前參數設置和永久參數設置。當前參數設置在下一次復位或被更改前有效,永久設置在設置被更改之前均有效。樂(lè )鑫為模塊公司提供了AT指令模式的源代碼和SDK,模塊公司往往會(huì )對這些指令進(jìn)行刪減和調整(增加私有AT指令),以適應更小的FLASH或簡(jiǎn)化應用。本文采用安信可(AI Thinker)公司修改后的指令集手冊[4]進(jìn)行了測試。

  ESP8266的數據通信既支持UDP方式,也支持TCP(或SSL)方式。一般認為T(mén)CP協(xié)議面向連接,提供的服務(wù)更加可靠,但是在單片機中處理TCP通信控制錯誤會(huì )比較麻煩,筆者在設計溫控RTU時(shí)就采用了數據報方式的UDP透傳通信。本文對ESP8266的UDP AT指令實(shí)現通信透傳時(shí)的編程設計進(jìn)行了介紹和總結。

2 ESP8266的UDP透傳的分析

2.1 UDP、IP和端口

  UDP(User Datagram Protocol,用戶(hù)數據包協(xié)議),是一個(gè)簡(jiǎn)單的面向數據報的傳輸層協(xié)議。在TCP/IP模型中,UDP為網(wǎng)絡(luò )層以上和應用層以下提供了一個(gè)簡(jiǎn)單的接口。

  UDP通信被認為是不可靠的通信,這里的不可靠主要指兩個(gè)方面:報文是否送達不可靠,報文送達的順序不可靠。前者是因為協(xié)議的設計沒(méi)有要求對發(fā)送的數據進(jìn)行確認,后者是因為數據報可能經(jīng)由不同的路由而導致到達目標的時(shí)間延遲不一致引起的。對于報文是否送達雖然在通信層沒(méi)有進(jìn)行實(shí)現,但是用戶(hù)(程序設計人員)可以在應用層面實(shí)現反饋確認;而針對報文順序問(wèn)題,考慮到ESP8266更多的是用于低通信載荷的場(chǎng)所,多數情況一個(gè)數據報就可以傳遞當前的全部數據,一般也不會(huì )造成困擾。

  ESP8266提供WiFi方式連接以太網(wǎng),WiFi在OSI網(wǎng)絡(luò )互聯(lián)模型的通信層、數據層和有線(xiàn)的以太網(wǎng)有一些不同,但是對使用UDP或是TCP的應用者而言并沒(méi)有區別,只是Internet通信的一種具體形式,不會(huì )影響到ESP8266模塊的使用者。

  在使用ESP8266進(jìn)行無(wú)線(xiàn)通信的開(kāi)發(fā)時(shí),還有2個(gè)基本概念需要理解:IP地址和端口號。在UART通信中,線(xiàn)纜的兩端分別連接不同的設備,屬于1對1的通信,兩個(gè)設備不需要身份設置就可以相互區別;而通過(guò)網(wǎng)絡(luò )進(jìn)行信息傳輸時(shí),因為網(wǎng)絡(luò )上有很多不同的設備,就必須對設備進(jìn)行標記區別。Internet網(wǎng)絡(luò )中,這個(gè)身份設置就是IP地址。無(wú)論是TCP還是UDP,在通信中都會(huì )涉及到目標IP地址和源IP地址,用于對不同設備進(jìn)行標記。

  端口則是編程的電子工程師需要理解的另一個(gè)重要概念。端口和IP(用于標志設備)一起使用,用于標志同一個(gè)設備中不同的功能或者關(guān)注的不同的通信數據。

2.2 ESP8266的工作模式

  ESP8266可以工作于3種模式:station模式、AP模式以及station和AP共存模式。工作于A(yíng)P模式的ESP8266提供與路由器類(lèi)似的功能,但是最多只能連接4個(gè)station,本文不做分析。在使用ESP8266 AT指令方式的進(jìn)行數據交換的場(chǎng)所,主要有下面2種形式:

  1)主控板通過(guò)TTL UART連接 ESP8266模塊,通過(guò)UART發(fā)送AT指令控制ESP8266連接路由器(AP)工作于station模式(圖1a)。這種模式下,ESP8266和主控板之間相當于無(wú)線(xiàn)網(wǎng)卡和PC之間的關(guān)系;

  2)主控板通過(guò)TTL UART連接 ESP8266模塊,通過(guò)UART發(fā)送AT指令控制ESP8266AP模塊工作于A(yíng)P+station模式,模塊生成一個(gè)AP,同時(shí)本身也作為station收發(fā)數據(圖1b)。這種模式下模塊可以與連接到該模塊所生成的AP的其他模塊或者設備通信,可用于構建小型局域網(wǎng)(最多連接4個(gè)設備),但是更多的場(chǎng)景還是用于A(yíng)IR-KISS等無(wú)線(xiàn)方式對該模塊進(jìn)行配置[5]。因為這種方式在應用中可能存在多個(gè)連接,需要動(dòng)態(tài)傳遞控制信息,不能進(jìn)行透傳,也不在本文討論之列。

2.3 ESP8266使用注意事項

  ESP8266工作于A(yíng)T指令操作模式時(shí),為了減少MCU解碼的時(shí)間和簡(jiǎn)化內部協(xié)議棧的設計,對AT指令的設計和使用有一些額外的要求,在開(kāi)發(fā)中注意到這些要求,會(huì )顯著(zhù)提高開(kāi)發(fā)效率:

  1) 模塊的默認波特率(出廠(chǎng)設置)是115200bps;

  2)AT指令必須大寫(xiě),而且以回車(chē)換行符"rn"結尾;

  3)長(cháng)度和時(shí)間間隔成幀機制。ESP8266 判斷UART傳來(lái)的數據時(shí)間間隔, 若時(shí)間間隔大于20ms,則認為一幀結束;否則,一直接收數據到上限值2KB,認為一幀結束。ESP8266模塊判斷UART來(lái)的數據一幀結束后,通過(guò)WIFI接口將數據轉發(fā)出去。成幀時(shí)間間隔為20ms,一幀上限值為2KB。

2.4 AT指令透傳設計

  MCU通過(guò)串口和ESP8266連接,發(fā)送控制信息或者數據到串口,ESP8266也將控制命令的執行情況和收到的數據從串口返回。要進(jìn)行透傳需要發(fā)送一系列的配置指令,模塊執行命令或者傳遞數據的時(shí)間也通常不可忽略,而且有些指令會(huì )執行失敗,對程序結構的設計帶來(lái)巨大挑戰。

  表1對進(jìn)行透傳通信配置過(guò)程中可能會(huì )用到的指令的執行時(shí)間進(jìn)行了統計。測試時(shí)將ESP8266恢復至出廠(chǎng)設置,近距離( <3米)連接了一個(gè)TPLINK WR845N的家用無(wú)線(xiàn)路由器。從表1可以看到,執行簡(jiǎn)單的查詢(xún)模塊IP的指令耗時(shí)10ms,從給ESP8266發(fā)出連接路由器指令到反饋連接成功耗時(shí)5.2s。在計算機上通過(guò)串口測試ESP8266時(shí),人工交互式執行系列指令很方便,如果某指令未能成功執行,用戶(hù)可以根據需要動(dòng)態(tài)獲取模塊狀態(tài),調整指令輸出成功配置模塊正常工作,但在單片機的程序設計中如果有些指令的執行時(shí)間太長(cháng),或者某條指令執行失敗,相應的程序的運行邏輯就變得很復雜。

  在對ESP8266的指令表進(jìn)行研究之后,發(fā)現在對ESP8266進(jìn)行透傳配置后,有一條指令在保存其透傳設置后可以使得模塊上電之后自動(dòng)連接路由器并綁定預定的遠程和本地的IP和端口,再次進(jìn)入透傳狀態(tài)。在利用這個(gè)特性之后,主控板檢測到ESP8266未能正常工作時(shí),只需復位重啟模塊即可。對ESP8266模塊的配置可以使用PC端軟件交互操作,不用在單片機上額外配置,可以顯著(zhù)的降低編程難度。

  要將ESP8266模塊配置為上電自動(dòng)進(jìn)入透傳模式,一般先在PC上進(jìn)行測試。在將模塊與USB串口橋接器(如CP2102或CH340)的TX和RX交叉連接后,保證ESP8266模塊有充足的3.3V的電源供應,然后按照下面的流程進(jìn)行測試和配置:

  1.測試模塊是否正確連接,即發(fā)送測試指令觀(guān)察是否有反饋;

  a)注意模塊的通信波特率需設置正確。一般通過(guò)給模塊斷電并重新上電觀(guān)察是否接收到模塊上電時(shí)從串口輸出的狀態(tài)信息(是否正確顯示)來(lái)判斷波特率和電路是否正確連接。

  b)發(fā)送AT測試指令觀(guān)察是否有反饋。有的時(shí)候模塊被配置后上電自動(dòng)進(jìn)入透傳模式,從而導致AT測試沒(méi)有反應,此時(shí)可嘗試發(fā)送"+++"退出透傳。注意退出透傳指令必須單獨發(fā)出,即發(fā)送"+++"時(shí)不能同時(shí)跟隨發(fā)送"rn"或其他的字符,必須發(fā)送單獨成幀的"+++"。

  2.發(fā)送 AT+MODE=1 配置模塊工作于透傳模式;

  3.發(fā)送 AT+CWJAP="ap","pw" 配置模塊連接指定的路由器AP;其中ap、pw分別指預期連接的AP的名稱(chēng)和密碼;

  4.發(fā)送 AT+CIPMUX=0 配置模塊工作于單連接狀態(tài);

  5.發(fā)送 AT+CIPSTA="192.168.x.y" 配置模塊使用指定的IP;其中 "192.168.x.y" 表示預期的IP;

  6.發(fā)送 AT+SAVETRANSLINK=1,"192.168.1.8",51081,"UDP",51080 配置模塊透傳遠端IP "192.168.1.8" 和端口51081,自身在51080端口監聽(tīng);

  7.發(fā)送 AT+RST 或者斷電再加電復位模塊進(jìn)入透傳模式(圖1a)。

  經(jīng)過(guò)上述配置,當ESP8266進(jìn)入透傳狀態(tài)之后,主控板通過(guò)TX發(fā)送的數據自動(dòng)發(fā)送到遠端IP綁定的端口,遠端設備發(fā)送到本地IP和端口的數據也自動(dòng)從RX傳入(圖1a)。

3 結論

  本文用上述方法在設計的野外運行的多通道溫控系統RTU上實(shí)現了WiFi無(wú)線(xiàn)傳輸,運行穩定可靠。后又專(zhuān)門(mén)設計了相應的軟件實(shí)現了ESP8266 UDP透傳的圖形化的一鍵配置,可顯著(zhù)節約ESP8266 WiFi無(wú)線(xiàn)設計的開(kāi)發(fā)時(shí)間。

  參考文獻:

  [1]曹振民,陳年生,馬強,等.基于ESP8266的無(wú)線(xiàn)控制電路設計[J].工業(yè)控制計算機,2017,(01):68-69.

  [2] Espressif Systems (Shanghai) Pte., Ltd., ESP8266 AT Instruction Set, Ver2.1.0, 2017.

  [3]范興隆.ESP8266在智能家居監控系統中的應用[J].單片機與嵌入式系統應用,2016,(09):52-56.

  [4]深圳市安信可科技有限公司,Espressif AT指令集(安信可修改版),Ver0.21,2015.

  [5]羅光瑋.無(wú)線(xiàn)網(wǎng)絡(luò )環(huán)境手機快速配置智能硬件方法研究[D].華中科技大學(xué),2015.

  本文來(lái)源于《電子產(chǎn)品世界》2018年第1期第34頁(yè),歡迎您寫(xiě)論文時(shí)引用,并注明出處。



關(guān)鍵詞: ESP8266 AT指令 透傳 編程 WiFi 201801

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>