ESP8266 ESP-01S模塊使用及AT命令


ESP-01S

PIN定義

工作時連線方法

ESP-01S USB2TTL/MCU
GND GND
TX(GPIO1) RX
RX(GPIO3) TX
3.3V 3.3V

相關文件下載

ESP-01S燒錄

硬件准備

  1. ESP-01S開發板
    這個板很小, 輸出為2排4列的8pin
  2. ESP-01/01S下載器
  3. 或ESP-01/01S轉USB轉接卡
    如果沒有下載器, 也可以用ESP-01/01S專用的USB轉接卡, 在加電前將GPIO0接地(接GND)就能進入燒錄模式
  4. 或自己接線, 使用TTL2USB的轉接卡, 自己連線

ESP-01S進入燒錄狀態與TTL的連線方式

3.3V  -> 3.3V
RST   -> 3.3V
EN    -> 3.3V
GPIO2 -> 3.3V
GND   -> GND
GPIO0 -> GND
TX    -> RX
RX    -> TX

軟件准備

  • Putty 或者 Tera Term 等串口終端軟件
  • Flash下載工具 flash_download_tools, 樂鑫官網下載地址 https://www.espressif.com/zh-hans/support/download/other-tools
    • 當前使用的版本是3.6.4 (flash_download_tools_V3.6.4.zip)
  • ESP8266固件, 樂鑫官網下載地址 https://www.espressif.com/zh-hans/support/download/at 選擇ESP8266ESP8266 Legacy
    • ESP8266_DOUT_8Mbit_v1.5.4.1.zip 這個是出廠固件, 單bin格式
    • ESP8266_NonOS_AT_Bin_V1.7.4.zip 這個是NonOS AT Bin的最后一個版本, 按分區多bin格式
    • 本文不涉及最新的ESP8266 IDF AT Bin燒錄

燒錄出廠固件

固件文件 ESP8266_DOUT_8Mbit_v1.5.4.1.zip, 出廠固件只有一個bin文件, 從0x00000開始整個刷寫, 與后面升級用的分區寫入不一樣, 這個要注意.

  1. ESP-01S上電進入燒錄模式
  2. 運行ESPFlashDownloadTool_v3.6.4, 點擊ESP8266 DownloadTool按鈕
  3. 在出現的窗口中, 選擇SPIDownload標簽頁(默認是這一頁)
  4. 在固件選擇欄中, 只需要勾選一行, 其他都不勾選
  5. 在勾選的這行
    1. 選擇Ai-Thinker_ESP8266_DOUT_8Mbit_v1.5.4.1-a_20171130.bin 文件, 注意文件名中有8Mbit
    2. 地址為 0x00000
  6. 檢查下面的參數配置: CrystalFreq 26M, SPI SPEED是40MHz, SPI MODE是DIO, FLASH SIZE是8Mbit
  7. 點擊START
  8. 工作正常的話, 右邊DETECTED INFO會顯示板子信息, 下邊進度條欄會顯示進度
  9. 完成后, 將ESP-01S斷電, 再以正常模式上電
  10. 打開putty, 連接ESP-01S的COM口, 輸入AT+GMR, 按Ctrl+M, Ctrl+J發送命令, 查看輸出的版本號是否正確

燒錄升級固件

固件文件ESP8266_NonOS_AT_Bin_V1.7.4.zip, 升級固件是按分區提供的, 有多個bin文件, 看起來更復雜一些

  1. ESP-01S上電進入燒錄模式
  2. 運行ESPFlashDownloadTool_v3.6.4, 點擊ESP8266 DownloadTool按鈕
  3. 在出現的窗口中, 選擇SPIDownload標簽頁(默認是這一頁)
  4. 在固件選擇欄中, 勾選需要寫入的行, 文件和地址分別為
    1. boot_v1.7.bin 0x00000
    2. user1.1024.new.2.bin 0x01000
    3. esp_init_data_default_v08.bin 0xfc000
    4. blank.bin 0x7e000
    5. blank.bin 0xfe000
  5. 檢查下面的參數配置: CrystalFreq 26M, SPI SPEED是40MHz, SPI MODE是DIO, FLASH SIZE是8Mbit
  6. 界面右下方, 選擇正確的COM口, 波特率使用默認的115200
  7. 點擊START
  8. 工作正常的話, 右邊DETECTED INFO會顯示板子信息, 下邊進度條欄會顯示進度
  9. 完成后, 將ESP-01S斷電, 再以正常模式上電
  10. 打開putty, 連接ESP-01S的COM口, 輸入AT+GMR, 按Ctrl+M, Ctrl+J發送命令, 查看輸出的版本號是否正確

