【轉(zhuǎn)載】WIFI模塊-ESP8266-ESP-01使用指南

ESP-01 WIFI模塊

簡介

  • 官方 文檔 https://docs.ai-thinker.com/esp8266

  • 引腳定義

    從模塊背側(cè)看
    3v3 RX
    RST IO0 天線方向
    CHPD IO2
    TX GND
    • 一點(diǎn)參數(shù)

      • ESP chip version: ESP8266
      • Flash size: 1M
      • Onboard USB-TTL converter: No
      • GPIO's broken out/available to free use: 0, 2
      • Power supply information: 3.3VDC
      • Antenna: onboard PCB antenna
    • ESP01有以下幾個特點(diǎn):

      • 支持IIC總線
      • 支持UART
      • 可支持一個數(shù)字輸入/輸出口
      • 不能直接接入模擬輸入/輸出設(shè)置

正常使用時的接線

VCC, GND, URXD, UTXD, CH_PD 這5個io 口就可以了。

  • CH_PD 正常使用時接高電平
  • 區(qū)分 下載模式和運(yùn)行模式,就是GPIO0高低電平問題。
    • 下載模式:CH_PD(EN)、RST、GPIO2、(接3.3V),GPIO0接地。
    • 運(yùn)行模式:CH_PD(EN)、RST、GPIO2、(接3.3V),GPIO0接3.3V。

參考鏈接

https://jingyan.baidu.com/article/0a52e3f4d03556bf63ed7253.html

三種編程方式

  • 1、使用AT指令進(jìn)行操作:

這是最常見的方式,也是最簡單是一種方式。無需編程,使用PC端的串口助手配合簡單的指令就可以實(shí)現(xiàn),也可以配合單片機(jī)發(fā)送指令使用。

  • 2、LUA語言編程:

這是一種單獨(dú)8266編程的方式,可以不依靠單片機(jī)和串口調(diào)試軟件,直接把程序編寫到8266內(nèi)部。

  • 3、Arduino 開發(fā)環(huán)境編程:

這個接觸過Arduino的都會比較熟悉??梢灾苯釉贏rduino ide的環(huán)境下使用Arduino的開發(fā)方式進(jìn)行開發(fā)。個人比較推薦這種方式,因?yàn)楸容^容易接受與理解。arduino相關(guān)資料也比較多。

三種工作模式

  • STA(Station) 模式:

ESP8266 模塊通過路由器連接互聯(lián)網(wǎng),手機(jī)或電腦通過互聯(lián)網(wǎng)實(shí)現(xiàn)對設(shè)備的遠(yuǎn)程控制。

  • AP 模式:

ESP8266 模塊作為熱點(diǎn),相當(dāng)于普通路由器,手機(jī)或電腦直接與模塊連接,實(shí)現(xiàn)局域網(wǎng)無線控制。

  • STA+AP 模式:

兩種模式的共存模式,即可以通過互聯(lián)網(wǎng)控制可實(shí)現(xiàn)無縫切換,方便操作。

就是說模塊可以當(dāng)成一個設(shè)備(client)連接區(qū)域網(wǎng)內(nèi)的路由,也可以設(shè)置成是一個路由(sever),也可以既作為局域網(wǎng)里面的client同時又是其他client的sever。

AT 指令要點(diǎn)

  • AT 指令要求以新行 (CR LF) 結(jié)尾
  • AT 指令必須為大寫英文字母;
  • AT指令默認(rèn)響應(yīng)為OK
  • 一般而言,當(dāng)我們用USB轉(zhuǎn)TTL模塊與Esp8266連接之后,波特率默認(rèn)為115200
  • 用串口軟件輸入指令時,每條AT指令后面都要加一個回車鍵再發(fā)送,即串口助手記得勾選”發(fā)送新行”
AT # 測試指令
AT+GMR # 查看固件
AT+CWMODE=? # 響應(yīng)返回當(dāng)前可支持哪些模式
AT+CWMODE? # 響應(yīng)當(dāng)前處于哪種模式
AT+CWMODE=2 # 1-Station 模式,2-AP 模式,3-AP 兼 Station 模式

AT+CIPSTATUS # 查看當(dāng)前連接
# 說明: <id>:連接的 id 號 0-4
# <type>:字符串參數(shù),類型 TCP 或 UDP
# <addr>:字符串參數(shù), IP 地址
# <port>:端口號
# <tetype>: 0-本模塊做 client 的連接, 1-本模塊做 server 的連接

