本章思維導圖:
ESP8266WIFI模塊簡介
ESP8266 是一款由樂鑫科技推出的低成本、高性能 Wi-Fi 模塊,廣泛應用于物聯網和嵌入式開發領域。
WIFI的頻段5G和2.4G
2.4G Wi-Fi與5G Wi-Fi最本質的區別即工作頻段(無線電波的頻率)不一樣;
2.4GWi-Fi工作頻段為:2.4GHZ~2.4835GHZ;
5GWi-Fi工作頻段為:5.15GHZ~5.350GHZ和5.725GHZ和5.850GHZ;
WIFI的信道
目前常用的頻段有2個5G和2.4G頻段,每個頻段又分為若干頻道,又稱為信道。如果把頻段理解為高速公路的話,那么信道可以理解高速公路上的車道。
WFIF模塊
SMT32F10x系統的MCU如果想通過WIFI聯網,必須配備WFI模塊。(互聯型MCU內置了WIFI外設,不用額外配置WIFI模塊)。本章講解目前市場上主流的WIFI模塊樂鑫公司的ESP8266;
ESP8266與MCU的通信方式:通常大多以串口的方式進行連接,ESP8266也支持IIC和SPI通訊;
ESP8266開發方式
ESP8266AT指令集:AT 命令以 “AT” 開始,代表 Attention,以新的一行 (CR LF) 為結尾。輸入的每條命令都會返回 OK 或 ERROR 的響應,表示當前命令的最終執行結果。注意,所有 AT 命令均為串行執行,每次只能執行一條命令。因此,在使用 AT 命令時,應等待上一條命令執行完畢后,再發送下一條命令。如果上一條命令未執行完畢,又發送了新的命令,則會返回 busy p...
常用AT指令有:(本章會上傳AT指令集文件,方便小伙伴們創建ESP8266模式)
?AT:測試指令
AT+CWLP:列出所有可訪問的WiFi
AT+CWMODE=? :設置模式
AT+CIPSIART=”type”,”address”,port:建立TCP或UDP連接
ESP8266三種模式:
AP模式:創建熱點,最多支持 5 個設備接入(如作為移動熱點共享網絡)。類似與路由器功能,簡單理解就是開放一個熱點信息模式;
STA模式:作為客戶端連接路由器,適用于遠程控制(如智能家居設備聯網)。連接熱點。簡單理解就是聯網模式;
AP+STA模式:同時作為客戶端和服務端,實現無縫切換(如設備既連接路由器又允許其他設備接入)。先連接一個可上網的熱點(STA)在開放一個熱點信息(AP)就是兩種模式同時存在;
USART3配置
根據原理圖,查看對應引腳
如圖所示:ESP8266跟STM32連接的引腳分別為:
ESP8266的22發送TX引腳連接STM32的PB11串口接收引腳;
ESP8266的21接收RX引腳連接STM32的PB10串口發送引腳;
ESP8266是采用USART串口3與STM32進行通信的;所以STM32PB11引腳應設置為復用輸入模式,STM32PB10引腳應設置為復用輸出模式;
USART3串口配置教程
USART3配置步驟:
1. 開時鐘
2. 配置GPIO模式
3. 通過在USART_CR1寄存器上置位UE位來激活USART
4.?編程USART_CR1的M位來定義字長。
5.?在USART_CR2中編程停止位的位數。
6.?利用USART_BRR寄存器選擇要求的波特率。(查看第二章的系統架構找到 ?USART3屬于APB1上,在第六章的時鐘樹上找到APB1總線工作頻率;用工作頻率/波特率:(USART1>BRR=72000000/bps)注意要換算成HZ單位因為對應秒時間
7.?設置USART_CR1中的TE位,發送一個空閑幀作為第一次數據發送。
8.?設置USART_CR1的RE位。激活接收器,使它開始尋找起始位。
9. 接收緩沖區非空中斷使能
10.?開啟空閑幀中斷
11.?調用中斷設置優先級函數
代碼示例:
/*串口3初始化函數ESP8266的22發送TX引腳連接STM32的PB11串口接收引腳;ESP8266的21接收RX引腳連接STM32的PB10串口發送引腳;形參bps為設置的波特率
*/
void USART3_Init(u32 bps)
{//1. 開時鐘RCC->APB1ENR|=1<<18;//開啟USART3時鐘RCC->APB2ENR|=1<<3;//開啟PB時鐘RCC->APB1RSTR|=1<<18;//開啟USART3復位時鐘RCC->APB1RSTR&=~(1<<18);//關閉復位時鐘//2. 配置GPIO模式GPIOB->CRH&=0xffff00ff;//清空PB10和PB11引腳模式GPIOB->CRH|=0x00008b00;//PB11為輸入模式,PB10為輸出模式//3. 通過在USART_CR1寄存器上置位UE位來激活USARTUSART3->CR1|=1<<13;//4.?編程USART_CR1的M位來定義字長。USART3->CR1&=~(1<<12);//5.?在USART_CR2中編程停止位的位數。USART3->CR2&=~(0x3<<12);//6.?利用USART_BRR寄存器選擇要求的波特率。(查看第二章的系統架構找到 ?USART3屬于APB1上,在第六章的時鐘樹上找到APB1總線工作頻率;用工作頻率/波特率:(USART1>BRR=72000000/bps)注意要換算成HZ單位因為對應秒時間USART3->BRR=36000000/bps;//7.?設置USART_CR1中的TE位,發送一個空閑幀作為第一次數據發送。USART3->CR1|=1<<3;//8.?設置USART_CR1的RE位。激活接收器,使它開始尋找起始位。USART3->CR1|=1<<2;//9. 接收緩沖區非空中斷使能USART3->CR1|=1<<5;//10.?開啟空閑幀中斷USART3->CR1|=1<<4;//11.?調用中斷設置優先級函數STM32_SetNVICPriority(USART3_IRQn,1,1);
}
串口3底層發送數據函數
代碼示例:
/*
串口3底層發送數據函數
*/
void USART3_TX(u8 *dat)
{while(*dat){USART3->DR=*dat++;while(USART3->SR&1<<7){};//等待數據發送完成}
}
串口3中斷接收服務函數
代碼示例:
/*串口3中斷服務函數
*/
u8 USART3_buffer[1024];//接收數據緩沖區
u32 USART3_cnt=0;//緩沖區數組下標
u8 USART3_flag=0;//標志位
void USART3_IRQHandler(void)
{u8 dat=0;if(USART3->SR&1<<5)//接收數據中斷{dat=USART3->DR;if(USART3_cnt<1024){USART3_buffer[USART3_cnt]=dat;USART3_cnt++;}else{USART3_cnt=0;}}if(USART3->SR&1<<4)//空閑幀中斷{dat=USART3->DR;USART3_flag=1;}
}
?配置ESP8266Wi-Fi模塊AP和STA模式
STM32通過UART串口與ESP8266模塊通信,利用AT指令集控制ESP8266的工作模式、網絡連接及數據傳輸。ESP8266默認波特率為115200,支持多種模式(Station、AP、Station+AP),并通過AT指令動態切換。
配置AP模式
STM32通過USART3(串口3)向ESP8266模塊發送AT指令集,配置其進入AP(Access Point,無線接入點)模式,使ESP8266作為Wi-Fi熱點運行,供其他設備連接。
配置AP模式指令集代碼(本章會上傳指令集代碼文件):
通過USART3發送以下AT指令序列
ESP8266_AP_SERVER_MODE
{"AT\r\n" --測試指令"ATE0\r\n" --關回顯"AT+CWMODE=2\r\n"--設置為服務器模式"AT+RST\r\n" --模塊復位"ATE0\r\n" --關回顯"AT+CWSAP=\"%s\",\"%s\",1,4\r\n" --設置wifi信息"AT+CIPMUX=1\r\n"--開啟多連接"AT+CIPSERVER=1,%d\r\n" --設置端口號"AT+CIFSR\r\n" --查詢IP
}
配置AP模式代碼示例:
#include "LED.h"
#include "Delay.h"
#include "KEY.h"
#include "USART1.h"
#include "stdio.h"
#include "USART3.h"
char *ESP8266_AP_SERVER_MODE[]=
{"AT\r\n" , // --測試指令"ATE0\r\n" , //--關回顯"AT+CWMODE=2\r\n",//--設置為服務器模式"AT+RST\r\n", //--模塊復位"ATE0\r\n", //--關回顯"AT+CWSAP=\"LYF_WiFi\",\"LYF77777\",1,4\r\n", //--設置wifi信息"AT+CIPMUX=1\r\n",//--開啟多連接"AT+CIPSERVER=1,8088\r\n", //--設置端口號"AT+CIFSR\r\n", //--查詢IP
};
int main()
{LED_Init();//LED燈初始化函數KEY_Init();//按鍵初始化函數USART3_Init(115200);//USART3串口3初始化函數printf("各模塊初始化完成\n");u8 key=0;u8 index=0;while(1){key=KEY_get();if(key){LED1(1);Delay_MS(50);LED1(0);printf("發送指令集:%s\n",ESP8266_AP_SERVER_MODE[index]);USART3_TX((u8*)ESP8266_AP_SERVER_MODE[index]);index++;if(index==9){index=0;}} if(USART3_flag){USART3_buffer[USART3_cnt]='\0';printf("發送指令集返回狀態:%s\n",USART3_buffer);USART3_cnt=0;USART3_flag=0;}}
}
創建一個WiFi名稱為LYF_WiFi的熱點信息、密碼為:LYF77777、端口號為:8088;
代碼運行效果圖:
配置STA模式
STM32通過USART3(串口3)向ESP8266模塊發送AT指令集,使其配置ESP8266為STA模式(Station模式,即客戶端模式)
配置STA模式指令集代碼(本章會上傳指令集代碼文件):
通過USART3發送以下AT指令序列
ESP8266_STA_TCPserver[]=
{"AT\r\n",//測試指令"ATE0\r\n",//關回顯"AT+CWMODE=3\r\n",//AP+STA共存模式"AT+RST\r\n",//模塊復位"ATE0\r\n",//關回顯"AT+CWJAP=\"liyyff\",\"12345678\"\r\n",//連接wifi"AT+CIPMUX=1\r\n",//設置多連接"AT+CIFSR\r\n",//查詢IP"AT+CIPSERVER=1,100\r\n",//建立TCP服務器"AT+CIPSTART=\"TCP\",\"192.168.1.118\",8080\r\n",//設置端口號,連接服務器"AT+CIPMODE=1\r\n",//設置透傳模式"AT+CIPSEND\r\n",//開始發送數據
};
配置STA模式代碼示例:
#include "LED.h"
#include "Delay.h"
#include "KEY.h"
#include "USART1.h"
#include "stdio.h"
#include "USART3.h"
char *ESP8266_STA_TCPClient[]=
{"AT\r\n",//測試指令"ATE0\r\n",//關回顯"AT+CWMODE=1\r\n",//設置客戶端模式"AT+RST\r\n",//模塊復位"ATE0\r\n",//關回顯"AT+CWJAP=\"HUAWEIshui\",\"asdfghjkl12\"\r\n",//連接wifi"AT+CIPMUX=0\r\n",//設置單連接"AT+CIFSR\r\n",//查詢IP"AT+CIPSTART=\"TCP\",\"192.168.43.204\",8080\r\n",//設置端口號,連接服務器"AT+CIPMODE=1\r\n",//設置透傳模式"AT+CIPSEND\r\n",//開始發送數據
};int main()
{LED_Init();//LED燈初始化函數KEY_Init();//按鍵初始化函數USART3_Init(115200);//USART3串口3初始化函數printf("各模塊初始化完成\n");u8 key=0;u8 index=0;while(1){key=KEY_get();if(key){LED1(1);Delay_MS(50);LED1(0);printf("發送指令集:%s\n",ESP8266_STA_TCPClient[index]);USART3_TX((u8*)ESP8266_STA_TCPClient[index]);index++;if(index==12){index=0;}} if(USART3_flag){USART3_buffer[USART3_cnt]='\0';printf("發送指令集返回狀態:%s\n",USART3_buffer);USART3_cnt=0;USART3_flag=0;}}
}
先用電腦創建一個liyyff名稱的熱點信息,密碼為:12345678,頻段為:2.4GHZ,IP地址為:192.168.1.118,設置好AT指令利用串口3發送,使其ESP8266連接熱點信息;
代碼運行結果:
制作不易!喜歡的小伙伴給個小贊贊!喜歡我的小伙伴點個關注!有不懂的地方和需要的資源隨時問我喲!