Arduino--ESP8266 無線模塊(四)


Arduino--ESP8266 無線模塊(四)

一、Esp8266簡介

官網:https://www.espressif.com/zh-hans
  2015年物聯網處於爆發的一年,樂鑫的ESP8266WIFI 芯片成為強烈的催化劑。成功的將2014年前的40以上的WIFI成本壓縮到現在的10元左右。內置WIFI前端和高性能的32位MCU,基本引爆物聯網市場,幾乎牽扯到電子的行業,都可以用上,比如WIFI開關 燈具 WIFI定位 電飯鍋 空氣凈化器 等消費類小家電與大家電,都面臨這一場技術革新,與新的用戶體驗!比如你僅僅增加10元的成本就可以把自己的產品被手機控制了。
文檔資料:https://www.espressif.com/zh-hans/support/download/documents

 
ESP8266

 

  1. Esp8266特點:
    1)低功耗、高集成度的 Wi-Fi 芯片。
    2)最小系統僅需 7 個元器件
    3)超寬工作溫度范圍:-40°C 至 +125°C
    4)ESP8285 : ESP8266 內封 8 Mbit Flash。
    5)ESP8266EX 有三種運行模式:激活模式、睡眠模式和深度睡眠模式,能夠延長電池壽命。
    最小系統搭建(強調:燒錄時候,一定要讓GPIO0處於低電平,即接GND):


     
    最小系統

TX:串口寫
GND:接地
CH_PD:高電平為可用,低電平為關機
GPIO2:可懸空
RST:重置,可懸空
GPIO0:上拉為工作模式,下拉為下載模式,可懸空
VCC:3.3V(切不可接5V,燒片)
RX:串口讀
示例代碼:
https://github.com/esp8266/Arduino

 
引腳說明

 

  1. 工作模式
    1)AP+STA模式
    ESP8266模塊可以作為一個工作站,所以我們可以將它連接到Wi-Fi網絡。它也可以作為軟接入點(soft-AP)運行,建立自己的Wi-Fi網絡。因此,我們可以將其他站連接到這樣的ESP模塊。ESP8266也可以在工作站和軟接入點模式下工作。


     
    AP+STA模式

    2)STA 模式
    站級有幾個功能,以方便管理Wi-Fi連接。如果連接丟失,ESP8266將自動重新連接到上一次使用的接入點,一旦它再次可用。模塊重啟也會發生同樣的情況。


     
    STA 模式
  1. 使用TTL調試
    使用USB接Esp8266,CH_PD需要串聯一個10kΩ的電阻后,再連接3.3v的電源。


     
    串口調試
  2. 常用AT指令:
    1)重啟模塊
    指令為AT+RST


     
    重啟模塊
  1. 查看版本信息
    指令為AT+GMR


     
    查看版本信息

3)恢復出廠設置
指令為AT+RESTORE

 

 
恢復出廠設置

4)設置應用模式
指令為AT+CWMODE=3
注釋:1為Station,2為AP,3為AP兼Station 模式

 

 
設置應用模式

5)查詢工作模式
指令為AT+CWMODE?

 

 
查詢工作模式

6)查看附近無線網絡
指令為AT+CWLAP

 

 
查看附近無線網絡

7)加入AP
指令為AT+CWJAP="SSID","PWD"
ChinaNet-304

 

 
加入路由器

8)退出接AP
指令為:AT+CWQAP

9)設置AP模式下的參數
指令為:AT+CWSAP
設置命令
AT+CWSAP=<ssid>,<pwd>,<chl>, <ecn>
參數定義:

參數 定義 取值 對取值的說明
<ecn> 加密方式 0 OPEN
<ecn> 加密方式 1 WEP
<ecn> 加密方式 2 WPA_PSK
<ecn> 加密方式 3 WPA2_PSK
<ecn> 加密方式 4 WPA_WPA2_PSK
<ssid> 接入點名稱   字符串參數
<pwd> 密碼   字符串型,最長64字節,ASCII編碼
<chl> 通道號    

10)獲取本地IP地址
指令為AT+CIFSR

 

 
獲取本地IP地址

 

 
獲取本地IP地址

