大家好,我是一个单片机新手,也是一个兴趣者,我以前想用c51单片机用esp8266模块的热点控制led小灯的,实验,可是网上的资料很少,所以今天来给新生,老手也好,想出一个教程,希望给大家一点点帮助。
准备材料:
1.c51单片机开发板(最小系统板也可以,可是要自己准备led灯和小电阻,分好阳极和阴极)
2.esp8266模块(测试待一会儿讲)
3.ttl转usb线(开发板不需要ttl转换模块)
注意:以下一样接线,esp才能正常工作。
1.esp8266的管脚和接线:
TXD-接单片机或ttl模块的RXD
RXD-接单片机或ttl模块的RXDvcc-接3.3v(接5v可能烧坏esp的mcu)
gnd-接地线,接单片机的GND或ttl的GNDgpio0-不用接
gpio1-不用接
ch_pd-默认为高电平,和3.3v短接即可
2.开发板接线图:
提示:如图有红色标记的是,单片机的开发板串口。分别是:usb的串口和单片机的串口。
3.3v-接模块的3.3v(接5v会烧坏esp8266)
ch-pd-也接3.3v
GND-接GND
RXD-接TXDTXD-接RXD
3.ttl转usb线:
3.3v-接模块的3.3
vch-pd-也接3.3v
GND-接GND
RXD-接TXD
TXD-接RXD
4.最小系统板:(没有图片)
3.3v-接模块的3.3
vch-pd-也接3.3v
GND-接GND
RXD-接P3.0
TXD-接P3.1
测试wifi模块:
(关于AT指令,如果不会,去百度看看)
打开xcon软件,接好线,然后选择波特率。wifi模块的波特率一般在115200,选好波特率后点击打开串口,发送输入框,输入下命令并发送。
发送:AT(必须大写)
响应:ok(测试成功)
响应:error(很可能固件失效,重刷固件)
回复ok,模块正常
在发送:AT+CIOBAUD=9600 (波特率改9600)
因为单片机的波特率跑不了那么高,所以改9600。
下次打开串口的时候波特率选9600
这次我们要看模块的ip地址:命令:AT+CIFSR成功图:
测试手机通信:
(1)需要下载网络调式工具,百度搜出的一批,随便下一个。然后用xcon软件给esp发送建服务器命令
命令1:AT+CIPMUX=1(打开多连接服务)
响应:ok
命令2:AT+CIPSERVER=1,8080(开启服务器模式,端口号8080)
响应:ok
(2)连上esp模块的热点。打开网络调式软件点击tcp链接,然后输入模块ip和端口号,链接,链接成功xcon(串口调式软件)会有成功的字符。随便发个字符会出现电脑的软件上。
数据格式:+IPD,0,1:1测试成功。
单片机通信(程序编写和下载)
提示:下载完程序以后再接esp8266,然后单片机复位。
步骤:连上热点,打开网络调式软件发送1,灯亮,发送2,灯灭。代码块:
#include "public.h"
#include "temp.h"
sbit led1=P2^0; //定义管脚
sbit led2=P2^1;
#define RELOAD_COUNT 0xFA //宏定义波特率发生器的载入值 9600
#if
1u8 RecBuf[50];
u8 recFlagOK=0;
#endif
u8 tempData[9];
void UART_Init()
{
SCON=0X50; //设置为工作方式1 TMOD=0X20; //设置计数器工作方式2 PCON=0X80; //波特率加倍 TH1=RELOAD_COUNT; //计数器初始值设置 TL1=TH1;
ES=0; //关闭接收中断
EA=1; //打开总中断
TR1=1; //打开计数器}
void UART_SendByte(u8 dat)
{
ES=0; //关闭串口中断
TI=0; //清发送完毕中断请求标志位
SBUF=dat; //发送
while(TI==0);
//等待发送完毕
TI=0; //清发送完毕中断请求标志位
ES=1; //允许串口中断
}
void ESP8266_SendCmd(u8 *pbuf)
{
while(*pbuf!='\0') //遇到空格跳出循环
{
UART_SendByte(*pbuf); d
elay_10us(5);
pbuf++;
}
delay_10us(5);
UART_SendByte('\r');//回车
delay_10us(5);
UART_SendByte('\n');//换行 delay_ms(1000);}//ESP8266-WIFI模块工作模式初始化
void ESP8266_ModeInit(void)
{
后续
ESP8266_SendCmd("AT+CWMODE=2");//设置路由器模式 1 staTIon模式 2 AP点 路由器模式 3 station+AP混合模式 ESP8266_SendCmd("AT+CWSAP=\"PRECHIN\",\"prechin168\",11,0"); //设置WIFI热点名及密码 ESP8266_SendCmd("AT+CIPAP=\"192.168.4.1\"");//重新启动wifi模块 ESP8266_SendCmd("AT+RST");//重新启动wifi模块 ESP8266_SendCmd("AT+CIPMUX=1"); //开启多连接模式,允许多个各客户端接入 ESP8266_SendCmd("AT+CIPSERVER=1,8080"); //启动TCP/IP 端口为8080 实现基于网络控制
}
void main()
{
u16 i=0;
led1=led2=1;
UART_Init(); //串口初始化
ESP8266_ModeInit();
ES=1; //允许串口中断
while(1)
{
}
}
#if 1
void Usart() interrupt 4
{
static u8 i=0; if(RI)
{
RecBuf[i++]=SBUF;
if(RecBuf[i-1]=='\n')
{
i=0;
recFlagOK=1;
RecBuf[11]='\0';
}
if(recFlagOK==1)
{
recFlagOK=0;
if(RecBuf[9]=='1')
{
led1=0;
}
if(RecBuf[9]=='2')
{
led1=1;
}
} i
f(RecBuf[9]=='3') //led控制
{
led2=0;
}
if(RecBuf[9]=='4')
{
led2=1;
}
RI=0;
}
}
#endif