2018年7月26日 星期四

ESP8266 AT 指令下的透傳模式

網頁最後修改時間:2018/07/26

AT 指令下的 ESP8266 有兩種傳輸模式可以設置:普通傳輸模式和透傳模式;兩者都能使用在 TCP 與 UDP 網路協議下,雖然透傳模式只能使用在單連線通訊,但是在資料傳輸的處理上卻相對非常方便。一但使用 AT 指令建立好透傳模式,通訊雙方的資料傳輸就是所"鍵"即所傳,不需要特別再去處理 +IPD 為前的訊息資料,一切就如同一般的資料傳輸一樣,所要做的就是這一篇網頁所要討論的:AT 指令要怎麼下 !

*********************************************************************************
此網頁所用的材料可自行準備,或選用新版本的升級套件
更多 ESP8266 相關商品,請至分類賣場
*********************************************************************************

ESP8266 的透傳模式只支援單連線 (網頁一開始已經說過),但對於在 SoftAP 模式下卻不能使用 TCP 建立透傳模式;因為 ESP8266 在 SoftAP 模式下只支援多連線,透傳無法建立。

透傳模式下,若在傳輸時連接斷開會嘗試不斷重連,直到接收到 +++ 退出傳輸;但普通傳輸模式不會重連,直接提示連接斷開。

對於 ESP8266 使用 AT 指令建立透傳模式的情況,分為 TCP 與 UDP 協議兩種,共有三種建立方式:
  • ESP8266 (as station mode), UDP
  • ESP8266 (as softap mode), UDP
  • ESP8266 (as station mode), TCP Client
*********************************************************************************
這三種模式都會在這網頁中討論到,若是對於 ESP8266 AT 指令有問題的話,可以另開此 "網頁" 做參考,沒列在上述網頁會在此列出;如果有雲端硬碟權限的話,可以直接找 esp8266 at instruction set v1.5.4 這份文件做參考。
*********************************************************************************

/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
網頁使用的 ESP8266 AT 韌體版本資訊
   AT: v1.2.0.0
SDK: v1.5.4.1
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

TCP / UDP 透傳模式:

那麼,TCP 和 UDP 這兩種協議在透傳模式下使用的不同之處在哪裡呢 ?

要深入這個問題,有興趣和有時間的可以找一下 OSI 或是 TCP/IP 模型看看 (或是下面備註欄中的 PDF 文件)。簡單說,TCP (Transmission Control Protocol, 傳輸控制協議) 和 UDP (User Datagram Protocol, 用戶數據電報協議) 都是屬於模型結構的傳輸層 (transport layer)。前者屬於可靠的連線,可確保資料傳輸通訊的正確傳輸,穩定性高;後者屬於非可靠的非連線型資料傳輸,不保證資料一定被接收,但速度快!如串流媒體 (Stream Media) 就是採用這個協議。

使用的時機點,可以依據穩定性與傳輸速度兩個點來做考量。當需要快速傳輸資料,並且可以容忍部分資料遺失的話,那麼 UDP 就是最佳的選擇;反之,就採用 TCP 協議。兩種協議實際使用上的不同之處,在接下來的小節中就能看到。

*********************************************************************************
[ 傳輸層 ] TCP 與 UDP (PDF)
傳輸層提供了系統之間的資料傳輸更高階的控制,其功能包括建立及解除傳輸、傳輸錯誤偵測及回覆、流程控制和分封包裝、錯誤的處理、優先次序與安全性等。
*********************************************************************************

下面三個小節中,將針對不同的情境使用 AT 指令建立透傳模式,有操作的 AT 指令集和主要的架構與設定參數圖,整個操作過程請看影片中的演示。觀看影片時,請注意每個 AT指令下了之後的影響以及運作時間,尤其是影片最後 AT 指令與透傳模式的切換演示。

對於不直接撰寫 ESP8266 韌體的用戶,只有使用 AT 指令才能控制 ESP8266 達到預期的結果。對於要直接使用 AT 指令控制 ESP8266 的 MCU,只有實際動手測試與確認每個 AT 指令運作的結果與時間,才有可能撰寫出正確和穩定的程式;這部分留待下一篇再說明。

/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
AT+功能、AT+功能_CUR、AT+功能_DEF

這個問題在早前的部落格其他網頁已經有說明過,但特別再囉嗦一次!

ESP8266 早前的 AT 指令韌體版本使用的都是 AT+功能 這種格式,參數設定值不一定會儲存到 flash user parameter 區域,因此每一次使用都必須重新再重頭下一遍 AT 指令,因此後來沿生出後面那兩種同一功能的 AT 指令:功能尾綴 _CUR 表示不儲存相關參數到 flash user parameter 區域;_DEF 表示儲存。但為了相容,現在還是幾乎每個功能都有這三種格式的 AT 指令,功能之間可混用不同格式。

為了避免初學者混淆,此網頁是採用最早前的 AT 指令格式,而且為了確保每一次操作都是預設值,操作之前都會重置 (AT+RESTORE) 所有參數回預設值,待用戶真正了解 AT 指令操作之後,要用哪一種格式再自己決定。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

會使用到的軟體,請自行準備或是使用下面網址:

ESP8266 (as station mode), UDP:

第一種建立方式,通訊的雙方需先處於同一個網路區段下,因此都必須連線到無線路由器。

在這篇網頁所使用的無線路由器採 DHCP,可自動配置 192.168.11.2 ~ 192.168.11.64 範圍的 IP,也可透過連線設備自行設定。對於 PC 端來說,查找 IP 比較簡單,但對於 ESP8266 最好設定為靜態 IP (網頁採用的方法)。

