ESP8266串口模塊的基本使用

ESP8266是一款超低功耗的UART-WiFi 透傳模塊,擁有業內極富競爭力的封裝尺寸和超低能耗技術,專爲移動設備和物聯網應用設計,可將用戶的物理設備連接到Wi-Fi 無線網絡上,進行互聯網或局域網通信,實現聯網功能。

雖然“WiFi門鎖”一直拖着還沒弄好,但WiFi模塊卻玩了很久。是時候介紹下ESP8266的基本使用和配置了。


 

內容簡介

讓硬件聯網一直以來都是比較麻煩的事情,而通過使用 ESP8266 這款WiFi模塊,僅需要通過串口使用AT指令控制,就能滿足大部分的網絡功能需求。本文通過簡單介紹及應用實例,讓剛接觸WiFi模塊的讀者瞭解模塊的大致使用方法。


 

ESP8266簡介

ESP8266是上海樂鑫信息科技設計的低功耗WiFi芯片,集成完整的TCP/IP協議棧和MCU。而ESP8266模塊是深圳安信可公司基於ESP8266芯片研發(增加必要外圍電路、串口flash、板載天線等)的串口WiFi模塊,成本低、使用簡便、功能強大。

硬件與網絡的橋樑

和串口藍牙模塊一樣,串口WiFi模塊也是擴展單片機功能的又一神器。在沒有接觸8266之前,我對單片機如何聯網的問題很是好奇,在書裏看過用笨重繁瑣的以太網模塊實現,但一點都不帥好吧。而小巧的 ESP8266 WiFi模塊通過串口AT指令與單片機通訊,實現串口透傳,非常好上手。

透傳,又稱透明傳輸,具體來說就是“輸入即輸出(如從WiFi模塊串口輸入的字符會透傳到服務器端)”,數據不改變,不同協議之間的轉換(如串口到WiFi、藍牙等)由模塊完成。使用者無需關心內部具體實現,因此模塊對於使用者是“透明的”、似乎不存在的(因爲可無視中間的實現原理)。一個高度封裝的模塊,應該隱藏內部實現細節,僅對外提供使用接口。

把硬件聯網之後,就再也不是“玩單機”了。配合服務器端的Socket網絡編程,可以玩許多東西。所以我覺得WiFi模塊是連接軟件(網絡編程)與硬件(單片機)的橋樑,把我所學的單片機和Web知識聯繫起來了。

而近來“物聯網”或者說“智能硬件”似乎也火了起來,許多強大的芯片和模塊的出現使得聯網設備的開發門檻大大降低。正是有了這些爲物聯網大業鋪路的各大廠商們,我等對網絡一竅不通的渣渣也能輕鬆將硬件聯網、實現網絡通訊。

模塊資料大全

在某寶買模塊一般都會有相應的資料文檔,涵蓋使用方法與常見的問題。騷年,我這有一個寶貝要給你:ESP8266模塊官方指導文件 密碼9wfw


 

開始前的準備

原理圖及引腳說明

引腳說明

FunctionDescription
URXDUART_RXD,接收
UTXDUART_TXD,發送
GPIO 16外部Reset信號,低電平復位,高電平工作(默認高)
GNDGND
VCC3.3V,模塊供電
GPIO 0工作模式選擇:懸空:FlashBoot,工作模式;下拉:UARTDownload,下載模式
CH_PD高電平工作;低電平模塊供電關掉
GPIO 2(1)開機上電時必須爲高電平,禁止硬件下拉;(2)內部默認已拉高

模塊的連線

要讓模塊上電正常工作只需三處接線:VCC和CH_PD接3.3電源正極,GND接地。剛好USB-TTL下載模塊上有3.3V的電源。而使用串口調試要再把模塊與下載器的TXD和RXD交叉連接。這樣一來WiFi模塊就能與電腦連接、用串口助手進行測試了。

模塊的連線

模塊上電

電腦安裝好USB-TTL模塊的驅動後,USB口插上模塊,在設備管理器查看串口號後,打開串口調試工具sscom,串口號選擇模塊對應的,默認波特率115200,數據-停止-校驗-流控:8-1-None-None,勾選“發送新行”(一定一定要記得勾選“發送新行”,否則WiFi無法識別AT指令),點擊“打開串口”按鈕,然後將CH_PD引腳的3.3V電源斷了重接進行復位,若串口打印亂碼後看到“ready”,說明模塊上電初始化正常。

模塊復位

和某些需要按鍵進入AT指令模式的藍牙模塊不同,ESP8266上電後就運行在AT指令模式下。

免冷啓下載器的坑

