51单片机+ESP8266实现手机控制单片机(点亮LED灯)

固件的烧写

既然要使用WiFi模块,那首先要进行固件的烧写
已经烧写好固件的可以直接跳过看模块的初始化
WiFi模块使用的是自带CH340驱动的NodeMCU开发板在这里插入图片描述
固件烧录工具采用固件烧写\flash_download_tool_v3.8.5\flash_download_tool_v3.8.5.exe
原安信可AT固件51+ESP8266\固件烧写\v1.3.0.2 AT Firmware.bin
在这里插入图片描述

选择第一项
在这里插入图片描述
然后选择ESP8266 DownloadTool
在这里插入图片描述
第一行选择你保存的bin文件的位置,后面的0x00000可能需要自己手动输入,然后COM选择自己的端口号(需要电脑安装有CH340驱动,以及用USB线连接电脑和模块)参数改成上图一样的
在这里插入图片描述
点击START然后等待下方进度条跑满
在这里插入图片描述
到这里固件就烧写完毕了,下面开始WiFi模块的初始化

模块的初始化

接下来使用串口调试助手来用AT指令对WiFi模块进行初始化
同样用USB线连接模块
打开51+ESP8266\串口调试助手\XCOM V2.6.exe
在这里插入图片描述
选择自己的串口号
在这里插入图片描述
不知道的可以在设备管理器上查看,如果没有就重新插拔一下WiFi模块,波特率默认选择115200
然后发送

AT+CWMODE=2

设置模块工作方式为模式2:AP模式 这种模式下模块发出WiFi信号,用手机或电脑连接
WiFi模块作为TCP server(服务器) 手机或电脑作为TCP client(客户端)

AT+CWSAP="Esp8266","0123456789",11,3

设置的WiFi热点的账号和密码
然后发送

AT+RST

重启模块


因为后面要用到WiFi模块与51单片机交互数据,但是51单片机支持的最高波特率是9600
所以要把WiFi模块的波特率改成9600

AT+CIOBAUD=9600

改完把右上角的波特率也改成9600,以便正常通信
在这里插入图片描述


然后设置建⽴ TCP server

AT+CIPMUX=1
AT+CIPSERVER=1,8080

这两行的含义分别是开启模块的多连接(即可以连接多个 TCP client)
设置端口号为8080 (后面TCP client连接需要用到)
:上面两行代码每次启动模块都需要重新写入,后面会在单片机代码里添加相应的代码
在启动单片机的时候自动写入


然后用

AT+CIFSR

查询WiFi模块的IP地址

在这里插入图片描述

IP地址默认是

192.168.4.1

这时用手机安装51+ESP8266\手机TCP软件\TCP.apk
安装完成打开WiFi连接上面步骤设置的WiFi

名称:Esp8266
密码:0123456789

在这里插入图片描述
然后打开前面安装的TCP
在这里插入图片描述
点击右上角的连接输入IP地址和端口号

192.168.4.1
8080

在这里插入图片描述
连接成功在下方会有弹窗提示,到这里模块的初始化就大功告成了。


单片机及模块的连线

使用的是普中51-单核-A5单片机
在这里插入图片描述
因为单片机内部已经对RX和TX进行连线 P30即单片机的RX端 P31为TX端
所以将J39端子的UTXD和P30R以及 URXD和P31T用跳线帽连接
然后用杜邦线连接

单片机WiFi模块
P30TX
P31RX
3.3V3V
GNDG
3.3VEN
3.3VRST

在这里插入图片描述
注:记得把单片机晶振换为11.0592MHZ,否则通信将不成功

代码部分

代码部分

  • 数据类型定义
  • 延时函数
  • 串口初始化
  • 发送函数
  • WiFi模块初始化
  • main函数
  • 串口中断服务函数
#include "reg51.h"

#define uint unsigned int
#define uchar unsigned char

sbit led2 = P1^1;

uchar Recive_table[15];	 //存放接收到的数据
	  
uint i;
uint j;
void delay_ms(uint ms)
{
	uchar i,j;
	for(i=ms;i>0;i--)
	for(j=120;j>0;j--);
}

void delay_us(uchar us)
{
	while(us--);
}

void Usart_Init()//初始化51单片机
{
	
	SCON = 0x50;//串行口中断方式一,且启动串行口接受(REN=1)
	TMOD = 0x20;//计数器1工作方式2,自动重装载
	
	TH1 = 0xfd;//设置波特率与esp8266达成一致
	TL1 = TH1;
	
	PCON = 0;//波特率不加倍
	
	TR1 = 1;//启动计数器
	EA = 1;//开总中断
}
 
