esp8266(0) AT指令


http://www.shaoguoji.cn/2017/01/15/ESP8266-usage/

 

 

注意事項

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

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

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

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

  4. 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 結尾選擇,

 

 普通串口軟件注意勾選“發送新行”

 

 

  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。

2AP模式參數設置演示

連完WiFi那接下來就“開WiFi”吧!AP模式和手機開熱點一樣,只需設置WiFi名稱和密碼即可。

  1. 先使用 AT+CWMODE=2 指令配置模塊為AP模式
  2. 發送 AT+CWSAP="ESP8266","12345678",3,4 設置AP的ssid為“ESP8266”,密碼12345678,最后兩個參數3和4分別表示信道和加密方式。
  3. 手機連上模塊的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連接了,具體步驟如下:

  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的“發送新行”再發送指令即可)

  7. 手機,ESP8266,電腦無線連接路由器賬戶 dongdong 密碼 dongdong
  8. 電腦網線連接路由器 網頁192.168.1.1 查詢路由器當前狀態,可看到三個設備分配的地址
  9.  

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指令!

 

手機連接到該模塊

 

可用AT指令 查詢已連入的設備
AT+CWLIF                                               查詢已連入設備
  •     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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM