ESP8266收發測試成功

					**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();
  }

所用到的資料,工具

發佈了4 篇原創文章 · 獲贊 3 · 訪問量 1505
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章