void SENT_At(uchar *At_Comd)//指针指向At指令
{
	ES = 0;//关闭串口中断
	while(*At_Comd!='\0')
	{
		SBUF = *At_Comd;
		while(!TI);//等待该字节发送完毕,发送完后硬件自动置一TI
		TI = 0;//硬件之以后必须软件置零才能进行下一次数据传送
		delay_us(5);
		At_Comd++;//指向下一个字节
	}
}
void WIFI_Init()//通过单片机配置AT指令
{
	SENT_At("AT+CIPMUX=1\r\n");//多连接模式
	delay_ms(1000);
	SENT_At("AT+CIPSERVER=1,8080\r\n");//设置端口号
	delay_ms(1000);
	ES = 1;
}


void main()
{	
	Usart_Init();
	WIFI_Init(); 
	delay_ms(450); //大约延时 450ms
	while(1)
	{
		 //在这里放入你想执行的代码
	}
} 
void Uart() interrupt 4 //中断程序
{	
	
	if(RI==1)//接受一帧完成后由硬件置一
	{
		RI = 0;//软件清零,防止下次未接收完成就执行程序
		Recive_table[i] = SBUF; //将接受数据存入数组
		if(Recive_table[0]=='+')
		  i++;
		else
			i = 0;
		if(i>10)
		{
			if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P')&&(Recive_table[3]=='D'))
			{
				if(Recive_table[9]=='0')
				{
					led2 = 1;	//led灯灭
				}	 
				if(Recive_table[9]=='1')
				{
					led2 = 0;	//led灯亮
				}
				
						
			}
			i = 0;//如果不清零 就无法达到变化
		}
	}
	else
   TI = 0;		
}

通过修改中断服务函数中的

if(Recive_table[9]=='0')
				{
					led2 = 1;	//led灯灭
				}

判断条件以及相应语句来实现控制不同器件


