基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制

前言:本人也是一个第一次接触esp8266WiFi模块的小萌新,在调试过程中同样也踩了很多坑,花了很多时间才把这个基本的利用WiFi模块点灯实现。

希望本文能对刚接触esp8266WiFi模块的通信调试的朋友有更多的帮助。

(需要资料的朋友后面我会把资料放在最下面提供给大家参考)

第一步:

所需材料:

1、51单片机(我用的是普中A2开发板,其他的也都可以),最好再买一个51开发板的最小系统11.0592MHZ

基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制_第1张图片

 2、esp8266-12F(WiFi模块使用的是自带CH340驱动的NodeMCU开发板,也可以是其他型号的)

基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制_第2张图片

3、USB转TTL模块:这个模块可以有也可以没有,因为有一些开发板是配备有USB转TTL模块的

4、杜邦线(至少10根以上,别跟我一样,买了小灯泡线准备不够接不了其他外设)

5、数据线,电源线等等(这些买单片机一般都会有配备的) 

第二步:固件的烧写

既然要使用WiFi模块,首先需要进行固件的烧写

USB转TTL模块与esp8266的连线:

  •                 USB转TTL                 esp8266
    RXD TX
    TXD RX
    GND GND
    3.3V 3.3V
    Vcc EN

    烧写时还需要将esp8266的GPIO0接USB转TTL模块的GND,调试时断开即可。

  • 固件烧录工具采用:esp8266资料/esp8266烧写/flash_download_tool_v3.8.5/flash_download_

    tool_v3.8.5.exe

    AT固件:esp8266资料/esp8266烧写/v1.3.0.2 AT Firmware.bin

  • 然后进行烧写工作:

    (1)选择第一项

  • 基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制_第3张图片

     (2)选择第一项(购买的是什么型号就选择什么型号,因为这是esp8266,所以选择第一项)

  • 基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制_第4张图片

    (3)按下图选择固件及勾选对应标志即可

  • 基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制_第5张图片

     (4)连线成功然后选择START直到出现以下界面则烧录成功

  • 基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制_第6张图片

    到这里固件就烧写完成,下面进行WiFi模块的初始化

    第三步:WiFi模块的初始化

    接下来使用串口调试助手利用AT指令对WiFi模块进行初始化

    同样按下面表格将USB转TTL与esp8266进行连线

  •      USB转TTL         esp8266
    RXD TX
    TXD RX
    GND GND
    3.3V 3.3V
    Vcc EN

    然后打开esp8266资料/esp8266调试/串口调试助手/XCON V2.6.exe

  • 基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制_第7张图片

    选择对应的串口号,打开设备管理器即可查看,波特率默认选择115200 

基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制_第8张图片

 1、测试WiFi模块是否正常显示:

发送AT,串口助手上显示OK即模块已经正常启动

(发送AT+RST,重启WIFI模块,显示invalid或ready则重启成功)

2、WiFi模块的AT调试(这里比如我发送AT+CWMODE=3,返回OK则调试成功)

AT+CWMODE=1 Station模式
AT+CWMODE=2 AP模式
AT+CWMODE=3 Station模式+AP模式

AP模式:提供无线网络接入服务,允许其他无线设备连接其网络,类似无线路由器。

Station模式:本身不提供无线接入服务,可以连接AP,类似无线终端设备。(后面简写成STA)

(发送AT+CWMODE?则可以查询模式的设置)

3、例如:我这里发送AT+CWSAP=TP,123456,11,3;显示OK则设置成功

AT模式:AT+CWSAP=热点名,密码,11,3(热点名和密码可自行设置)

(第三个为通道号:自行选择1、5、6、11)

STA模式:

AT+CWJAP=路由器名称密码”

4、设置波特率:

为了后面单片机和esp8266正常通信,还要发送一条指令修改esp8266的波特率 AT+CIOBAUD=9600,8,1,0,0 返回ok后,记得将串口先断开然后把串口调试助手的波特率也进行修改9600

5、发送AT+RST重启esp8266,显示下面图片则表示调试成功

6、然后设置建⽴ TCP server

