51单片机通过WIFI模块ESP8266控制LED灯
2021-07-27 来源:eefocus
一、系统方案
手机APP通过ESP8266 WIFI模块与51单片机通信控制LED灯的开关。下位机由单片机、ESP8266模块和LED灯组成,上位机由Android手机APP承担。我们在APP上发送LED灯的开关控制指令,ESP8266将收到的数据发送给单片机,从而实现对LED灯进行开关控制。
设计好的实物是这个样子:
二、硬件设计
ESP8266模块作为一个透传模块使用,RXD、TXD分别连接51单片机的TXD和RXD,VCC和CH_PD管脚接3.3V电压,GND接地,只需要连接这些管脚,ESP8266模块就可以正常工作了。在单片机P2口上连接了三个5mm的LED灯,分别是红黄蓝三种颜色,我们的目的是通过手机APP上的开关控制着三个LED灯的亮灭。
ESP8266实物管脚图
三、单片机软件设计
硬件的连接不复杂,接下来主要是单片机和手机APP代码的编写。
单片机代码主要是串口初始化、串口中断和ESP8266的初始化。首先是串口初始化:
TMOD=0x20; //定时器1工作在方式2
TH1 = 0xfd; //波特率9600
TL1 = 0xfd;
SM0=0; //串口工作在方式1
SM1=1;
EA = 1; //开总中断
REN = 1; //使能串口
TR1 = 1; //定时器1开始计时
然后是ESP8266初始化:
delayms(1000); //延时
sendString('AT+CWMODE=2rn'); //设置ESP8266工作在AP模式下
delayms(1000);
sendString('AT+CIPMUX=1rn'); //允许多连接
delayms(1000);
sendString('AT+CIPSERVER=1rn'); //建立服务器
delayms(1000);
ES = 1; //esp8266初始化之后开串口中断
贴上51单片机负责串口发送的两个函数:
//发送一个字节
void sendChar(uchar a)
{
SBUF = a;
while(TI==0);
TI=0;
}
//发送字符串
void sendString(uchar *s)
{
while(*s!='