烧录固件
引脚连接
WiFi | 51单片机 |
---|
VCC | 3.3V (5V连接时间过长可能会烧坏WiFi模块) |
GND | GND |
CH_PD | 3.3V |
GPIO0 | GND |
UTXD | TXD |
URXD | RXD |
烧录固件
- 打开烧录软件,选择配置选项卡,点击第二栏的小齿轮图标 - 加载固件地址
- 点击其他选项的选择栏,取消选中,只选择第二个选项(固件地址)
- 返回操作选项卡,选择正确COM端口,点击一键烧写
- 模块重新上电,下载开始,等待下载完成
串口助手测试ESP8266串口WiFi模块
引脚连接
WiFi | 51单片机 |
---|
VCC | 3.3V (5V连接时间过长可能会烧坏WiFi模块) |
GND | GND |
CH_PD | 3.3V |
UTXD | TXD |
URXD | RXD |
注:此时连接状态 WiFi模块–>51单片机–>串口助手(PC),由于WiFi模块和单片机的TXD和RXD处于正接状态,单片机和WiFi模块并不通信,相当于WiFi模块直连串口助手。
AT常用指令
ESP8266串口WiFi模块分为三种工作模式:Station模式(类似无线终端),AP模式(提供无线接入服务),AP模式兼Station模式。
通过串口助手测试WiFi模块时,
测试
发送指令:AT
响应:OK
重启模块
发送命令:AT+RST
响应 :OK
设置模块
发送指令:AT+CWMODE = <mode>
说明:需重启后生效(AT+RST)
<mode>:1-Station模式,2-AP模式,3-AP兼Station模式。
响应:OK
配置AP参数
发送命令:
指令:AT+ CWSAP= <ssid>,<pwd>,<chl>, <ecn>
说明:指令只有在AP模式开启后有效
<ssid>:字符串参数,接入点名称
<pwd>:字符串参数,密码最长64字节,ASCII
<chl>:通道号
<ecn>:加密模式,0-OPEN,1-WEP,2-WPA_PSK,3-WPA2_PSK,4-WPA_WPA2_PSK
示例:AT+CWSAP=”TEST”,”123456123456”,1,3
响应:OK
开启多连接模式
发送命令:AT+CIPMUX=<mode>
说明:<mode>
:0-单路连接模式,1-多路连接模式
响应:OK
创建服务器
发送命令:AT+CIPSERVER=<mode>,<port>
说明:AT+ CIPMUX=1时才能开启服务器;关闭server模式需要重启。开启server后自动建立server监听,当有client接入会自动按顺序占用一个连接。
<mode>:0-关闭server模式,1-开启server模式
<port>:端口号,缺省值为333
响应:OK
通过51单片机初始化WiFi模块
通过串口助手测试AT指令可以发现,部分AT指令断电不会保存,因此需要在代码中进行初始化设置。
引脚连接
WiFi | 51单片机 |
---|
VCC | 3.3V (5V连接时间过长可能会烧坏WiFi模块) |
GND | GND |
CH_PD | 3.3V |
UTXD | RXD |
URXD | TXD |
注:此时连接状态 WiFi模块–>51单片机–>串口助手(PC),由于WiFi模块和单片机的TXD和RXD处于反接状态,单片机和WiFi模块可以进行串口通信。
实现代码
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void sendByte(uchar b)
{
SBUF = b;
while(!TI);
TI=0;
}
void sendString(uchar *s)
{
while(*s != '\0')
{
sendByte(*s);
s++;
}
}
void initEsp()
{
uint a;
SCON = 0x50;
TMOD = 0x20;
TL1 = 0xfd;
TH1 = 0xfd;
ET1 = 0;
TR1 = 1;
EA = 1;
for (a=0; a<50000; a++);
sendString("AT+CWMODE=2\n");
for (a=0; a<50000; a++);
sendString("AT+CIPMUX=1\n");
for (a=0; a<20000; a++);
sendString("AT+CIPSERVER=1,333\n");
for (a=0; a<20000; a++);
sendString("AT+CIPSTO=50\n");
RI=0;
ES=1;
}
void main()
{
initEsp();
}
注:代码中波特率应和串口助手的波特率相符,且部分AT命令如重启模块,设置WiFi热点等指令无法使用。
获取WiFi传输的数据
ESP8266WiFi模块作为TCP服务器接受来自客户端的信息前默认会加上+IPD,n,<string.length>:
这样的字符,处理时应注意。
实现代码
void getData()
{
uint a;
if(receiveFlag)
{
for(i=0; i<2; i++)
{
Hour[i]=Buffer[17+i];
}
Hour[2]='\0';
for(i=0; i<2; i++)
{
Minute[i]=Buffer[20+i];
}
Minute[2]='\0';
for (a=0; a<10000; a++);
sendString(Hour);
for (a=0; a<10000; a++);
sendString(Minute);
receiveFlag=0;
count=0;
for(i=0; i<22; i++)
{
Buffer[i]=0;
}
}
}
void main()
{
initEsp();
receiveFlag = 0;
count = 0;
while(1)
{
getData();
}
}
void uart() interrupt 4
{
if(RI == 1)
{
ES = 0;
RI = 0;
temp = SBUF;
if(count<20)
{
Buffer[count]=temp;
count++;
if(Buffer[0]=='+')
{
receiveFlag = 1;
}
else
{
receiveFlag = 0;
count = 0;
}
}
ES = 1;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)