新聞中心

EEPW首頁 > 設(shè)計應(yīng)用 > 無線模塊的AT指令UDP透傳設(shè)計

無線模塊的AT指令UDP透傳設(shè)計

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

作者 / 黃玉金1,2 楊越1,2 薛偉1,2 張?zhí)斐?sup>3

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

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

  2.復(fù)雜系統(tǒng)先進控制與智能自動化湖北省重點實驗室(湖北 武漢 430074)

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

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

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

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

引言

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

  在獨立應(yīng)用時,集成的處理器通過GPIO可以和外部傳感器或模塊進行接口,樂鑫提供了專門軟件開發(fā)方案,其一下游模塊生產(chǎn)商安信可(AI-Thinker)提供了Windows下的GUI方式的IDE實現(xiàn)SDK[1]。這種方法需要用戶對ESP8266及其有相當(dāng)?shù)睦斫猓话阈枰^長的學(xué)習(xí)和開發(fā)周期。

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

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

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

1 ESP8266的AT指令集

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

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

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

2 ESP8266的UDP透傳的分析

2.1 UDP、IP和端口

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

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

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

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

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

2.2 ESP8266的工作模式

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

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

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

2.3 ESP8266使用注意事項

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

  1) 模塊的默認(rèn)波特率(出廠設(shè)置)是115200bps;

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

  3)長度和時間間隔成幀機制。ESP8266 判斷UART傳來的數(shù)據(jù)時間間隔, 若時間間隔大于20ms,則認(rèn)為一幀結(jié)束;否則,一直接收數(shù)據(jù)到上限值2KB,認(rèn)為一幀結(jié)束。ESP8266模塊判斷UART來的數(shù)據(jù)一幀結(jié)束后,通過WIFI接口將數(shù)據(jù)轉(zhuǎn)發(fā)出去。成幀時間間隔為20ms,一幀上限值為2KB。

2.4 AT指令透傳設(shè)計

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

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

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

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

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

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

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

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

  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 配置模塊透傳遠端IP "192.168.1.8" 和端口51081,自身在51080端口監(jiān)聽;

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

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

3 結(jié)論

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

  參考文獻:

  [1]曹振民,陳年生,馬強,等.基于ESP8266的無線控制電路設(shè)計[J].工業(yè)控制計算機,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].單片機與嵌入式系統(tǒng)應(yīng)用,2016,(09):52-56.

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

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

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



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

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