11)設置透傳模式
指令為AT+CIPMODE=1
1 為STA模式

 

 
開啟透傳模式

STA模式:(透傳模式)
ESP8266模塊要和電腦(服務端)在同一個局域網中。對路由器不需要任何其他的配置,只需要知道WIFI名稱和密碼;也不需要有外網;

12)連接到服務器
指令為AT+CIPSTART="TCP","服務器IP地址",端口
先在電腦打開服務端:

 

 
建立服務端
 
連接服務器

12)發送數據
發送數據:AT+CIPSEND
指令為:

 

 
發送數據

 

 
發送數據

12)退出透傳模式
退出透傳模式的辦法是發送+++(后面不要加回車)即可退出。

14)AT+CIOBAUD=9600 修改波特率
T+CWMODE? //查詢工作模式 1.Station (客戶端模式)2.AP (接入點模式)3.Station+AP (兩種模式共存)
更多請查看文檔:AT-Espressif AT 指令集_AIThinkerMod_v021

二、電路原理圖

 
電路原理圖

 

 
ESP8266
arduino ESP8266
0 TX
1 RX
GND GND
VCC VCC 3.3V
2 CH_PD

注意:電壓一定要為3.3V
連接好后,ESP8266板上的LED會亮。

三、安裝庫文件

  1. 添加庫文件
    https://github.com/esp8266/Arduino

1)選擇首選項:

 
選擇首選項


在其他Board Manager URL字段中輸入https://arduino.esp8266.com/stable/package_esp8266com_index.json。 您可以添加多個URL,用逗號分隔。

 
附加開發板管理


2)開發板管理器

 
開發板管理器

 

 
開發板管理器

 

 
安裝庫文件


3)開發板選板
http://www.cnblogs.com/kekeoutlook/p/8286117.html

 
安裝完成

 

 
安裝完成

 

文檔地址:
https://arduino-esp8266.readthedocs.io/en/latest/installing.html

第3方庫文件下載地址:
https://github.com/itead/ITEADLIB_Arduino_WeeESP8266

 
庫文件

 

 
庫文件

 

四、Arduino與Esp8266硬串口連接

就是將Arduino的串口直接到Esp8266串口,注意RX連RX,TX連TX。

  1. 連接
ESP8266 Arduino Uno
TX 1(TX1)
GND GND
CH_PD 串聯10KΩ電阻連接3.3v
GPIO2 -
RST -
GPIO0 -
VCC 3.3V
RX 0 (RX0)

CH_PD需要串聯一個10kΩ的電阻后,再連接3.3v的電源

  1. 代碼
#include <Arduino.h> const int tx = 1; const int rx = 0; //硬串口連接 void setup() { //Serial.begin(9600); 注意!!千萬別加這行代碼 pinMode(rx,INPUT_PULLUP); pinMode(tx,INPUT_PULLUP); } void loop() { } 
  1. 測試
    可以直接發AT指令給Esp8266:
    波特率一定要先115200。
    每個版本的ESP8266波特率不同,一般是115200,你可以多測試幾次。


     
    串口調試

五、Arduino與Esp8266軟串口連接

  1. Esp8266軟串口連接
    把ESP8266 的波特率改為9600。之前我們連接的Arduino上的0和1是硬串口。
    注意,使用軟串口連接導線時,模塊的rx連接Arduino的tx,模塊的tx連接Arduino的rx。
    設置arduino上的8號口為RX,9號口為TX。就需要把ESP8266 的TX連接到Arduino的9號口上,模塊的RX連接Arduino的8號口上。
ESP8266 Arduino Uno
VCC 3.3V(不能接5V,可能會燒壞)
GND GND
CH_PD (10k電阻)3.3V (實際上可以不加電阻)
RX 9(接軟串口發送端,自定義)
TX 8(接軟串口接收端,自定義)
  1. 代碼
