基于ESP8266的WIFI模塊(含源代碼)

大家好,今天給大家介紹基于ESP8266的WIFI模塊,下方附有本文涉及的全部資料和源代碼的獲取方式,可進群免費領取。

1、ESP8266簡介

ESP8266是一款高性能的WIFI串口模塊,內部集成MCU能實現單片機之間串口通信,是目前使用最廣泛的一種WIFI模塊之一。可以簡單理解為一個WIFI轉串口的設備,不用知道太多WIFI相關知識,只需要知道串口怎么使用就可以。

接線圖:只需要將RXD、TXD、GND、VCC這4個引腳,分別和USB轉TTL模塊的TXD、RXD、GND、VCC相連接

需要注意,在USB轉TTL模塊上有3.3V和5V兩個引腳可以作為VCC,但是一般選取5V作為VCC。若選取3.3V,可能會因為供電不足而引起不斷的重啟,從而不停的復位。

2、開發方式

ESP8266系列一般具有兩種開發方式:AT指令開發和SDK開發。

AT指令廠家出廠時預先在ESP8266芯片燒入好固件,封裝好WiFi的協議棧,內部已經實現透傳,而用戶只需要使用一個USB轉TTL的模塊或者單片機的串口就能實現與WiFi模塊的通信,發送AT指令來對WiFi模塊進行控制。(和藍牙透傳模塊類似)

SDK開發由于ESP8266本身即是可編程的芯片,可以把它視為一個帶有無線通信的單片機,而用戶需要在專門的IDE中編寫對應的程序,然后通過燒寫固件的方式將程序寫入到芯片中,因此,想要實現WiFi通信,需要自定義WiFi協議棧,對用戶掌握的相關知識要求更高。

本篇主要是對AT指令開發的學習。

3、常用AT指令

AT指令不區分大小寫,以回車、換行結尾。

4、應用模式

ESP266支撐單AP模式、單STA模式和混合模式(可以在兩種模式下切換的狀態。)

AP模式下,WiFi模塊產生熱點,提供無線接入服務,允許其它無線設備接入,提供數據訪問,一般的無線路由/網橋工作在該模式下。該模式對應TCP傳輸協議中的服務端(TCP Server)。
STA模式下,WiFi模塊為連接到無線網絡的終端(站點),可以連接到AP,一般無線網卡工作在STA模式下。該模式對應TCP傳輸協議中的客戶端(TCP Client)。

簡單來說,AP模式可以將ESP8266作為熱點,讓其他的設備連接上它;STA模式可以連接上當前環境下的WIFI熱點。

透傳(透明傳輸),就是指不需要關心wifi協議是如何實現的,所需要做的就是A通過串口發數據,B通過串口收數據,整個過程中A串口和B串口就像是用導線直接連接起來了一樣。使用者無需關心內部具體實現,模塊對于使用者是“透明的”、似乎不存在的(因為可無視中間的實現原理)。

如果不開啟透傳模式,在每次發送數據前都必須先發送指令AT+CIPSEND=<param>。若開啟了透傳模式,就不需要在每次發送數據前都發送指令了,只需要發送一次AT+CIPSEND,之后發送的內容都會當成是數據。如果再次發送命令,要先退出透傳模式(發送數據"+++"退出),否則會把命令了當成是數據發送過去。

ESP8266一般用于連接當前環境的熱點,與服務器建立TCP連接,傳輸數據。大致流程如下:

AT+CWMODE=1:設置工作模式(STA模式)
AT+RST:模塊重啟(生效工作模式)
AT+CWJAP=“111”,“11111111”:連接當前環境的WIFI熱點(熱點名,密碼)
AT+CIPMUX=0:設置單路連接模式
AT+CIPSTART=“TCP”,“xxx.xxx.xxx.xxx”,xxxx:建立TCP連接
AT+CIPMODE=1:開啟透傳模式
AT+CIPSEND:透傳模式下,傳輸數據
+++:退出透傳模式

5、主要代碼

ESP8266的初始化包括以下函數:

ESP8266_TEST();//測試有無ESP8266
ESP8266_RESET();
ESP8266_SetMode();//設置模式
ESP8266_SetSAP();//設置熱點
ESP8266_SetCIPMUX();//設置多路連接
ESP8266_SetCIPSERVER();//開啟連接并設置端口號

