http://www.shaoguoji.cn/2017/01/15/ESP8266-usage/
注意事項
使用WiFi模塊的一些細節及注意事項
-
模塊使用3.3V供電,一定注意電源的穩定,一些USB轉串口模塊電源不能滿足要求。
-
模塊在連接WiFi后若斷電,則會在下一次上電后自動重連。同理,模塊在透傳模式下斷電后,下次上電仍會進入透傳模式,不響應AT指令,很容易誤以為模塊壞了。
-
如果斷開TCP連接時沒有實現完整的TCP退出流程,ESP8266 會判斷為異常開,對TCP server 進行重連。
-
AT指令一定以回車換行符”\r\n”結尾,但退出透傳模式需發送不帶回車換行的
+++
AT指令有三:基礎指令; wifi功能指令; TCP/IP工具箱指令; * 基礎指令; * AT 測試指令 * AT+RST 重啟模塊 * AT+GMR 查看版本信息 * wifi功能指令: * AT+CWMODE 選擇WIFI應用模式 * AT+CWJAP 加入AP * AT+CWLAP 列出當前可用AP * AT+CWQAP 退出與AP的連接 * AT+CWSAP 設置AP模式下的參數 * AT+CWLIF 查看已接入設備的IP * TCP/IP工具箱指令 * AT+ CIPSTATUS 獲得連接狀態 * AT+CIPSTART 建立TCP連接或注冊UDP端口號 * AT+CIPSEND 發送數據 * AT+CIPCLOSE 關閉TCP或UDP * AT+CIFSR 獲取本地IP地址 * AT+CIPMUX 啟動多連接 * AT+CIPSERVER 配置為服務器 * AT+CIPMODE 設置模塊傳輸模式 * AT+CIPSTO 設置服務器超時時間
1sta模式連接WiFi演示
連接到路由器, arduino 結尾選擇,
普通串口軟件注意勾選“發送新行”
-
發送
AT+CWMODE=1
指令配置模塊為sta模式(參數1,2,3分別對應模式sta,AP和sta/AP)。 -
發送
AT+CWLAP
指令掃描當前附近WiFi,模塊會返回可用AP列表。 -
使用
AT+CWJAP="WiFi名稱","WiFi密碼"
連接到指定的路由器,比如我在圖書館的WiFi是 “lib-free-wlan01”,密碼是“zhku-lib”,實際連接WiFi發送的指令就是AT+CWJAP="lib-free-wlan01","zhku-lib"
。 -
返回的“WIFI CONNECTED”說明連接成功,“WIFI GOT IP”代表模塊分配到了IP。
-
最后可使用
AT+CWQAP
斷開當前連接的WiFi。
2AP模式參數設置演示
連完WiFi那接下來就“開WiFi”吧!AP模式和手機開熱點一樣,只需設置WiFi名稱和密碼即可。
- 先使用
AT+CWMODE=2
指令配置模塊為AP模式 - 發送
AT+CWSAP="ESP8266","12345678",3,4
設置AP的ssid為“ESP8266”,密碼12345678,最后兩個參數3和4分別表示信道和加密方式。 - 手機連上模塊的WiFi,使用
AT+CWLIF
可查看當前連接到AP的客戶端列表。
3透傳模式下WiFi模塊與服務器TCP網絡通訊演示
指令 | 描述 |
---|---|
AT+CIPSTATUS | 查詢網絡連接信息 |
AT+CIPMUX | 設置多連接模式 |
AT+CIPSTART | 建立TCP連接UDP傳輸或者SSL連接 |
AT+CIPCLOSE | 關閉TCP/UDP/SSL傳輸 |
AT+CIPMODE | 設置透傳模式 |
AT+CIPSEND | 發送數據 |
打開“網絡調試助手”,左側選擇“TCP服務器”,輸入自定的端口號(1024-65535),點擊“連接”按鈕開始監聽本機TCP連接請求。在進行下一步之前,請確保電腦和WiFi模塊連接到同一個路由器。
把WiFi模塊和電腦連接,在sscom確定AT指令能正常使用后,就可以開始配置TCP連接了,具體步驟如下:
-
根據上面“sta模式連接WiFi演示”一節把模塊連上WiFi
-
輸入指令
AT+CIPMUX=0
設置單連接 -
從“網絡調試助手”得知本機IP和端口,輸入指令
AT+CIPSTART="TCP","192.168.43.140",1234
(指令參數分別為連接類型、目標IP地址和端口號)向服務器發起TCP連接請求,握手成功並建立連接后,服務器端的“網絡調試助手”就會顯示客戶端IP和端口信息,此時雙方已做好收發數據的准備 -
輸入指令
AT+CIPMODE=1
開啟透傳模式 -
輸入命令
AT+CIPSEND
進入透傳模式,此時模塊會把所有串口收到的數據都從TCP端口發送至服務器,同樣的,從服務器收到的數據也會從模塊串口發送出去打印到sscom上。這樣WiFi模塊就真正成為了連接硬件與網絡的橋梁,實現了串口到TCP的協議轉換 -
若要退出透傳模式返回AT指令模式,需發送不帶回車換行的
+++
(取消勾選sscom的“發送新行”再發送指令即可) - 手機,ESP8266,電腦無線連接路由器賬戶 dongdong 密碼 dongdong
- 電腦網線連接路由器 網頁192.168.1.1 查詢路由器當前狀態,可看到三個設備分配的地址
4、手機做客戶端-client,模塊做服務端-server
http://www.yfrobot.com/thread-11791-1-1.html
AT+CWMODE=2 // 將模塊配置到 AP 模式
AT+CWSAP="YFRobot_ESP","12345678",11,0 // 設置模塊 AP 模式下的參數
- YFRobot_ESP ---- 接入點名稱
- 12345678 ---- 密碼
- 11 ---- 通道號 (通道修改后需要+RST重啟模塊)
- 0 ---- 加密模式 0 - OPEN 1 - WEP 2 - WPA_PSK 3 - WPA2_PSK 4 - WPA_WPA2_PSK
AT+RST :復位
AT+CIFSR :查詢模塊IP端口
AT+CIPMUX=1 :多連接
AT+CIPSERVER=1,6000 :建立服務器的同時順便設端口號
注:AT+CIPMUX=1 情況下才能開啟服務器。
前兩條AT指令,配置一次即可,模塊重啟不會改變,第三條為查詢指令;也就是說當模塊下次重啟時,只需配置最后兩條AT指令!
手機連接到該模塊
- 192.168.4.2,38:bc:1a:c7:18:47 -- 返回 IP 地址,MAC 地址
手機向ESP8266發送命令
- 參數
- 0 -- 連接的 id 號 (范圍 0~4)
- TCP -- 連接類型
- 192.168.4.2 -- 手機客戶端IP地址
- 43188- 端口號
- 1 -- 本模塊做 server 的連接(0 -- client)
ESP8266向手機發送命令
ESP模塊做為服務端想要給手機客戶端發送數據,必須申請(不然不知道發給誰了):
原理:
AT+CIPSEND=0,15 申請發送15個字符數據 至 0 號客戶端(客戶端號按連接順命名)
請求成功后,會顯示符號“>”,這時直接發送已申請大小的數據即可:
hello client-0!
注:若輸入數據大小大於申請大小,則數據不能完整發送
若輸入數據大小小於申請大小,則等待輸入數據輸入滿大小才進行發送
所以需要為單片機寫程序,每次把上述過程,通過串口命令發送給esp8266,然后由此轉發:
這里以Arduino單片機為例;
兩點重要:
1軟串口從esp8266 收到的是亂碼, 重新設置下波特率就解決了。
AT+UART=9600,8,1,0,0
2 Arduio設置的波特率實際的2倍。
我們期望 9600, 但是你的設置成9600*2(見程序),我也不知道為什么這樣,估計是版本和庫文件的問題。
#include <SoftwareSerial.h>
#define DEBUG true
SoftwareSerial esp8266(2,3); // make RX Arduino line is pin 2, make TX Arduino line is pin 3.
// This means that you need to connect the TX line from the esp to the Arduino's pin 2
// and the RX line from the esp to the Arduino's pin 3
void setup()
{
Serial.begin(19200);
esp8266.begin(19200); // your esp's baud rate might be different
sendCommand("AT+CWMODE=2\r\n",2000,DEBUG); // reset module
// delay(20000);
String s="AT+CWSAP=\"DDD\",\"12345678\",11,0\r\n";
sendCommand(s,2000,DEBUG);// reset module
Serial.println("1");
// delay(30000);
sendCommand("AT+RST\r\n",2000,DEBUG); // reset module
delay(3000);
sendCommand("AT+CIPMUX=1\r\n",1000,DEBUG); // configure for multiple connections
// delay(20000);
sendCommand("AT+CIPSERVER=1,6000\r\n",1000,DEBUG); // turn on server on port 80
Serial.println("Server Ready");
}
void loop() { // run over and over
if (esp8266.available()) {
Serial.write(esp8266.read());
}
if (Serial.available()) {
esp8266.write(Serial.read());
}
}
String sendCommand(String command, const int timeout, boolean debug)
{
String response = "";
esp8266.print(command); // send the read character to the esp8266
long int time = millis();
while( (time+timeout) > millis())
{
while(esp8266.available())
{
// The esp has data so display its output to the serial window
char c = esp8266.read(); // read the next character.
response+=c;
}
}
if(debug)
{
Serial.print(response);
}
return response;
}
5、模塊做客戶端-client,手機做服務端-server
wifi連接不變按照上面的步驟連接即可,然后手機端開啟服務,模塊連接手機!連接完成,即可進行數據通信,具體操作如圖:
模塊配置指令如下:
TCP 連接 -----
● 單路連接:
AT+CIPMUX=0 單路連接設置(只有當連接都斷開才可更改,可先AT+RST)
AT+CIPSTART="TCP","192.168.4.2",5000 建立 TCP 連接(類型,IP,端口號由手機開啟服務決定,上圖可見)
AT+CIPSEND=17 申請發送字符大小,回顯字符 ">"
hello tcp server! 發送申請大小的字符串
手機端成功接收字符串:“hello tcp server!” 手機發送字符,ESP也同樣可以接收到!
● 多路連接:
AT+CIPMUX=1 多路連接設置(只有當連接都斷開才可更改,可先AT+RST)
AT+CIPSTART=0,"TCP","192.168.4.2",5000 建立 TCP 連接(和單路區別,需要參數 ID 號,范圍0~4)
AT+CIPSEND=0,17 申請發送字符大小,回顯字符 ">"
hello tcp server! 發送申請大小的字符串
手機端成功接收字符串:“hello tcp server!” 手機發送字符,ESP也同樣可以接收到!
5 一鍵配置原理(smartconfig)
先來說smartconfig吧 也就是所謂的一鍵配置,速度比AP模式快,為什么呢?請看下面分解。
所謂的smartconfig就是
手機APP端發送包含WIFI 用戶名 WIFI密碼的 UDP 廣播包或者組播包,
智能終端的WIFI芯片可以接收到該UDP包,只要知道UDP的組織形式,就可以通過接收到的UDP包解密 出WIFI 用戶名 密碼,
然后智能硬件 配置受到的WIFI 用戶名 密碼到指定的WIFI AP 上。
6 WIFI修改波特率
AT+UART=4800,8,1,0,0
其他常用指令
除了上面列舉的主要功能指令,ESP8266 模塊還有一些常用的指令:
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)的。
指令 | 描述 |
---|---|
AT+CIOBAUD | 設置串口波特率 |
AT+SAVETRANSLINK | 保存透傳到 Flash |
AT+CWSTARTSMART | 開啟 SmartConfig |
AT+CWSTOPSMART | 停止 SmartConfig |