ESP8266和51单片机的串口通讯
ESP8266和51单片机的串口通讯
运行环境:
操作系统:windows10 x64
IDE:Arduino1.8.15、Keil uVision4
实验板:普中51-单核-A2开发板、ESP8266开发板
仿真器:setup_x64_2.8.exe
实验目的:通过ESP8266的FLASH按键控制51单片机的D1的亮灭
一、串口通讯
串口通信工作原理请参考...
二、ESP8266和51单片机的接线
| ESP8266 | 51单片机 | 备注 |
|---|---|---|
| RX(即GPIO3 RXD0) | P31(即P3.1 TXD) | |
| TX(即GPIO1 TXD0) | P30(即P3.0 RXD) |
51单片机GPIO原理图

ESP8266GPIO原理图

三、51单片机串口通讯
❤ 51单片机串口通讯代码
/*-----------------------------------------------------------------------------
* 实验说明 : 单片机串口接收数据控制灯亮灭
* 连接方式 :
* 注 意 : 该试验使用的晶振是11.0592
*******************************************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar PuZh[20] = "This is ok";
//--定义使用的IO--//
sbit LED=P2^0;
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
void Com_Int(void) interrupt 4
{
uchar i;
uchar receive_data;
EA = 0;
if(RI == 1) //当硬件接收到一个数据时,RI会置位
{
RI = 0;
receive_data = SBUF;//接收到的数据
if(receive_data == '1')
{
LED =0;//接收到字符'1'亮灯
}
else
{
LED =1; //其他情况灯灭
}
}
for(i=0; i<20; i++)
{
SBUF = PuZh[i]; //将要发送的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
Delay_1ms(1);
}
EA = 1;
}
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1,8位数据,可变波特率
TMOD=0X20; //设置计数器工作方式2
PCON=0X00; //波特率不加倍
TH1=0XFd; //计数器初始值设置,9600@11.0592MHz
TL1=0XFd;
TR1=1; //打开计数器
ES = 1; //开串口中断
EA = 1; //开总中断
}
void main()
{
UsartConfiguration();//初始化串口
while(1);
}
❤ 在Keil uVision4中编译后得到.hex文件,利用烧写工具将其烧录到51单片机
四、ESP8266串口通讯
❤ ESP8266串口通讯代码
#define buttonPin D3 // 按钮引脚D3
int count = 0;
// the setup function runs once when you press reset or power the board
void setup()
{
Serial.begin(9600); // 启动串口通讯
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);// 熄灭LED
}
// the loop function runs over and over again forever
void loop()
{
if(!digitalRead(buttonPin))//检测到按键引脚状态:按下
{
//检测到按键按下后,LED灯点亮0.5作为提示
digitalWrite(LED_BUILTIN, LOW);// 点亮LED
delay(500);
digitalWrite(LED_BUILTIN, HIGH);// 熄灭LED
count++;
if(0 == count % 2)
{
Serial.print("1");
}
else
{
Serial.print("0");
}
}
}
❤ 在Arduino中编译、烧写烧写代码到ESP8266
五、实验结果
操作过程:按下ESP8266的FLASH按键后立马松开,查看情况;再一次按下按键,查看情况
(注意:给ESP8266和51单片机供电,连接ESP8266和51单片机串行接口连线)
实物演示结果:
Auduino中串口监控情况

由实验结果可知,符合实验目的的预期结果,实验成功

浙公网安备 33010602011771号