#include <Arduino.h> #include <SoftwareSerial.h> //軟串口通訊 SoftwareSerial espSerial(9, 8); //定義虛擬串口名為mySerial RX為9, TX為8 void setup() { espSerial.begin(115200); //初始化虛擬串口 esp8266 01波特率 Serial.begin(115200); //初始化Arduino默認串口 } char a; void loop() { //虛擬串口的用法和默認串口的用法基本一樣 if (Serial.available()) { espSerial.write(Serial.read()); } if (espSerial.available()) { Serial.write(espSerial.read()); } } 

波特率最好一致,否則會出現亂碼。

  1. 測試


     
    獲取
 
SSID

六、 AP模式

Arduino上電,它通過軟串口(Arduino的9號和8號腳)發送命令,
配置espson8266為 AP模式
wifi名稱:test
密碼:123456
通過硬串口向電腦打印調試信息,以及espson8266收到指令后發出的信息。

  1. 代碼
#include <Arduino.h> #include <SoftwareSerial.h> //串口模塊 #define DEBUG true SoftwareSerial esp8266(9, 8); //使Rx-Arduino線為插腳9,使Tx-Arduino線為插腳8。 String sendCommand(String command, const int timeout, boolean debug) { String response = ""; esp8266.print(command); // 將讀取字符發送到ESP8266 long int time = millis(); while ((time + timeout) > millis()) { while (esp8266.available()) { // ESP有數據,因此將其輸出顯示到串行窗口 char c = esp8266.read(); //讀下一個字符。 response += c; } } if (debug) { Serial.print(response); } return response; } void setup() { Serial.begin(115200); esp8266.begin(115200); //esp波特率 sendCommand("AT+CWMODE=2\r\n", 2000, DEBUG); //重置模式為AP // delay(20000); String s = "AT+CWSAP=\"test\",\"123456\",11,0\r\n"; sendCommand(s, 2000, DEBUG); //設置模式 Serial.println("1"); // delay(30000); sendCommand("AT+RST\r\n", 2000, DEBUG); //設置模式 delay(3000); sendCommand("AT+CIPMUX=1\r\n", 1000, DEBUG); //為多個連接配置 // delay(20000); sendCommand("AT+CIPSERVER=1,6000\r\n", 1000, DEBUG); //服務端口為 6000 Serial.println("Server Ready"); } void loop() { //讀取esp數據 if (esp8266.available()) { Serial.write(esp8266.read()); } //讀取arduino數據 if (Serial.available()) { esp8266.write(Serial.read()); } } 
  1. 測試:
 
串口連接
 
電腦連接AP
 
IP地址
 
網絡連接
 
數據收發

七、工作站模式

四、代碼

燒入代碼藍色LED會亮起。

#include <Arduino.h> #include <SoftwareSerial.h> //串口模塊 #include <SerialESP8266wifi.h> //8266模塊 #define sw_serial_rx_pin 4 //將此引腳連接到esp8266上的TX #define sw_serial_tx_pin 6 //將此引腳連接到esp8266上的RX #define esp8266_reset_pin 5 //將此引腳連接到esp8266上的CH_PD,而不是復位。 (讓重置不連接) //設置串口引腳 SoftwareSerial swSerial(sw_serial_rx_pin, sw_serial_tx_pin); //最后一個參數設置ESP8266模塊的本地echo選項。 //添加串口啟用本地回顯和wifi調試 SerialESP8266wifi wifi(swSerial, swSerial, esp8266_reset_pin, Serial); String inputString; boolean stringComplete = false; unsigned long nextPing = 0; void setup() { inputString.reserve(20); swSerial.begin(9600); Serial.begin(9600); while (!Serial) ; Serial.println("Starting wifi"); wifi.setTransportToTCP(); // 默認TCP協議 // wifi.setTransportToUDP();//連接服務器時會使用UDP,默認為TCP wifi.endSendWithNewline(true); // 將使用換行符和回車符結束所有傳輸,即println ..默認為true wifi.begin(); //打開本地ap和服務器(TCP),本地服務,如果別的Wifi連接本模塊 // wifi.startLocalAPAndServer("MY_CONFIG_AP", "123456", "5", "2121"); // 指定用戶名密碼連接WIFI,連接其它的Wifi wifi.connectToAP("ChinaNet-304", "houjianjunxunteng1"); wifi.connectToServer("192.168.1.9", "2121"); wifi.send(SERVER, "ESP8266 test app started"); } void loop() { //確保esp8266已啟動.. if (!wifi.isStarted()) wifi.begin(); //將您在arduino控制台中輸入的內容發送到服務器 static char buf[20]; if (stringComplete) { inputString.toCharArray(buf, sizeof buf); wifi.send(SERVER, buf); inputString = ""; stringComplete = false; } //發送Ping命令 if (millis() > nextPing) { wifi.send(SERVER, "Ping ping.."); nextPing = millis() + 10000; } //監聽收到的消息並回顯,將等待收到消息,或者最大6000毫秒.. WifiMessage in = wifi.listenForIncomingMessage(6000); if (in.hasData) { if (in.channel == SERVER) Serial.println("Message from the server:"); else Serial.println("Message a local client:"); Serial.println(in.message); //回顯; wifi.send(in.channel, "Echo:", false); wifi.send(in.channel, in.message); nextPing = millis() + 10000; } //如果要與服務器斷開連接,請使用: // wifi.disconnectFromServer(); } //從控制台偵聽串行輸入 void serialEvent() { // 讀取串口數據並顯示 while (Serial.available()) { char inChar = (char) Serial.read(); inputString += inChar; if (inChar == '\n') { stringComplete = true; } } } 

