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

所用到的资料,工具

发布了2 篇原创文章 · 获赞 3 · 访问量 1252

猜你喜欢

转载自blog.csdn.net/lengyuefeng212/article/details/104258163