Sivo 悉见

51单片机与ESP8266-01s模块通讯点灯

匿名 · 更新于 2023/3/4

前言

          本文章为方便新手上手直接用最简单的点灯展示,关于ESP8266-01s的AT指令类就上网搜有很多这就不多讲了。

接线

ESP-01S USB转TTL 51单片机
VCC 3.3V 3.3V
GND GND GND
EN 3.3V 3.3V
TX RX P3.0
RX TX P3.1
IO0(注刷固件时插) GND(注刷固件时插)  


一、ESP8266-01S接USB转TTL

如果是要刷固件的话ESP8266-01s的IO0接要接上USB的地,其余时候是不需要接的。


二、ESP8266-01S接51单片机

单片机烧录文件的时候需要拔掉TX和RX,不然会冲突无法烧录,烧录完成后插回去,然后按下复位键即可。如是需要在接51单片机在用串口助手去给ESP8266打指令的话就把51的RX和TX接是ESP8266-01s的RX和TX,也就是正插,平常使用都是和模块的RX与TX反插。

三、所用到AT指令

AT+CWMODE=2

AT+CWSAP="8266","123456789",1,3

AT+UART_DEF=9600,8,1,0,0

AT+CIPMUX=1

AT+CIPSERVER=1,8080

四、固件问题

固件一般新买的都有默认固件,一般需要刷固件的是EPS8266-01s变成砖头打不进指令才需要刷固件,固件有两种一种是出厂固件,一种是升级固件,一般不需要很多特殊指令的话就不用刷升级固件,出厂固件够用。

五、具体流程

1.首先从刷固件开始(若能打指令就跳过这到打指令部分)

需要的文件本博文结尾提供下载

工具

 选择第一个

 

 

 固件路径

原装出厂固件库\Ai-Thinker_ESP8266_AT_Firmware_DOUT_v1.5.4.1-a_20171130\Ai-Thinker_ESP8266_DOUT_8Mbit_v1.5.4.1-a_20171130

 

 等进度条完成后就ok了就关掉,在打开串口调试工具。

2.调试指令部分

AT指令不懂意思的话百度直接搜有很多解释

 输入3条指令即可,这三条指令保存到Flash,掉电不删除此配置。每输入一条ESP8266-01s都会回一个ok,因为剩下两条AT指令断电会自动重置掉所以直接代码里写入。也可以全部指令在代码里写入,这部分就可跳过。

六、 代码部分

源代码如下:

 
#include <reg51.h>
unsigned char Recive_table[15];        //用于接收wifi模块反馈到MCU上的数据
char Recive_state = 0;
bit uart_busy = 0;

/* ---------------------- 延时5毫秒 ---------------------- */ void delay5ms() { unsigned char a,b; for(b=101;b>0;b--) for(a=147;a>0;a--); }

/* ---------------------- 初始化串口,波特率9600 ---------------------- */ void Init_uart(void) { TMOD = TMOD | 0x20; //定时器1工作在方式2 8位自动重装 SCON = SCON | 0x50; //串口1工作在方式1 10位异步收发 REN=1允许接收 TH1 = 0xFd; //定时器1初值 TL1 = TH1; TR1 = 1; //定时器1开始计数 EA =1; //开总中断 ES =1; //开串口1中断 }

/* ---------------------- 串口发送数据方法 ---------------------- */ void Uart_SendByteData(unsigned char msg){ while(uart_busy); //等待上一个数据发送完成 SBUF=msg; uart_busy = 1; //串口发送置忙 } void Uart_SendStrData(unsigned char *msg){ while(*msg){ Uart_SendByteData(*msg++); } }

/* ---------------------- 初始化WIFI模块 ---------------------- */ void Init_ESP01S(){  
Uart_SendStrData("AT+CIPMUX=1\r\n"); // 设置多连接 delay5ms(); Uart_SendStrData("AT+CIPSERVER=1,8080\r\n"); // 配置服务器,监听8080端口 delay5ms(); }

void main(){ Init_uart();   delay5ms();   Init_ESP01S(); // Init_ESP01S 与 Init_uart调用的顺序不能改变

	P1_0 = 1;
	while(1){
		if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//MCU接收到的数据为+IPD时进入判断控制0\1来使小灯亮与灭,网络中的无线设备发送到ESP-01S的数据信息固定格式+IPD,<客户ID>,<信息长度>:<信息内容>。
		{
				 if((Recive_table[3]=='D')&&(Recive_table[6]==','))
			{
					  if(Recive_table[9]=='0')
				{
								P1_0 = 0;
				}
						if(Recive_table[9]=='1')
				{
								P1_0 = 1;
				}
			}
		}
 Recive_state = 0;
}
}


/* ----------------------
	  串口中断
---------------------- */
void UART_Interrupt(void) interrupt 4 {
	static char i=0;

if(RI==1){
				ES = 0;
        RI=0;
        Recive_table[i]=SBUF;    //MCU接收wifi模块反馈回来的数据
        i++;
				if(Recive_table[i-1]=='\n')
        {
            Recive_table[i]='\0';
            i=0;  //遇到换行 重新装值
            Recive_state = 1;
					  }
        ES = 1;
    }
    else TI=0;
			uart_busy = 0;
}
 

七、网络测试

烧录代码完成后按下复位键就可以打开网络调试助手能连上能发信息就可以了。

八、文件下载

固件库+调试软件 (提取码:s1y0)

————————————————
版权声明:本文为CSDN博主「黑色的凉白开」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_50493148/article/details/120373405