ESP8266 可以設置三種 WiFi 模式:SoftAP、Station 和 SoftAP + Station,此篇採前面兩種;最後面一種只是同時存在兩種 WiFi 模式,實際操作還是要以採用 SoftAP 或是 Station 的 WiFi 模式下去實現透傳模式為主,跟兩種 WiFi 模式同時存在沒有關係。
ESP8266 (station mode), UDP 透傳模式建立架構圖
在這種建立方式下,先將 ESP8266 插入到 UART 通訊燒錄兩用底板後再與電腦連接就可以開始。

首先,設定 ESP8266 為 Station WiFi 模式,並連線到無線路由器進行靜態 IP 的設定。UDP 與 TCP 的最大不同之處是:沒有所謂的 Server / Client 的關係,通訊的當下雙方是靠 IP 和 Port 作為依據傳送與接收資料,所以哪一邊先開都可以 (可以從影片中看到);但對於 TCP 連線就不行,一定要有 TCP Server,TCP Client 才可以與其建立連線。

雙方的連線建立成功之後,就可切換傳輸模式為透傳模式 (AT+CIPMODE=1)。
要開始傳送時,只要再輸入 AT+CIPSEND 等待返回 > 就能發送與接收資料。
要停止透傳模式的資料傳輸,只要連續輸入三個 +++ (不需要任何的分行符號) 就會自動停止並返回一般 AT 指令接收的狀態;要再進入透傳模式,只要再輸入一次 AT+CIPSEND  即可。但此時雙方 UDP 連線還是存在的,需要輸入 AT+CIPCLOSE 才會終止雙方的 UDP 連線。

詳細步驟列表如下 (請自行依實際情況修改相關參數)
AT 指令集 - ESP8266 (station mode), UDP 透傳模式
AT+RESTORE
AT+CIPMODE
AT+CIPCLOSE
下面是實際 AT 指令操作建立 UDP 透傳的影片,其中 ESP8266 設定為 Station WiFi 模式。


ESP8266 (as softap mode), UDP:

第二種建立方式與第一種差不多,主要的差別在於少了中間的無線路由器部分;現改由 ESP8266 擔任。

ESP8266 設定為 SoftAP WiFi 模式,並指定接入點名稱 (ssid)、密碼 (pwd)、通訊頻道號碼 (chl) 和加密方式 (ecn)。設定好 SoftAP 之後,再將電腦加入到此區域網路中,之後的種種就跟第一種建立方式都一樣。
ESP8266 (softap mode), UDP 透傳模式建立架構圖
詳細步驟列表如下 (請自行依實際情況修改相關參數)
AT 指令集 - ESP8266 (softap mode), UDP 透傳模式
AT+CWSAP
AT+CWSAP 指令是用來設定 SoftAP 的名稱和密碼...等相關資訊,設定完成之後就會採用預設的 IP 地址、Gateway 和 Newmask (分別是:192.168.4.1、192.168.4.1 和 255.255.255.0),有些人喜歡,但有些人不喜歡!

若是後者,可利用下面指令在上述指令之後進行相關指定。
AT+CIPAP
** 因為這部分的影片製作上畫質不是太好,所以沒有另做文字描述的處理,不過指令操作很詳細,參考價值很高,考量之後還是放上!

ESP8266 (as station mode), TCP Client:

第三種建立方式,幾乎與第一種一模一樣,差異在於:
  • AT 指令
    步驟 8 改使用 TCP
  • 連線順序
    UDP 不在乎雙方哪一端先開啟 UDP 連線;但對於 TCP 來說,作為 TCP Server 的一端必須先進入到 Listening 的狀態,作為 TCP Client 的一端才能連接,否則就會回傳錯誤!
重點在第二項!
ESP8266 (softap mode), TCP Client 透傳模式建立架構圖
首先設定 ESP8266 為 Station WiFi 模式,連線到無線路由器後,進行靜態 IP 的設定。
成功連線並設定好 IP 之後,確定好 PC 端的 IP 後,建立 ESP8266 端與電腦的 TCP 連接 (此時 PC 端需要先開起 TCP Server "Listening" ),接著切換到透傳模式就可以開始傳送資料。

詳細步驟列表如下 (請自行依實際情況修改相關參數)
AT 指令集 - ESP8266 (station mode), TCP Client 透傳模式
AT+CIPSTA
** 因為這部分的影片製作上在後面操作部分影片有點卡頓,所以沒有另做文字描述的處理,不過參考價值很高,考量之後還是放上!


結論:

一般普通傳輸模式下,雖然支援單/多連接,但是傳輸與接收需要用戶多一些字串的處理,一對多嘛!而雖然此篇所討論的透傳模式只限定在 TCP 單連接模式 (AT+CWMUX=0) 和 UDP 固定 IP 和 Port 通訊 (AT+CIPSTART <UDP mode> = 0) 上,但處理上相對單純許多,沒有額外的字串需要處理,所接收即所得!

所需要特別注意的是,TCP 和 UDP 在切換到透傳模式前的連線順序是否正確,哪一邊要先連要特別注意;另外,切換透傳模式回到一般 AT 指令模式,以及完全關閉 TCP / UDP 傳輸也要了解,這可避免很多不必要的困擾!

透過實際操作這三個 AT 指令建立 ESP8266 透傳模式的例子,可以了解到每一個指令成功與失敗的回傳訊息以及執行的時間,這些資訊將是作為接下來使用微控制器來實現透傳的參考依據。


<< 部落格相關文章 >>

沒有留言:

張貼留言