**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); //9600bps@24.000MHz
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) //9600bps@24.000MHz
{
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();
}