void Clear_Buffer(void)//清空緩存 {
	u16 i; for(i=0;i<500;i++)
		USART2_ReceiveData[i]=0;//緩存 USART2_ReceiveTims=0;
} /*-------------------------------------------------
功能:測試有無ESP8266
返回值:0:無錯誤                                
        1:等待發送數據超時                                                      
-------------------------------------------------*/ u8 ESP8266_TEST(void) {
	u8 timeout=5;
	Clear_Buffer();
	USART2_printf("AT\r\n"); while(timeout--)
	{
		Delay_10ms(); if(strstr((const char*)USART2_ReceiveData,(const char*)"OK")!=NULL)
		{
			Clear_Buffer(); return 0;				
		}

		USART2_printf("AT\r\n");	
	} return 1;
} /*-------------------------------------------------
功能:測試有無ESP8266
返回值:0:無錯誤                                
        1:等待發送數據超時                                                      
-------------------------------------------------*/ u8 ESP8266_RESET(void) {
	u8 timeout=50;
	Clear_Buffer();
	USART2_printf("AT+RST\r\n"); while(timeout--)
	{
		Delay_10ms(); if(strstr((const char*)USART2_ReceiveData,(const char*)"OK")!=NULL)
		{
			Clear_Buffer(); return 0;				
		}

		USART2_printf("AT+RST\r\n");	
	} return 1;
} /*-------------------------------------------------
功能:設置模式 1-Station模式,2-AP模式(熱點),3-AP兼Station模式		
返回值:0:無錯誤                                
        1:等待發送數據超時                                                      
-------------------------------------------------*/ u8 ESP8266_SetMode(void) {
	u8 timeout=50;
	Clear_Buffer();
	USART2_printf("AT+CWMODE=2\r\n"); while(timeout--)
	{
		Delay_100ms(); if(strstr((const char*)USART2_ReceiveData,(const char*)"OK")!=NULL)
		{
			Clear_Buffer(); return 0;				
		}
		USART2_printf("AT+CWMODE=2\r\n");	
	} return 1;
} /*-------------------------------------------------
功能:設置熱點,1 信道,3 加密方式
返回值:0:無錯誤                                
        1:等待發送數據超時                                                      
-------------------------------------------------*/ u8 ESP8266_SetSAP(void) {
	u8 timeout=50;
	Clear_Buffer();
	USART2_printf("AT+CWSAP=\"ZZBB\",\"12345678\",1,3\r\n"); while(timeout--)
	{
		Delay_100ms(); if(strstr((const char*)USART2_ReceiveData,(const char*)"OK")!=NULL)
		{
			Clear_Buffer(); return 0;				
		}
		USART2_printf("AT+CWSAP=\"ZZBB\",\"12345678\",1,3\r\n");						
	} return 1;
} /*-------------------------------------------------
功能:設置多路連接
返回值:0:無錯誤                                
        1:等待發送數據超時                                                      
-------------------------------------------------*/ u8 ESP8266_SetCIPMUX(void) {
	u8 timeout=50;
	Clear_Buffer();
	USART2_printf("AT+CIPMUX=1\r\n"); while(timeout--)
	{
		Delay_100ms(); if(strstr((const char*)USART2_ReceiveData,(const char*)"OK")!=NULL)
		{
			Clear_Buffer(); return 0;				
		}
		USART2_printf("AT+CIPMUX=1\r\n");						
	} return 1;
} /*-------------------------------------------------
功能:開啟連接并設置端口號
返回值:0:無錯誤                                
        1:等待發送數據超時                                                      
-------------------------------------------------*/ u8 ESP8266_SetCIPSERVER(void) {
	u8 timeout=50;
	Clear_Buffer();
	USART2_printf("AT+CIPSERVER=1,8080\r\n"); while(timeout--)
	{
		Delay_100ms(); if(strstr((const char*)USART2_ReceiveData,(const char*)"OK")!=NULL)
		{
			Clear_Buffer(); return 0;				
		}
		USART2_printf("AT+CIPSERVER=1,8080\r\n");						
	} return 1; }

完整資料可進群免費領取!!!

the end

評論(0)