五、測試

打開軟件:

 

 
串口調試

六、ESP8266刷固件

官網:https://www.espressif.com/zh-hans/products/hardware/esp8266ex/resources

安信科技:
http://micropython.org/download/#esp8266

  1. 工具:


     
    工具
  2. 固件包:
    RTOS SDK是指實時的操作系統的開發包,是帶有系統的。 NONOS SDK是不帶系統的開發包,non-os:非系統,不是系統的。


     
    固件包
  3. 連接:


     
    硬串口

燒寫模式連線:
1- GND --- TTL板GND
3- GPIO0 --- TTL板GND (重要)
4- RXD --- TTL板TXD
5- VCC --- TTL板VCC3.3V(必須為3.3V,接5V必燒)
7- CH_PD --- TTL板VCC3.3V(必須為3.3V,接5V必燒)
8- TXD --- TTL板RXD
注:這里的7腳最好使用一個104歐姆的上拉電阻
GPIO0 默認是工作模式(不接線)。如果接了低電平就是下載模式(給模塊刷固件!!)所以接低電平。CH_PD接高電平,其余除了TX,RX外可以不接線。

  1. 刷寫:
    打開FlashDownloadTools:


     
    工具

     
    打開下載

選擇端口,修改BAUD為115200。單擊 START 按鈕,如果沒問題 "DETECTED INFO" 窗口會出現你模塊的信息,按照信息將 "SPI MODE"、"FLASH SIZE" 選擇好,"SPI SPEED" 默認即可。

blank.bin文件要燒到兩個地址里來初始化系統和用戶數據。一切就緒后再次單擊START按鈕既可。

 

 
固件燒寫

下載完成,打開串口調試,要給Rest一個低電平信號,進行復位,看到ready,說明燒寫成功。

QIO -> Quad IO 四倍的數據輸入輸出
DIO -> Dual IO 兩倍的數據輸入輸出
需要設置晶振和實際板載晶振要求一致,設置SPI Flash 讀寫速度,高支持80 MHz,SPI模式和選用的SPI flash要求一致,Dual SPI選DIO 或者DOUT,Quad Flash 選QIO或者QOUT。

  1. 刷成功能包:
    1)esp8266_nonos_sdk_v1.5.4_16_05_20
    2)Ai-Thinker_ESP8266_DOUT_8Mbit_v1.5.4.1-a_20171130.bin


     
    Ai-Thinker

     
    Ai-Thinker

七、常見問題:

  1. 連接失敗
    斷電,重連,多試幾次即可。
  2. Fatal exception 0(IllegalInstructionCause):
    原因為電壓不足,重復位或斷電重連。
    要保持電壓在4.8V以上。

https://blog.csdn.net/wubo_fly/article/details/86581842
https://blog.csdn.net/qq_35174914/article/details/52757803


免責聲明!

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



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