ESP-01S AT 操作

不需要下載各種串口助手軟件, 直接用putty就可以了. 如果需要發送16進制的字符, 可以用Tera Term

使用Putty連接和發送命令

putty的使用:

  1. 選擇serial, 填入COM編號, 例如COM5, 波特率設為115200, 直接連接.
  2. 發送命令的操作: 輸入命令例如AT, 然后按Ctrl+M,Ctrl+J發送.

關於Ctrl+J的說明

因為一些模塊的AT指令需要以\r\n結束, 這兩個分別代表了CRLF, 在putty中, 回車時會輸出CR, 也可以通過Ctrl+M輸出CR, 但是要輸出LF, 需要使用Ctrl+J

  • Ctrl+M : Carriage Return(“\r”)
  • Ctrl+J : Line Feed(“\n”)

如果你需要輸出上面的AT指令, 就需要這樣進行輸入 A -> T -> Ctrl+M或者Enter -> Ctrl+J, 我一般用Ctrl+M+Ctrl+J

使用Tera Term發送16進制字符

在命令行中輸入16進制並發送是比較麻煩的一件事, 可以先使用可以編輯16進制的文本編輯器, 例如UltraEdit, EmEditor等, 將16進制內容寫入文件, 然后在Tera Term中Send File, 勾選Binary就行了.

PS: 在EmEditor中使用Hex View, 菜單入口是File->Reload->Binary

ESP-01S常用命令

先說一下最常用的幾個, 如果只是需要連上自己的WIFI看看IP, 用下面的命令組合就可以了

# 基礎測試, 應該響應OK
AT
# 顯示固件版本信息
AT+GMR
# 查看當前的WIFI模式
AT+CWMODE?
# 設置為station模式
AT+CWMODE=1
# 列出2.4G WIFI熱點
AT+CWLAP
# 連接熱點
AT+CWJAP="SSID","password"
# 查看IP
AT+CIPSTA?
# ping
AT+PING="202.38.64.5"

以下是分組的詳細命令列表

基本命令

  • AT: 測試, 模塊正常應當返回OK
  • AT+RST: 重啟模塊
  • AT+GMR: 檢查固件版本信息
  • ATE: 配置 AT 命令的回顯.
    • ATE0: 關閉回顯
    • ATE1: 打開回顯
  • AT+UART_CUR? 查看當前的UART配置
  • AT+UART_DEF? 查看默認的UART配置

WIFI命令

  • AT+CWMODE?: 查看當前的WIFI模式(Station/SoftAP/Station+SoftAP), 用=號可以設置
    • AT+CWMODE=3
  • AT+CWLAP: 列出周圍的WIFI AP, 需要先設置為station模式, AT+CWMODE=1
  • AT+CWJAP: 連接到WIFI AP, 命令格式 AT+CWJAP="DXQ","aa123456"
    • 掉電重啟后, 模塊會自動連接之前連接的WIFI
  • AT+CWQAP: 斷開與WIFI AP的連接
  • AT+CIPSTAMAC: 查看客戶端模式時的MAC地址
  • AT+CIPSTA?: 查看客戶端模式的IP地址及掩碼
  • AT+CIPAPMAC?: Query/Set the MAC address of an ESP SoftAP.
  • AT+CIPAP?: Query/Set the IP address of an ESP SoftAP.
  • AT+CWSAP?: 查詢SoftAP模式下的配置(SSID名稱)

