基于51单片机+ESP-01WIFI模块LED灯的控制
1、前期准备
提前了解ESP-01WIFI模块的AT指令,了解串口调试助手的基本使用方法,准备一个USB-TTL模块工具,准备一块C51单片机开发板,当然也可以自己制作一个简单的开发板,这个根据个人的情况,手机上下载一个网络调试助手,前期的工作基本准备就绪。
2、ESP-01与USB-TTL接线图
ESP-01wifi模块中供电电压一般是3.0~3.6v之间,所以在选择电压时要选择3.3的电压,否则芯片会发烫甚至会烧坏。ESP-01wifi模块需要接GND、TXD、RXD、VCC、EN这5个端口。EN端是高电平触发,所以要接3.3V电压。在ESP-01wifi模块与USB-TTL时,注意TXD和RXD接法,ESP-01wifi模块的TXD、RXD与USB-TTL的RXD、TXD对应相接。具体的连接如下图所示:
3、ESO-01的调试
个人总结了ESP-01WIFI模块的设置步骤和指令,供大家参考: 1、AT+UART=9600,8,1,0,0 进行波特率的设置。 2、AT 查看wifi模块是否正常工作。 3、AT+RST 重启wifi模块。 4、AT+CWSAP=“HZ”,“12345678”,1,4 wifi账号和密码,这个配置掉电可以保存。 5、AT+CIPMUX=1 设置连接方式(0单连接,1多连接),该设置为多连接。 6、AT+CIPAP=“192.168.4.1” 设置IP地址。 7、AT+CIPSERVER=1,8086 设置端口号。 到了这一步设置基本上已经完成,wifi模块可以正常使用了。AT+CIFSR 查询IP地址,AT+CIPSEND=0,18 wifi模块的发送指令,从串口调试助手发送手机上接收。下图为调试设置成功图如下: 如果没有成功可能会出现因为以下原因:1、串口通信波特率没有选对,一般的wifi模块,通过手册可以查询到初始波特率,一般为115200。2、USB-TTL模块与WIFI模块的对应端口连接不对。3、如果手机与wifi模块连接失败,查看wifi模块的EN端看是否连接,或者电压是否正确。4、查看设置的IP地址和端口是否正确。5、串口号没有选择正确,或着没有开启。这个是自己在操作时所遇到的,应该还会有其它的原因,希望大家多多补充。本次操作手机使用的是-有人网络助手。
4、单片机软件程序的设计
本实验的目标是通过手机输入控制8个LED灯的亮灭,输入0单片机的8个LED灯全部亮,输入1全部灭。并且结果反馈到手机上。单片机的程序设计主要有下面几个主要程序。 首先是串口初始化:
void UsartInit()
{
SCON=0X50;
TMOD=0X20;
PCON=0X80;
TH1=0XF3;
TL1=0XF3;
ES=1;
EA=1;
TR1=1;
}
字符串发送程序:
void ESP8266_Set(uchar *puf)
{
while(*puf!='\0')
{
Send_Uart(*puf);
us_delay(10);
puf++;
}
us_delay(10);
Send_Uart('\r');
us_delay(10);
Send_Uart('\n');
}
wifi模块初始化:
void wifi_Init()
{
ESP8266_Set("AT");
us_delay1(4000);
ESP8266_Set("AT+CWMODE=2");
us_delay1(4000);
ESP8266_Set("AT+RST");
us_delay1(4000);
ESP8266_Set("AT+CIPMUX=1");
us_delay1(4000);
ESP8266_Set("AT+CIPSERVER=1,8086");
us_delay1(4000);
ESP8266_Set("AT+CIPSTO=0");
}
wifi接收模块:
void wifi_recive() interrupt 4
{
static uchar i=0;
if(RI==1)
{
RI=0;
Receive=SBUF;
receiveTable[i]=Receive;
if((receiveTable[i]=='\n'))
{
i=0;
}
else i++;
}
else TI=0;
}
wifi发送模块:
void wifi_send()
{
ESP8266_Set("AT+CIPSEND=0,10");
us_delay1(200);
if(P2 == 0x00)
ESP8266_Set("LED打开");
else
ESP8266_Set("LED关闭");
}
wifi数据的解析:
void wifi_ZX()
{
if((receiveTable[0]=='+')&&(receiveTable[1]=='I')&&(receiveTable[2]=='P'))
{
if(receiveTable[9]=='0' )
{
P2 = 0x00;
wifi_send();
}
if(receiveTable[9]=='1' )
{
P2 = 0xff;
wifi_send();
}
}
}
通过实验操作,实现了上述的操作目标。
5、感想
从拿到wifi模块,到一点一点熟悉,通过查询资料和参考各个博主的博客,用了两天的时间完成了整个操作过程并且效果也得到了实现。这是第一次写博客,里面会有很多不足的地方,以后慢慢的补充学习,还希望大家能够多多提供意见!
|