模式一:Station(client)模式

AT+CWMODE=1 # 指令原型為:AT+CWMODE=<mode>;其中<mode>:1-Station模式,2-AP模式,3-AP兼Station模式。
AT+RST # 配置好模式后需要重啟生效。
AT+CWMODE? # 這條指令可以不要,這是查詢當(dāng)前模式的指令,模式返回是1,說明是Station模式。
AT+CWLAP # 可以讓模塊搜索周圍的信號了,列出可以連接的熱點(diǎn)(中文顯示為亂碼)。
AT+CWJAP="HOTPOINT","1234" # 指令原型為:AT+CWJAP=<ssid>,<pwd>),ssid就是wifi的名字,pwd就是wifi的密碼。
AT+CWJAP? # 查詢一下當(dāng)前連接的AP。
AT+CIFSR # 查看下模塊的IP地址。
# 在通過路由器查看下模塊的IP地址時。如果模塊之前我們設(shè)置成了AP和Station共存模式,則會出現(xiàn)兩個IP,
# 上面的APIP是作為無線AP的IP地址。
# 下面的STAIP是它作為客戶端從路由器獲取到的IP 地址。

AT+CIPSTA_CUR=”192.168.6.100”,"192.168.6.1","255.255.255.0" # 這條指令可以不要,這是分配固定ip。
AT+CIPSTART="TCP","192.168.1.100",8080 # 連接到服務(wù)器,/192.168.1.100為服務(wù)器IP地址;8080為端口。
AT+CIPSEND=4 # 發(fā)送四個字節(jié)的數(shù)據(jù)。
  • 小提示
    • 通過路由器管理界面查看到模塊的MAC地址為:18-FE-34-9C-8B-9D,可以調(diào)整一下路由器的IP分發(fā)策略,讓這個mac地址獲得固定的ip,這樣每次連接路由器之后就不用查看ip了。配置后提示要重啟路由器才生效,沒關(guān)系以后有時間再重啟。
    • 測試連接服務(wù)器時,可以在電腦(電腦也需連接同一個路由器)上建立一個TCP服務(wù)器,然后用我們剛剛連接到路由器的ESP8266模塊連接到我們建立的這個TCP服務(wù)器上,然后在這個模塊與服務(wù)器之間轉(zhuǎn)輸數(shù)據(jù)。 用到的工具是網(wǎng)絡(luò)助手NetAssist.exe,運(yùn)行后在網(wǎng)絡(luò)協(xié)議類型:TCP Server ,然后點(diǎn)“連接”按扭,成為一臺TCP服務(wù)器。

模式二:AP(sever)模式

AT+CWMODE=2 # 指令原型為:AT+CWMODE=<mode>;其中<mode>:1-Station模式,2-AP模式,3-AP兼Station模式。
AT+RST # 配置好模式后需要重啟生效。
AT+CWMODE? # 這是查詢當(dāng)前模式的指令,模式返回是2,說明是AP模式。
AT+CWSAP="ESP8266","0123456789",11,0
# 指令原型為:AT+ CWSAP=<ssid>,<pwd>,<chl>, <ecn>;
# 其中<ssid>:字符串參數(shù),接入點(diǎn)名稱;
# <pwd>:字符串參數(shù),密碼最長64字節(jié),ASCII;
# <chl>:通道號;
# < ecn >:0-OPEN,1-WEP,2-WPA_PSK,3-WPA2_PSK,4-WPA_WPA2_PSK。

# 然后現(xiàn)在就可以在你的手機(jī)或者是電腦通過無線網(wǎng)卡連接到ESP8266上了。
AT+CWLIF # 查看已接入設(shè)備的 IP
# AT+CIFSR # 查看本模塊的 IP 地址,AP 模式下無效!會造成死機(jī)現(xiàn)象!

AT+CIPMUX=1
# 開啟多連接模式,因?yàn)橹挥性陂_啟多連接模式的時候才能開啟服務(wù)器模式。注意:透傳只能在單連接模式下進(jìn)行。
# 模塊最多允許5個客戶端連接(每個客戶端對應(yīng)一個id號,0--4)
AT+CIPSERVER=1,8080 # 建立SERVER(0關(guān)閉,1開啟),設(shè)置端口為8080
# AT+CIPSERVER=1  # 默認(rèn)的端口333 
AT+CIPSEND=0,10 # 下一次輸入字符串,0是通道號,10是數(shù)據(jù)長度。
# 每個連接進(jìn)來的TCPClient都會有一個ID,默認(rèn)從0開始增加
# 多連接模式下,第一個參數(shù)指明第幾個Client(客戶端),第二個參數(shù)指明發(fā)送幾個字節(jié),這個用的10,超過后只發(fā)送前20字節(jié)。
# 單路連接時,只指定發(fā)送長度即可。