TCP/IP命令

  • AT+CIPSTATUS: 獲取TCP/UDP/SSL連接狀態和信息, 先會顯示一個狀態, 然后會列出各個連接
    • 0: The ESP station is not initialized.
    • 1: The ESP station is initialized, but not started a Wi-Fi connection yet.
    • 2: The ESP station is connected to an AP and its IP address is obtained.
    • 3: The ESP station has created a TCP/SSL transmission.
    • 4: All of the TCP/UDP/SSL connections of the ESP device station are disconnected.
    • 5: The ESP station started a Wi-Fi connection, but was not connected to an AP or disconnected from an AP.
  • AT+PING: ping指定的地址, 返回平均響應時間
    • AT+PING="192.168.110.1"
  • AT+CIPSTART: 建立TCP/UDP/SSL連接
    • AT+CIPSTART="TCP","192.168.110.1",22
    • AT+CIPSTART="TCPv6","test-ipv6.com",80
    • AT+CIPSTART="UDP","192.168.101.110",1000,1002,2 第4個參數是本地端口, 第5個是模式, UDP unicast
    • AT+CIPSTART="UDPv6","FF02::FC",1000,1002,0 UDP multicast based on IPv6 network
    • AT+CIPSTART="SSL","iot.espressif.cn",8443
  • AT+CIPSEND: 透傳模式發送數據
  • AT+CIPSENDEX: Send data in the normal transmission mode in expanded ways.
  • AT+CIPCLOSE: 關閉TCP/UDP/SSL連接
  • AT+CIFSR: 獲取本地IP地址和MAC地址
  • AT+CIPSNTPTIME: 查詢SNTP時間
  • AT+CIPMUX?: 查詢連接類型, 0單連接, 1多連接
    • AT+CIPMUX=1 設置為多連接
  • AT+CIPSERVER: 創建或刪除一個 TCP/SSL 服務, 創建前需要執行AT+CIPMUX=1
    • AT+CIPSERVER=1,80 創建一個TCP服務
    • AT+CIPSERVER=1,443,"SSL",1 創建一個SSL服務
    • AT+CIPSERVER=0,1 刪除一個服務並關閉所有連接
  • AT+CIPSERVERMAXCONN?: 查詢允許的服務最大連接數量
  • AT+CIPSTO?: 查詢本地TCP服務超時時間
  • AT+CIPSNTPCFG?: 查詢 time zone and SNTP server.
  • AT+CIPMODE: 查詢傳輸模式
    • 0: 普通傳輸模式
    • 1: Wi-Fi 透傳模式, 只有在TCP單連接模式, 以及UDP+remote host and port do not change模式, 或者SSL單連接模式時允許

命令使用技巧

使用ATE0命令關閉回顯

在使用上位機通過串口操作ESP8266時, 建議一開始初始化時就將回顯關閉.

在使用中, 上位機使用RX中斷接收命令響應, ESP8266響應的每個字節都會產生一個中斷, 上位機在每次收到中斷時, 除了將這個字節記錄到rx buffer, 還會設定一個定時器, 例如20毫秒, 這樣的效果就是如果歸零前持續收到響應, 計時器就持續恢復到20毫秒, 一直到20毫秒內都沒有收到響應, 定時器觸發中斷讓響應接收完成置位, 這時一直阻塞在觀察響應接收位的程序將rx buffer中的字符串取出去判斷.

如果命令帶回顯, 因為有些命令需要較長時間響應, 那么在你輸入命令時就已經有回顯字節, 計時器已經開始工作, 但是在回顯結束后, 真正的響應還沒那么快回來, 而定時器已經超出了20毫秒的區間, 觸發中斷讓響應接收完成置位, 程序根據現在的內容去判斷響應結果, 就出錯了.

關於透傳模式的說明

https://docs.espressif.com/projects/esp-at/en/latest/AT_Command_Set/TCP-IP_AT_Commands.html

Enter the data sending mode. AT will send a packet every 20 ms or when the data reaches 2048 bytes. When a single packet containing +++ is received, the ESP device will exit the data sending mode under the Wi-Fi passthrough mode. Please wait for at least one second before sending the next AT command.
This command can only be used for single connection in the Wi-Fi passthrough mode. For UDP Wi-Fi passthrough, the parameter has to be 0 when using AT+CIPSTART.
相關的命令

# 此時IPMUX必須為0
AT+CIPMUX?

# 開啟UDP連接 M+J
AT+CIPSTART="UDP","192.168.12.210",3333
 # 或者TCP連接 M+J
 AT+CIPSTART="TCP","192.168.12.210",3333

# 檢查IPMODE, 0是普通, 1是透傳
AT+CIPMODE?
 # 設置為透傳, 透傳不允許指定發送長度, 此時從遠程傳入的信息前面不帶`+IPD,18:`這樣的前綴(18是后面跟着的信息長度)
 AT+CIPMODE=1

# IPMODE=1時, 不再接受帶長度的`AT+CIPSEND=16`指令, 只能使用不帶長度的指令
# 開啟本地不受長度限制的傳輸
AT+CIPSEND
# 此時會出現`>`號, 此時任何輸入都會直接發給遠程, 而遠程的所有發送也會發到本地
# 退出方式: 在20ms內(一個單獨的包)輸入`+++`這個字符串, 可以直接粘貼.

在IPMODE=0的普通傳輸模式下, 在AT+CIPSEND=16時, 也可以在>提示符中使用+++退出發送

AT+CIPSEND=16

OK
>
SEND Canceled

注意: +++必須在20ms內(一個單獨的包)輸入完畢, 必須是完整的三個+號, 不能多也不能少, 不能和前面或者后面的命令連接, 否則都會無效.

ESP-01S測試

准備工作

  1. 一個2.4GHz的WIFI AP
  2. 連接到這個AP的一個linux機器(需要運行nc和tcpdump)
  3. 帶USB連接的ESP-01S, 連到工作電腦