通过手机通过TCP连接来发送数据控制led灯的亮灭
可直接烧录51+ESP8266\esp8266\51+esp8266.hex
然后按照上文的连接方式连线,以及将P1^1端口连接任意的led灯
程序的烧录这里不做赘述
说明中提到的工具及代码
百度网盘链接
提取码:6666

  • 24
    点赞
  • 169
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
### 回答1: 好的,以下是使用ESP8266控制LED的步骤: 1. 确保您已经准备好以下材料: - ESP8266模块 - LED - 杜邦线(母对母,公对公,公对母各一条) 2. 连接ESP8266模块和LED。将ESP8266的GPIO2引脚与LED的正极连接,将LED的负极连接ESP8266的GND引脚。 3. 下载并安装Arduino IDE,打开它并在“文件”菜单中选择“首选项”。在“附加开发板管理器网址”中输入http://arduino.esp8266.com/stable/package_esp8266com_index.json,然后单击“OK”。 4. 在Arduino IDE的“工具”菜单中选择ESP8266开发板,然后选择正确的端口。 5. 创建一个新的Arduino项目,将以下代码复制并粘贴到Arduino IDE中: ``` void setup() { pinMode(2, OUTPUT); } void loop() { digitalWrite(2, HIGH); delay(1000); digitalWrite(2, LOW); delay(1000); } ``` 6. 将代码上传到ESP8266模块中,等待上传完成。 7. LED应该会开始闪烁。如果没有,请检查连接并确保您已正确地连接LED。 以上就是使用ESP8266控制LED的步骤。您可以根据需要更改代码以改变LED的行为。 ### 回答2: 51单片机是一种高性能、低成本的微控制器,被广泛应用于各种嵌入式系统中。而ESP8266则是一款集成了Wi-Fi模块的芯片,也被广泛应用于物联网领域。在本题中,我们将介绍如何使用51单片机控制ESP8266模块,进而实现LED控制。 1. 硬件搭建 首先,需要搭建相应的硬件平台,包括51单片机ESP8266模块、LED等。具体搭建过程如下: (1) 选择一块支持串口通信的51单片机开发板,例如STC89C52或STC89C516。 (2) 将ESP8266模块连接到开发板的串口口(RXD、TXD),同时将其VCC、GND分别接到5V、GND电源上。注意:ESP8266的TXD端不应连接单片机的TXD引脚,否则会出现冲突。 (3) 将LED连接到开发板的I/O口,例如P2.0或P2.1。 2. 软件设计 接下来,需要设计相应的软件程序,通过串口通信实现ESP8266模块的数据交互,从而控制LED的亮灭。具体代码如下: ```c #include<STC89C5xRC.H> #include<intrins.h> #include<stdio.h> #define baud_rate 9600 //波特率为9600 /* 串口初始化函数 */ void Uart_Init() { TMOD = 0x20; //定时器1做为波特率发生器 TH1 = 0xFD; //设置波特率为9600 TL1 = 0xFD; TR1 = 1; //启动定时器1 SM0 = 0; //设置串口模式 SM1 = 1; EA = 1; //打开总中断 ES = 1; //打开串口中断 } /* 串口中断服务函数 */ void Uart() interrupt 4 { static unsigned char i = 0; static unsigned char buf[32] = {0}; if (RI) //如果接收到数据 { RI = 0; //清除标志位 buf[i++] = SBUF; //将接收到的数据存放在缓冲区中 if (i == 32) //数据长度超出范围,清空缓冲区 { i = 0; memset(buf, 0, sizeof(buf)); } } if (TI) //如果发送数据完成 { TI = 0; //清除标志位 } } /* ESP8266发送AT指令函数 */ void Send_AT(char *cmd) { while (*cmd) { SBUF = *cmd++; //向串口发送数据 while (!TI); TI = 0; } } /* 控制LED亮 */ void LED_On() { P2 &= ~0x01; //使P2.0输出0,LED亮 } /* 控制LED灭 */ void LED_Off() { P2 |= 0x01; //使P2.0输出1,LED灭 } /* 主函数 */ void main() { Uart_Init(); //初始化串口 Send_AT("AT+CWMODE=1\r\n"); //设置ESP8266为STA模式 Send_AT("AT+CWJAP=\"myssid\",\"mypassword\"\r\n"); //连接Wi-Fi热点(需要替换成真实的SSID和密码) Send_AT("AT+CIPMUX=0\r\n"); //设置ESP8266连接模式 Send_AT("AT+CIPMODE=1\r\n"); //设置ESP8266为透传模式 while (1) { Send_AT("AT+CIPSTART=\"TCP\",\"192.168.1.100\",8080\r\n"); //连接TCP服务器(需要替换成真实的IP地址和端口号) Send_AT("AT+CIPSEND\r\n"); //开始发送数据 Send_AT("led=on\r\n"); //控制LED亮 Delay(1000); //延时1秒 Send_AT("AT+CIPCLOSE\r\n"); //关闭TCP连接 Delay(5000); //延时5秒 Send_AT("AT+CIPSTART=\"TCP\",\"192.168.1.100\",8080\r\n"); Send_AT("AT+CIPSEND\r\n"); Send_AT("led=off\r\n"); //控制LED灭 Delay(1000); Send_AT("AT+CIPCLOSE\r\n"); Delay(5000); } } ``` 3. 算法流程 在程序中,通过Uart_Init()函数初始化串口模式、波特率等参数,然后使用Send_AT()函数发送AT指令序列,连接Wi-Fi热点、设置TCP参数、进入透传模式等。在主循环中,模拟控制LED的亮灭状态,并通过ESP8266模块向TCP服务器发送数据,从而实现远程控制LED的效果。 4. 总结 本文介绍了如何使用51单片机控制ESP8266模块,进而实现LED的远程控制,其中涉及到了串口通信、TCP/UDP协议等知识点。需要特别注意的是,在实际应用中,需要根据实际情况修改程序中的IP地址、端口号、Wi-Fi热点名称和密码等参数,以确保程序的正确性和稳定性。 ### 回答3: 51单片机是一款广泛应用于微电子领域的控制芯片,可以用来制作各种控制电路,而ESP8266则是一款高集成度的WiFi模块,可以直接连接到互联网。控制LED是一项常见的电子项目,因此许多制作者选择使用ESP8266控制LED的开关,从而实现远程控制。 想要实现LED控制,需要进行如下步骤: 1. 确定电路图。在这个电路中,我们需要连接LED单片机的一条引脚上,确保引脚可以输出电流,从而让LED发光。 2. 编写代码。在这个项目中,我们需要使用51单片机的程序来控制LED的开关,同时需要使用ESP8266模块来实现WiFi连接和数据发送。编写代码时,需要先连接ESP8266模块,并对其进行初始化,然后再使用相应指令来实现数据传输和接收。同时,在程序中还需要编写专门的函数来控制LED的亮灭。 3. 调试测试。在编写完程序之后,需要进行调试测试,确保代码能够正常运行。在测试中,可以先使用串口连接模块,观察程序输出的信息和指令是否正确。若程序输出无误,可以尝试使用手机或电脑连接WIFI,看看能否实现遥控LED。 总的来说,通过51单片机ESP8266模块控制LED,可以实现方便、快捷的远程控制。这个项目不仅具有实用性,而且可以帮助我们更好地了解电子硬件的工作原理和程序设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值