AT+CIPMUX=1(建立多连接,即可以连接多个 TCP client

AT+CIPSERVER=1,8080(设置端口号为8080,后面TCP client连接需要用到

上面两行代码每次启动模块都需要重新写入,后面会在单片机代码里添加相应的代码
在启动单片机的时候自动写入

7、然后用AT+CIFSR查询WIFI模块的IP地址

基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制_第9张图片

IP地址的默认地址是192.168.4.1

这时安装esp8266资料/TCP手机软件/TCP.apk

安装完成后输入对应的热点名和密码,连接对应esp8266对应的WiFi,打开TCP手机软件输入IP地址和端口号(IP地址:192.168.4.1和端口号:8080)

若连接成功则会显示以下界面:

基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制_第10张图片

基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制_第11张图片

 第四步:将程序烧写进单片机中

代码部分:

(1)延时函数

#include 


/****延时函数******/
void delay_ms(unsigned int ms)
{
	unsigned char i,j;
	for(i=ms;i>0;i--)
	{
		for(j=120;j>0;j--);
	}
}
 
void delay_us(unsigned char us)
{
	while(us--);
}

 (2)串口初始化及发送AT指令

#include 
#include "Delay.h"

/****串口初始化******/
void Usart_Init()
{
	SCON = 0x50;
	TMOD = 0x20;
	TH1 = 0xfd;
	TL1 = TH1;
	PCON = 0;
	TR1 = 1;
	EA = 1;
	
}
/*****发送AT指令*****/
void SENT_At(unsigned char *At_Command)
{
	ES = 0;
	while(*At_Command!='\0')
	{
		SBUF = *At_Command;
		while(!TI);
		TI = 0;
		delay_us(5);
		At_Command++;
	}
}

(3)通过单片机配置AT指令

#include 
#include "Usart.h"
#include "Delay.h"

/****通过单片机配置AT指令*******/
void WIFI_Init()
{
	SENT_At("AT+CIPMUX=1\r\n");          //建立多连接
	delay_ms(1000);
	SENT_At("AT+CIPSERVER=1,8080\r\n");  //设置端口号
	delay_ms(1000);
	ES = 1;
}
 

(4)主函数及串口中断

#include 
#include "Delay.h"
#include "Usart.h"
#include "Wifi.h"

sbit led1=P1^1;
 
unsigned char Receive_table[15];
unsigned int i;

void main()
{
	Usart_Init();
	WIFI_Init();
	while(1);
}
 
void Uart() interrupt 4 
{
	if(RI==1)
	{
		RI = 0;
		Receive_table[i] = SBUF; 
		if(Receive_table[0]=='+')
		  i++;
		else
			i = 0;
		if(i>=10)
		{
			if((Receive_table[0]=='+')&&(Receive_table[1]=='I')&&(Receive_table[2]=='P')&&(Receive_table[3]=='D'))
			{
				if(Receive_table[9]=='1')//发送1灯亮
					led1 = 0;
				if(Receive_table[9]=='0')//发送0熄灭
					led1 = 1;
			}
			i = 0;
		}
	}
	else
   TI = 0;		
}

第五步:将单片机拔掉放到51单片机最小系统

(因为我的单片机的晶振是12MHZ,为避免通信不成功,所以需要用51单片机最小系统进行后续的调试及通信,单片机的晶振是11.0592MHZ也可以不用51单片机最小系统,直接进行第六步的esp8266与51单片机开发板的连线即可)

第六步:esp8266与51单片机最小系统的连线

如果51单片机没有3.3V的引脚也可以用5V引脚,但是只能短期使用,长期的话则会烧毁esp8266,最好还是接一个电压模块(将5V电压转化为3.3V再与esp8266进行连接)

基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制_第12张图片

esp8266 51单片机最小系统
RX TX
TX RX
GND GND
3.3V 3.3V
EN Vcc

具体连接方式如下图显示,因为我找不到多余的杜邦线使用,所以暂时将线连接在了51开发板的P2_0口上显示成功通信效果(在TCP调试助手上发送1,D1会量灯,发送0则熄灭)

如果需要其他外设,只需要将程序引入其他模块,再连线即可

基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制_第13张图片

 源码及资料链接:

链接:https://pan.baidu.com/s/1ydIUxLGrspL_G9vnBSm3cw 
提取码:r0ls

你可能感兴趣的:(51单片机,物联网,嵌入式硬件)