測試步驟

  1. 在Linux機器啟動nc和tcpdump
# 開啟udp監聽
nc -u -l 192.168.17.81 3333
# 同時開啟tcpdump監聽
tcpdump -i eth0 udp port 3333 -vv -n
  1. ESP-01S連接到電腦

在putty連接到對應的COM口, 執行命令

# 檢查版本
AT+GMR
AT version:1.7.4.0(May 11 2020 19:13:04)
SDK version:3.0.4(9532ceb)
compile time:May 27 2020 10:12:17
Bin version(Wroom 02):1.7.4
OK

# 切換到station模式
AT+CWMODE=1

OK

# 查看可用的wifi列表
AT+CWLAP
+CWLAP:(4,"NSKY-Guest",-66,"e0:1c:41:30:69:55",1,41,0,5,3,7,0)
+CWLAP:(4,"NSKY-ceshi",-66,"e0:1c:41:30:69:56",1,41,0,5,3,7,0)
+CWLAP:(4,"NSKY",-67,"e0:1c:41:30:67:94",1,48,0,5,3,7,0)
+CWLAP:(4,"NSKY-Guest",-67,"e0:1c:41:30:67:95",1,50,0,5,3,7,0)
+CWLAP:(4,"NSKY-ceshi",-69,"e0:1c:41:30:67:96",1,48,0,5,3,7,0)
+CWLAP:(4,"MDM-Development",-73,"88:25:93:67:bf:a9",1,53,0,4,4,7,0)
+CWLAP:(4,"NSKY",-74,"e0:1c:41:30:68:54",1,53,0,5,3,7,0)
+CWLAP:(3,"DIRECT-b2-HP M427 LaserJet",-52,"6a:14:01:62:3c:b2",4,58,0,4,4,7,1)

OK

# 加入WIFI
AT+CWJAP="NWF","123.1234"
WIFI DISCONNECT
WIFI CONNECTED
WIFI GOT IP

OK

# 查看獲得的IP
AT+CIPSTA?
+CIPSTA:ip:"192.168.17.182"
+CIPSTA:gateway:"192.168.17.1"
+CIPSTA:netmask:"255.255.255.0"

OK

注意: 當ESP-01S發起UDP連接時, linux機器的監聽不管是否開啟, 只要ESP-01S發送了數據, tcpdump都能接收到數據

# 發起UDP連接
AT+CIPSTART="UDP","192.168.17.81",3333,3333,2
CONNECT

OK

# 啟用數據發送, 設置長度為16
# 返回OK后, 進入發送數據模式, 可以在鍵盤輸入字符, 當輸入\0字符或輸入長度超過16都會觸發發送動作, 發送完之后會回到AT交互
AT+CIPSEND=16

OK
>
Recv 16 bytes

SEND OK
  1. 這時候在linux機器上, 可以在nc界面看到接收到的信息, 在tcpdump界面可以看到監測到的udp包

nc

# nc -u -l 192.168.17.81 3333
this is a test w

tcpdump

[root@vm_n01 ~]# tcpdump -i eth0 udp port 3333 -vv -nn
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
18:00:34.787356 IP (tos 0x0, ttl 128, id 65, offset 0, flags [none], proto UDP (17), length 44)
    192.168.17.182.dec-notes > 192.168.17.81.dec-notes: [udp sum ok] UDP, length 16

通過STM32操作ESP-01S

使用STM32F103C8T6

連線方式

ESP-01S STM32 USB2TTL
GND GND GND
TX(GPIO1) PA10
RX(GPIO3) PA9
3.3V 3.3V
PA3 TX
PA2 RX

代碼地址: https://github.com/IOsetting/stm32f103-esp8266
使用說明:

  • 創建一個一級目錄MDK-ARM, 使用Keil MDK5在這個目錄下創建項目
  • 在項目group設置中, 包含對應的C文件
  • 在項目C/C++設置中, 包含對應的頭文件目錄
  • 在user目錄下, 創建config.h, 加入
#ifndef _CONFIG_H
#define _CONFIG_H

const char WIFI_SSID[]  = "WIFI_SSID";
const char WIFI_PASSWORD[] = "password";

#endif

使用STM32F401CCU6

連線方式

ESP-01S STM32 USB2TTL
GND GND GND
TX(GPIO1) PA3
RX(GPIO3) PA2
3.3V 3.3V
PA10(RX) TX
PA9(TX) RX
PA12(RX)
PA11(TX)

代碼地址 https://github.com/IOsetting/stm32f401-esp8266
其他與F103C8T6相同

參考


免責聲明!

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



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