記得有一次在實驗室用ESP8266時怎麼都不能成功上電初始化顯示“ready”,AT指令也無法工作。最終把固件燒了一遍又一遍,把模塊都“玩壞了”也還是不行,就像見了鬼一樣……最終竟然是因爲使用了免冷啓下載器的原因。後來才知道ESP8266電源要求十分苛刻,必須“穩定純淨”,估計這種“高級下載器”內部電路會造成模塊上電時電源不穩定,從而導致上電初始化失敗。如果你也遇到同樣的問題不妨換個USB-TTL下載器試試。

別不信邪,一些詭異的bug很可能是由某個不起眼的硬件引起的,這很“玄學”。


 

ESP8266的AT指令

AT指令最早在藍牙模塊上接觸過,所謂AT指令實質上就是一些起控制作用的特殊字符串。模塊可以通過AT指令控制使用和用源代碼API函數開發,前者開發速度快,難度非常低(傻瓜化使用)。後者靈活,難度較大。 而我只用過AT指令,所以本文不涉及SDK開發。

AT指令注意事項

說明:下面僅列舉一些最常用的AT指令及用法,指令的詳細參數及使用說明請參考官方文檔:ESP8266 AT指令集

基礎AT指令

指令描述
AT測試AT啓動
AT+RST重啓模塊
AT+GMR查看版本信息

AT 是最常用的指令,用於測試模塊能否正常接受指令。在sscom中向串口發送指令 AT ,若收到模塊返回的 OK 則說明模塊的AT指令可正常工作。發送 AT+GMR 可查看AT指令及SDK的版本號,我當前使用的AT指令是V1.1.0.0的最新版,一般最新版指令會增加一些新功能,可隨時關注官方的更新。

WiFi功能AT指令

WiFi是讓硬件聯網的基礎,和其他功能一樣,這裏僅列舉所需的常用指令,更詳細指令說明還得查閱文檔。

指令描述
AT+CWMODE設置WiFi模式(sta/AP/sta+AP)
AT+CWLAP掃描附近的AP信息
AT+CWJAP連接AP
AT+CWQAP與AP斷開連接
AT+CWSAP設置ESP8266 softAP配置
AT+CWLIF獲取連接到 ESP8266 softAP 的 station 的信息

關於WiFi模式這裏要說明一下,sta模式下模塊相當於客戶端,像我們手機平板一樣是要去連接路由器的,而AP模式下模塊相當於路由器,是發射WiFi被別人連的。ESP8266支持兩種模式並存(模塊出廠默認的是AP模式) 。另外,掃描WiFi指令 AT+CWLAP 只能在sta模式下使用,否則會報ERRO錯誤, AT+CWJAP 和 AT+CWQAP 指令也同理。

sta模式連接WiFi演示

那如何讓模塊連接到路由器呢?下面簡單列舉了一下步驟:

  1. 發送 AT+CWMODE=1 指令配置模塊爲sta模式(參數1,2,3分別對應模式sta,AP和sta/AP)。

  2. 發送 AT+CWLAP 指令掃描當前附近WiFi,模塊會返回可用AP列表。

  3. 使用 AT+CWJAP="WiFi名稱","WiFi密碼" 連接到指定的路由器,比如我在圖書館的WiFi是 “lib-free-wlan01”,密碼是“zhku-lib”,實際連接WiFi發送的指令就是 AT+CWJAP="lib-free-wlan01","zhku-lib" 。

  4. 返回的“WIFI CONNECTED”說明連接成功,“WIFI GOT IP”代表模塊分配到了IP。

  5. 最後可使用 AT+CWQAP 斷開當前連接的WiFi。

模塊連接WiFi

AP模式參數設置演示

連完WiFi那接下來就“開WiFi”吧!AP模式和手機開熱點一樣,只需設置WiFi名稱和密碼即可。同樣的先使用 AT+CWMODE=2 指令配置模塊爲AP模式,然後發送 AT+CWSAP="ESP8266","12345678",3,4 設置AP的ssid爲“ESP8266”,密碼12345678,最後兩個參數3和4分別表示信道和加密方式。手機連上模塊的WiFi,使用 AT+CWLIF 可查看當前連接到AP的客戶端列表。

開WiFi

TCP/IP相關AT指令

傳輸控制協議(英語:Transmission Control Protocol,縮寫爲 TCP)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議,由IETF的RFC 793定義。在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能,用戶數據報協議(UDP)是同一層內另一個重要的傳輸協議。

在因特網協議族(Internet protocol suite)中,TCP層是位於IP層之上,應用層之下的中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。 ——維基百科

我們常說互聯網互聯網,那兩個連接到互聯網的設備該如何相互“交流”呢?TCP連接就是其中一種最常用的方式。TCP是面向連接的傳輸層協議,通信雙方都要實現TCP協議,其中一方只需目標ip地址和端口號就能發起連接,連接一旦建立,就像在雙方之間拉了一條管子,管子兩端可進行全雙工(雙向同時收發)通信。

TCP是傳輸層協議,是在網絡層IP協議的基礎上封裝而來。而這些封裝的實現細節也是與我們無關,我們只需使用系統所提供的相關接口“拿來即用”,比如網絡編程中的Socket。ESP8266模塊中也實現了TCP/IP協議棧,模塊作爲客戶端可輕鬆使用AT指令向服務端發起TCP連接。連接TCP服務器並開啓透傳模式後,模塊串口收到的數據就會通過TCP連接透傳到服務端,這樣就完成了數據從硬件串口通過網絡到程序進程的傳輸,實現軟硬結合。

指令描述
AT+CIPSTATUS查詢網絡連接信息
AT+CIPMUX設置多連接模式
AT+CIPSTART建立TCP連接UDP傳輸或者SSL連接
AT+CIPCLOSE關閉TCP/UDP/SSL傳輸
AT+CIPMODE設置透傳模式
AT+CIPSEND發送數據

透傳模式下WiFi模塊與服務器TCP網絡通訊演示

講的再多,還不如親手體驗一下如何用WiFi模塊連接TCP服務器,體會TCP/IP相關AT指令的具體使用。首先我們需要一個TCP服務器,利用調試工具“網絡調試助手”(軟件在資料包中)即可創建一個TCP服務器,實現服務端對指定端口監聽TCP連接請求,當然也可以自己寫程序實現,爲了簡便這裏用現成的就好。

打開“網絡調試助手”,左側選擇“TCP服務器”,輸入自定的端口號(1024-65535),點擊“連接”按鈕開始監聽本機TCP連接請求。在進行下一步之前,請確保電腦和WiFi模塊連接到同一個路由器。

配置網絡調試助手

把WiFi模塊和電腦連接,在sscom確定AT指令能正常使用後,就可以開始配置TCP連接了,具體步驟如下:

  1. 根據上面“sta模式連接WiFi演示”一節把模塊連上WiFi

  2. 輸入指令 AT+CIPMUX=0 設置單連接

  3. 從“網絡調試助手”得知本機IP和端口,輸入指令 AT+CIPSTART="TCP","192.168.43.140",1234(指令參數分別爲連接類型、目標IP地址和端口號)向服務器發起TCP連接請求,握手成功並建立連接後,服務器端的“網絡調試助手”就會顯示客戶端IP和端口信息,此時雙方已做好收發數據的準備

  4. 輸入指令 AT+CIPMODE=1 開啓透傳模式

  5. 輸入命令 AT+CIPSEND 進入透傳模式,此時模塊會把所有串口收到的數據都從TCP端口發送至服務器,同樣的,從服務器收到的數據也會從模塊串口發送出去打印到sscom上。這樣WiFi模塊就真正成爲了連接硬件與網絡的橋樑,實現了串口到TCP的協議轉換

  6. 若要退出透傳模式返回AT指令模式,需發送不帶回車換行的 +++ (取消勾選sscom的“發送新行”再發送指令即可)

模塊與服務器交互

見識了TCP透傳的強大,只要再稍微學習一下socket網絡編程,那麼對於通過單片機串口收發數據實現的功能,現在都可以通過自己編寫服務器上的TCP程序來實現。當我第一次在命令行看到打印的串口數據、體驗到網絡互通的魅力時,我就知道——我的“WiFi門鎖”有戲了!


 

其他常用指令

除了上面列舉的主要功能指令,ESP8266 模塊還有一些常用的指令:

指令描述
AT+CIOBAUD設置串口波特率
AT+SAVETRANSLINK保存透傳到 Flash
AT+CWSTARTSMART開啓 SmartConfig
AT+CWSTOPSMART停止 SmartConfig

AT+CIOBAUD 指令用於設置串口波特率,示例: AT+CIOBAUD=9600 (設置波特率爲9600)。 設置好TCP連接信息後通過 AT+SAVETRANSLINK 指令把TCP連接透傳保存到Flash,掉電不丟失。重新上電後模塊會自動聯網建立TCP連接後進入透傳模式,實現了真正意義上的透傳,示例: AT+SAVETRANSLINK=1,"192.168.43.140",1234,"TCP" 。而 AT+CWSTARTSMART 和 AT+CWSTOPSMART 則時用來實現智能配置(Smart Config)的。


 

注意事項

使用WiFi模塊的一些細節及注意事項

  1. 模塊使用3.3V供電,一定注意電源的穩定,一些USB轉串口模塊電源不能滿足要求。

  2. 模塊在連接WiFi後若斷電,則會在下一次上電後自動重連。同理,模塊在透傳模式下斷電後,下次上電仍會進入透傳模式,不響應AT指令,很容易誤以爲模塊壞了。

  3. 如果斷開TCP連接時沒有實現完整的TCP退出流程,ESP8266 會判斷爲異常開,對TCP server 進行重連。

  4. AT指令一定以回車換行符”\r\n”結尾,但退出透傳模式需發送不帶回車換行的 +++

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章