最后,我們就可以通過網(wǎng)絡(luò)調(diào)試助手來通過“TCP Client”模式下添加“IP:192.168.4.1(模塊默認(rèn)的IP),端口8080(第6步設(shè)置的)” 值得一提的是,ESP8266當(dāng)服務(wù)器的時候,客戶端如果沒有數(shù)據(jù)傳輸,隔一段時間會自動斷開連接,可通過AT+CIPSTO=<time>命令設(shè)置超時時間(說明:<time>:服務(wù)器超時時間,0~2880,單位為s)。

模式三:AP+Station(server+client)模式

AT+CWMODE=3 # 指令原型為:AT+CWMODE=<mode>;其中<mode>:1-Station模式,2-AP模式,3-AP兼Station模式。
AT+RST # 配置好模式后需要重啟生效。
AT+CWSAP="ESP8266","0123456789",11,0
# 指令原型為:AT+ CWSAP=<ssid>,<pwd>,<chl>, <ecn>;
# <ssid>:字符串參數(shù),接入點(diǎn)名稱;
# <pwd>:字符串參數(shù),密碼最長64字節(jié),ASCII;
# <chl>:通道號;
# < ecn >:0-OPEN,1-WEP,2-WPA_PSK,3-WPA2_PSK,4-WPA_WPA2_PSK。
# 然后現(xiàn)在就可以在你的手機(jī)或者是電腦通過無線網(wǎng)卡連接到ESP8266上了。
# 打開手機(jī)上的有人網(wǎng)絡(luò)助手,TCP server→配置→激活→能看到此時手機(jī)的IP和端口號,要記下,下面要用。

AT+CIPMODE=1 # 開啟透傳模式。
AT+CIPMUX=0 # 開啟單路模式。
AT+CIPSTART="TCP","192.168.4.2",8080
# 192.168.4.2為服務(wù)器IP地址;8080為端口。填剛才記下的手機(jī)IP和端口號
# 這時手機(jī)已經(jīng)能向模塊發(fā)信息了,但模塊不能發(fā)。
AT+CIPSEND=4 # AT+CIPSEND=(要發(fā)送的字節(jié)長度)
# AT+CIPSEND # ESP8266發(fā)送數(shù)據(jù)至手機(jī)。 

其他:UDP 傳輸

UDP–分為發(fā)送端和接收端,面向無連接的通信(速度快),只向指定的ip(每一臺電腦都有自己的ip地址,向指定的ip地址發(fā)數(shù)據(jù),數(shù)據(jù)就發(fā)送到了指定的電腦)端口發(fā)送,不管你接沒接收到,只管發(fā)。

  • UDP傳輸,此時Esp8266不分Server和Client
AT+CWMODE=3
AT+CWJAP="SSID","password"
AT+CIPMUX=1

由于沒有客戶端和服務(wù)器,我們可以設(shè)置是否通信的一端可變,就是設(shè)置遠(yuǎn)端是否可變,在不可變的情況下我們分配給連接的另一端一個ID,可變的情況下當(dāng)有多個連接時就會發(fā)送到最近一個連接的設(shè)備

  • 遠(yuǎn)端固定,”AT+CIPSTART”最后參數(shù)為0
AT+CIPSTART=4,"UDP","192.168.43.113",333,8080,0
# 這里的4表示給對方的ID,
# 192.168.43.113對方IP
# 333表示對方的端口
# 8080設(shè)置自己的端口(隨意設(shè)置0~65535)
# 0表示遠(yuǎn)端固定

AT+SEND=4,5 # 發(fā)送數(shù)據(jù),給定4表示對方的ID,5表示自己的長度
  • 遠(yuǎn)端可變,”AT+CIPSTART”最后參數(shù)為2
AT+CIPSTART="UDP","192.168.43.113",333,8080,2 # 然后就可以發(fā)送數(shù)據(jù)了
AT+CIPSEND=6,"192.168.43.111",333 # 發(fā)送給指定的UDP地址:字節(jié)長度,對方IP,對方端口

