51单片机+ESP8266实现局域网内WiFi控制LED

写在前面

  这篇博客是我初探物联网,东西简陋代码简陋,让各位看官见笑了哈。话不多说直接进入正题。

  首先大致介绍下ESP8266,我用的是ESP-01这款,安信可的,具体参数大家可以直接上安信可官网找到资料,非常详细。ESP8266文档中心:安信可ESP8266文档中心
  ESP-01原理图:
  在这里插入图片描述
  这个应该是正视图,就是天线那一面朝上,然后孔位对应如上图。
  
  接线方面,GND要跟51板共地,VCC的额定电压为3.3V,CH-PD即上图EN脚需要接到VCC,RXD和TXD对应接到51板子上的TXD和RXD一般为P3.1和P3.0。这个模块我目前遇到一个问题无法解决,模块正常工作的时候芯片发热非常严重,已经属于烫手的程度,我看芯片手册上写着工作温度最高只能到85度,长期高温工作下去不知道会不会坏,安信可FAE让我EN脚串联一个10K的电阻在接到VCC上,但是实测发现发热有所缓解但还是烫手,而且串联电阻之后模块接收指令正常,但是不发WiFi了,拆掉之后恢复正常,所以只能让模块超温工作。
  
  还有需要注意的是模块的额定电压是3.3v,51板子上供的是5V,需要经过降压处理之后才能接到模块上,不然模块必然会烧!而且51板子上的RXD和TXD也需要经过转换,这点我看到很多其他博主都没有详细写,我这里写出来给大家做个参考,很多时候诡异的问题就是在于硬件部分没有处理好。
  
  降压电路:
  在这里插入图片描述
  用到的是LDO稳压,公司有现成的AMS1117-3.3V和其他元件,全都借用了~
  TXD和RXD的降压使用的是安信可芯片手册给出来的降压电路,在ESP-12S的手册最后面。
  焊接好之后成品如下:
  在这里插入图片描述
  (打码的地方是我废弃的ESP-12S模块…辛辛苦苦搭的电路结果因为ESP-12s的脚位间距与我焊盘不符搞得线都走不进去)
  然后就可以把51板子上的VCC、GND、RXD、TXD接到插针上,首先测量下电压对不对,看看电路有没有问题。我这里测量数据是输入电压4.6V,1117的Vout出来的电压为3.29V。输入的RXD电压为4.7V?(记不清了),经过降压之后是2.9V。然后可以放心把模块插上了。
  
  模块这边在插上前我预先用USB-TTL模块接到电脑上做了些处理。
  首先保证模块和电脑可以通信,然后可以先发个 AT 指令看看模块正不正常,一般来说电脑端串口助手会收到OK。
  然后可以开始设置模块,指令如下:
  AT+CWMODE=2 // 模块工作在AP模式,1为station模式,3为AP+station模式
  AT+CWSAP=“ESP8266”,“666666”,11,3 //设置WiFi名称,密码,通道号,加密方式。通道号是参照别的博主写的,3是WPA2_PSK 加密
  AT+RST // 重启模块
  
  一般到这就设置好了,但是代码中我让单片机产生的是9600的波特率,所以我这里也把模块的波特率改为9600。
  AT+UART = 9600,8,1,0,0 //9600-波特率 8-8bit数据位 1-1bit停止位 0-none校验位 0-不使能流控。
  我查资料的时候发现有小伙伴把流控打开了,而USB-TTL模块上没有流控,导致设置完之后就不能通信了,然后只能重刷固件。我这里没有遇到这个问题,刷固件倒是刷了一次,一开始按照其他博主的指令死活修改不了波特率,后来换了上述之后才行,估计跟我的固件无关。刷固件的教程有不少,这里就不写了。
  
  做完上面的操作之后,可以把串口助手波特率改为9600,先看下跟电脑通信是否正常,如果没问题的话用手机连上ESP8266,然后手机下载一个TCP助手,连上WiFi,然后串口助手再发送以下两条指令:
  AT+CIPMUX=1 //开启多连接
  AT+CIPSERVER=1,8080 //建立服务器,端口号8080

  注意这两条指令在每次模块重启之后都要设置一遍,不然是无法远程连接到模块的。
  
  然后手机端打开TCP助手,建立一个连接,模块的IP地址一般为192.168.4.1,也可以串口助手发送AT+CIFSR来查询。端口号填上之前设置的8080,随便发点什么,如果一切正常的话,在串口助手可以收到类似 +IPD,0,3:111 这样的信息,我们只需要冒号后面的数据,前面的数据不细说了。
  下一步就是写单片机里面的程序了,要让单片机实现我们之前进行的操作。
  代码如下:

#include<reg52.h>

typedef unsigned char uint8;
typedef unsigned int uint16;
uint8 i,j,temp;
bit flag;
uint8 receive[4];
uint8 code table[]="AT+CIPMUX=1\r\n";
uint8 code table1[]="AT+CIPSERVER=1,8080\r\n";

