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中串口监控情况
由实验结果可知,符合实验目的的预期结果,实验成功
作者:caojun97
出处:https://www.cnblogs.com/caojun97/p/16841634.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具