示例設(shè)置一:TCP 透傳

TCP–分為服務(wù)器和客戶端,與udp不同的是雙方建立正常的連接后,才能通信,每次通信都會檢測連接正不正常。(通信可靠,速度比udp慢) 注意只有在單連接的時候才可以設(shè)置為透傳模式–就是串口的數(shù)據(jù)直接發(fā)送到網(wǎng)絡(luò),網(wǎng)絡(luò)的數(shù)據(jù)直接發(fā)送到串口

AT+CWMODE=3
AT+CWJAP="SSID","PASSWD"
AT+CIFSR    # 查詢自己的IP地址 
AT+CIPSTART="TCP","192.168.xxx.xxx",8000 # 作為 TCP client 鏈接到上述服務(wù)器
AT+CIPMODE=1 # 使能透傳模式
AT+CIPSEND # 向服務(wù)器發(fā)送數(shù)據(jù)

示例設(shè)置二:多連接模式

AT+CWMODE=3
AT+RST # 重啟生效
AT+CWSAP="ESP8266_TEST","1234",1,3 # 名字,密碼,通道和密碼模式
AT+CIPMUX=1 # 啟動多連接
AT+CIPSERVER=1,8000 # 建立SERVER(0關(guān)閉,1開啟), 端口8000,

上面的配置成多連接,重啟,配置名字和密碼只要配置一次就好, 即使之后斷電再上電也不用重復(fù)配置,每次上電后只要輸入AT+CIPMUX=1和AT+CIPSERVER=1,8080即可。

Arduino 連接

接線

  • GND,VCC
  • TX,RX
  • CH_PD

示例代碼

#include <SoftwareSerial.h>
//#include <string.h>
#define TIMEOUT 5000 // mS
#define LED 5
SoftwareSerial mySerial(2, 3); // RX, TX
const int button = 11;
int button_state = 0;

void setup()
{
  pinMode(LED, OUTPUT);
  pinMode(button, INPUT);

  Serial.begin(9600);
  mySerial.begin(115200);
  SendCommand("AT+RST", "Ready");
  delay(5000);
  SendCommand("AT+CWMODE=1", "OK");
  SendCommand("AT+CIFSR", "OK");
  SendCommand("AT+CIPMUX=1", "OK");
  SendCommand("AT+CIPSERVER=1,80", "OK");
}

void loop() {
  button_state = digitalRead(button);

  if (button_state == HIGH) {
    mySerial.println("AT+CIPSEND=0,23");
    mySerial.println("<h1>Button was pressed!</h1>");
    delay(1000);
    SendCommand("AT+CIPCLOSE=0", "OK");
  }

  String IncomingString = "";
  boolean StringReady = false;

  while (mySerial.available()) {
    IncomingString = mySerial.readString();
    StringReady = true;
  }

  if (StringReady) {
    Serial.println("Received String: " + IncomingString);

    if (IncomingString.indexOf("LED=ON") != -1) {
      digitalWrite(LED, HIGH);
    }

    if (IncomingString.indexOf("LED=OFF") != -1) {
      digitalWrite(LED, LOW);
    }
  }
}

boolean SendCommand(String cmd, String ack) {
  mySerial.println(cmd); // Send "AT+" command to module
  if (!echoFind(ack)) // timed out waiting for ack string
    return true; // ack blank or ack found
}

boolean echoFind(String keyword) {
  byte current_char = 0;
  byte keyword_length = keyword.length();
  long deadline = millis() + TIMEOUT;
  while (millis() < deadline) {
    if (mySerial.available()) {
      char ch = mySerial.read();
      Serial.write(ch);
      if (ch == keyword[current_char])
    if (++current_char == keyword_length) {
      Serial.println();
      return true;
    }
    }
  }
  return false; // Timed out
}
  • 效果

通過連接服務(wù)器端口,發(fā)送 “LED=ON” 可以打開小燈,發(fā)送 “LED=OFF” 可以關(guān)閉小燈。

Arduino 安裝ESP8266 固件編程

編寫固件時可以直接使用GPIO2

int PIN = 2;
void setup() {
  // initialize digital esp8266 gpio 2 as an output.
  pinMode(2, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(2, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(2, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

原文連接 https://combofish.github.io/2020/02/09/how-to-use-wifi-module-esp8266-esp-01.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容