void shortdelay(uint16 n){		//短延时
	uint16 i,j;
	for(i=n;i>0;i--){
		for(j=110;j>0;j--){;}
	}
}

void esp_init()
{
	uint8 a=0,b=0;
    while(table[a]!='\0')
    {
        SBUF=table[a];		//写入要发送的字符
        while(!TI);			//等待发送完成
        TI=0;				//发送
        a++;
    }
    shortdelay(50);			//延时函数
    while(table1[b]!='\0')
    {
		SBUF=table1[b];
		while(!TI);			//等待发送完成
		TI=0;
		b++;
    }
}

void int_init(){			//开启定时器1,产生9600波特率
	TMOD = 0x20;			//定时器1工作在方式2八位自动重装模式
	TH1 = 0xfd;
	TL1 = 0xfd;
	TR1 = 1;				//开启定时器1
	
	PCON = 0x00;			//波特率不加倍
	SM0 = 0;				//串口工作方式
	SM1 = 1;	
	REN = 1;				//串口接收允许
	EA = 1;					//打开全局中断
	ES = 1;					//允许串口中断
}

void Uart() interrupt 4
{
    temp=SBUF;				//取出接收到的数据
    RI=0;					//清除接收中断标志位
	if(temp==':'||i>0)
	{
		receive[i]=temp;
		i++;
		if(temp=='\n')
		{
			i=0;
		}
	}
}

void main(){
	int_init();								//中断初始化,定时器初始化
	esp_init_init();						//模块初始化,发送那两条指令
	while(1){
		if(receive[1]=='1'){				//收到1点亮所有LED
			P1 = 0x00;
		}
		else P1 = 0xff;						//否则熄灭所有LED
	}
}

  定时器1产生9600波特率这个我在之前的博客里面有介绍,不懂的可以看下 单片机与上位机的串行通信

  烧好程序后,可以用串口助手看下板子发送的指令正不正常,我这里按一下复位就会发送 AT+CIPMUX=1AT+CIPSERVER=1,8080 这两条指令,而且是分开两行的,证明发送指令正常,然后再用串口助手发 +IPD,0,3:1这条指令给单片机,如果小灯亮,那么51板子是没问题了。如果有异常请自己找下原因,我这里测试都是没有问题的。
  最后一步把模块与51开发板连接起来,VCC GND TXD RXD对应好,然后按一下板子的复位按钮,如果看到ESP模块上面蓝色小灯闪了,证明开发板跟ESP-01模块通信正常。然后用手机连上WIFI,打开TCP助手,建立一个新连接,IP地址192.168.4.1,端口8080,发送一个1,如果看到开发板上的小灯亮了,说明一切正常,如果没亮,还请再找找原因~
在这里插入图片描述
  在这里插入图片描述
  同理发送0,开发板上所有LED小灯熄灭。结束~
  花了两三天时间,一开始是ESP模块波特率改不了,然后是设计降压电路,焊接降压电路,芯片发热又想解决发热问题,遇到不少坑,最后看到这几个破灯点亮真是激动。
  下一篇可能会写让ESP-01接入互联网,然后手机端直接通过4G控制小灯亮灭,真正实现物联网的功能。希望别遇到太多困难…
  另外代码中还有一个没想通的问题,主函数while(1)中放的两行代码,如果放到串口中断服务函数里面的

		if(temp=='\n')
		{
			i=0;
		}

  就会出现这种情况:手机发1,板子没反应,再发1,LED亮。我还没试过先发1再发0。估计情况类似,可能LED会亮,然后下次再发1的话LED会灭。就是控制滞后一轮,具体原因分析不出来,路过的看官如果知道希望能在评论区告诉我~

  • 28
    点赞
  • 181
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
WLAN是英文WirelessLAN的缩写,就是无线局域网的意思。无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活、建网迅速、个人化等特点。将这一技术应用于电信网的接入网领域,能够方便、灵活地为用户提供网络接入,适合于用户流动性较大、有数据业务需求的公共场所、高端的企业及家庭用户、需要临时建网的场合以及难以采用有线接入方式的环境等 作为全球公认的局域网权威,IEEE802工作组建立的标准在过去二十年内在局域网领域独领风骚。这些协议包括了802.3Ethernet协议、802.5TokenRing协议、802.3z100BASE-T快速以太网协议。在1997年,经过了7年的工作以后,IEEE发布了802.11协议,这也是在无线局域网领域内的第一个国际上被认可的协议。  在1999年9月,他们又提出了802.11b"HighRate"协议,用来对802.11协议进行补充,802.11b在802.11的1Mbps和2Mbps速率下又增加了5.5Mbps和11Mbps两个新的网络吞吐速率。利用802.11b,移动用户能够获得同Ethernet一样的性能、网络吞吐率、可用性。这个基于标准的技术使得管理员可以根据环境选择合适的局域网技术来构造自己的网络,满足他们的商业用户和其他用户的需求。802.11协议主要工作在ISO协议的最低两层上,并在物理层上进行了一些改动,加入了高速数字传输的特性和连接的稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值