**ESP8266模塊測試**
ESP8266-01s封裝圖:
ESP8266和 單片機連線:
ESP: 單片機
UTXD RXD
GND GND
CH_PD(EN) (給高電平模塊才工作)。
GPIO2 必須接高電平(內部已經拉高,不用管)
RST (低電平復位,高電平工作)
GPIO0 一般情況下不用管,燒錄固件時接低電平
VCC 3.3V
URXD TXD
說明:拿到模塊後,測試模塊,只需連接5根線,VCC,GND,UTXD,URXD,CH_PD(EN)
接好後,可進行AT指令測試。
注意:(PC測試模塊)如果是直接接USB轉TTL,那麼就RX和TX交叉接,如果是接單片機就TX接TX,RX接RX,(單片機測試)下載好程序後,TX和RX交叉接,可正常通信。
PC測試:
模塊和電腦連接好後可按以下順序執行AT指令(1-6):
AT指令:
1.AT+CWMODE=X
功能:設置工作模式指令:
-------Station模式(讓模塊去連接路由器或熱點,模塊作爲客戶端)
-------AP模式(模塊本身是一個熱點,手機和電腦可以連接,模塊作爲服務器)
-------Station+AP模式
示例:AT+CWMODE=2
2.AT+RST
功能:重啓指令(設置新的工作模式後需要重啓才能生效)
示例:AT+RST
3.AT+ CWSAP= ,,,
功能:配置AP參數(指令只有在AP模式開啓後有效)
ssid:接入點名稱
pwd:密碼 字符串型,最長64字節。
chl:通道號 0,1,2,3,4
ecn:加密方式:(0-OPEN, 1-WEP, 2-WPA_PSK, 3-WPA2_PSK, 4-WPA_WPA2_PSK)
示例:AT+CWSAP=“luatao”,“1234567890”,1,3
4.AT+CIFSR
功能:查看本模塊的IP地址
示例:AT+CIFSR
5.AT+CIPMUX=1
功能:設置多連接模式
示例:AT+CIPMUX=1
6.AT+CIPSERVER=,
功能:創建服務器
mode:
0-----關閉SERVER模式
1-----開啓SERVER模式
Port:端口號(缺省爲333)
示例:AT+CIPSERVER=1,6666
說明:AT+CIPMUX=1時才能開啓服務器,關閉SERVER模式需要重啓AT+RST
開啓SERVER後自動建立監聽,當有Client接入時會自動按順序建立一個連接。
7.AT+CIPMUX?
功能:查看本模塊是否建立多連接
0-------單路連接
1-------多路連接
示例:AT+CIPMUX?
執行完以上程序後,模塊設置完成,可用手機客戶端發消息測試通信。
第一步:打開手機,連接模塊的WIFI
第二步:打開網絡調試APP
按圖上配置好後,點擊打開,如果連接成功
PC串口上打印0,CONNECT
單片機測試:
第一步:下載程序。
要想讓單片機發送數據到手機,需要發送一條指令
數據雙向傳輸
多連接模式:
AT+CIPSEND=0,10
單連接模式:
AT+CIPSEND=10
發送的代碼:
Send_String(“AT+CIPSEND=0,10\r\n”);//發送10個數據
Delay1000ms();
Send_String(“hello world”);//向手機發送數據
Delay1000ms();
剩下的操作就是連接模塊,打開網絡調試,然後發送數據測試。
代碼:
ESP8266.h
#ifndef ESP8266
#define ESP8266
sbit LED=P6^0;
extern uchar Receive;//接收值
extern void Delay1000ms() ; //@24.000MHz
extern void Uart1_Init(void); //[email protected]
extern void ESP8266_Init();//ESP8266串口發送兩條指令
extern void Send_String(uchar *p);//發送字符串
#endif
ESP8266.c
#include<All.h>
uchar Receive;//接收值
/*********************************
* @函數名:Delay1000ms
* @描 述:延遲1s
* @參 數:無
* @返回值:無
*********************************/
void Delay1000ms() //@24.000MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 92;
j = 50;
k = 238;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
/*********************************
* @函數名:Uart1_Init
* @描 述:串口1初始化函數 定時器1產生波特率,配置寄存器的值
* @參 數:無
* @返回值:無
*********************************/
void Uart1_Init(void) //[email protected]
{
SCON = 0x50; //8位數據,可變波特率
AUXR |= 0x04; //定時器2,時鐘爲1T
T2L = 0x8F; //設置定時器初值
T2H = 0xFD; //設置定時器初值
//IE2|=0x40; //打開定時器2中斷
IE2&=0xfb;//禁止定時器2中斷
AUXR |= 0x10; //啓動定時器2
// PS=0;//串行口1中斷優先級控制位 PS=0;優先級0
// //PS=1;優先級1
EA=1; //打開中斷總開關
ES=0; //串行口中斷允許位
}
/*********************************
* @函數名:Send_Value
* @描 述:串口發送一個字符
* @參 數:value 發送的字符
* @返回值:無
*********************************/
void Send_Value(uchar value)
{
ES=0; //關閉串口1中斷
SBUF=value; //發送一個字符
while(!TI); //等待發送完成
TI=0; //發送完成中斷標誌位清零
ES=1; //打開串口1中斷
}
/*********************************
* @函數名:Send_String
* @描 述:串口發送一個字符串
* @參 數:*p 發送的字符串的首地址
* @返回值:無
*********************************/
void Send_String(uchar *p)
{
while(*p)
{
Send_Value(*p);//發送一個數據
p++;//地址往後移
}
}
/*********************************
* @函數名:ESP8266_Init
* @描 述:ESP8266發送兩條指令,初始化
* @參 數:無
* @返回值:無
*********************************/
void ESP8266_Init()
{
uchar a[]="AT+CIPMUX=1\r\n"; //設置多連接模式
uchar b[]="AT+CIPSERVER=1,6666\r\n";//創建服務器
Send_String(a);//發送第一個AT指令
Delay1000ms();//等待模塊應答
Send_String(b);//發送第二個AT指令
Delay1000ms();
}
/*********************************
* @函數名:Uart1
* @描 述:中斷程序,+IPD,x,x:後有用的數據存進receive數組裏
* @參 數:無
* @返回值:無
*********************************/
void Uart1() interrupt 4
{
static uchar Flag=0;//狀態標誌位
if(RI) //進入接收中斷標誌位
{
RI=0; //接收中斷標誌位清零
if(Flag==1) //這裏面接收的是實際發送的值
{
Receive=SBUF;//存接收的字符
Flag=0;
}
if(SBUF==':') //這個必須在下面
Flag=1;
}
}
All.h
#include<STC8.h>
#include<intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#include<ESP8266.h> //ESP8266wifi模塊
在這裏插入代碼片
main.c
#include<All.h>
void main()
{
Uart1_Init();
ESP8266_Init();
while(1)
{
if(Receive=='A')
LED=0; //燈亮
else if (Receive=='B')
LED=1; //燈滅
else if(Receive=='a')
{
Send_String("AT+CIPSEND=0,10\r\n");//發送10個數據
Delay1000ms();
Send_String("hello world");
Delay1000ms();
}