制作esp8266+c51,点亮单片机上的led小灯

原创 2017年03月14日 14:17:08

最近有朋友让我做一个手机通过wifi控制51单片机led小灯(功能很简单,就是一个床头灯)。我上网查了查,esp8266wifi模块功能很强大,但是没有基于51的(其实有几篇,但是通过实践都不好使,不知道是我没做对,还是别的原因)。所以在这里写一篇博客,说一下我的制作过程。

1、硬件部分


这是我在某宝上买的esp8266模块,十几块一个,首先测试一下模块是否好使。

模块跟一个串口模块连接(因为esp8266要有一个管脚要拉高,所以要改造一下)。电源最好是3.3V,有人说5V没事,我刚开始测试的用5V,发热量挺大的,都烫手,但是好使,结果有一天突然flash烧了,不知道怎么回事,所以最好还是要3.3V。


这里盗一张别人的管脚图。


通过发送AT指令测试,在这里我改写了esp8266的波特率(默认为115200,但是51单片机最高为9600),和wifi名字和密码(改写完成后重启也不会改变)

至于截图我忘了截,但是网上有很多,或是卖家资料也有,可以参考一下,很简单的。

2、软件部分(我把程序打包了,可以参考一下,里面写的很详细)

这是main.c

#include <reg52.h>
#include <string.h>
#include "usart.h"
#include "wifi.h"


char Recive_table[20]="";  //接收缓冲,最大20个字节
char Recive_state = 0;   //接收完成标志


int main (void)
{


/********************功能初始化***********************/


  Uart_Init();//串口初始化,波特率为9600
ms_delay(1000) ;
    WIFI_Init(); //wifi初始化


/****************************************************/


/**********************主循环************************/

for(;;)
{
ms_delay(10) ;
if(Recive_state == 1)
{
ES=0;  //清空接收标志位 
if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//接收到的字符串形式为+IPD,x,x:y
            {
                if((Recive_table[3]=='D')&&(Recive_table[6]==','))
                {   
                if(Recive_table[9]=='0')
P1 = 0;
if(Recive_table[9]=='1')
P1 = 0xff;
}
}
memset(Recive_table,'\0',20);
Recive_state = 0;
ES=1;  //打开接收标志位
}
}


/****************************************************/
  
}




/******************************************************************
数: void Uart_Interrupt() interrupt 4
能: 串口中断函数,将收到的字符存到Recive_table[]数组中
数:
返回值: 无
*******************************************************************/


void Uart_Interrupt() interrupt 4         
{   
static char i=0;  //因为是一位一位接收,所以用static
if(RI==1)    
{  
ES = 0;
RI=0;         
Recive_table[i]=SBUF;        
i++; 
if((Recive_table[i-1] == '\n'))
{
Recive_table[i]='\0';
i=0; 
Recive_state = 1;
}
ES = 1;      
}
else
TI = 0;     
 } 


这是usart.c

#include "usart.h"


/******************************************************************
数: void Uart_Init(void)
能: 串口初始化,波特率为9600(这个不会,上网百度)
数:
返回值: 无
*******************************************************************/
void Uart_Init(void)
{  


TMOD=0x20;
TH1=0xfD;
TL1=0xfD;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;


}


这是wifi.c

#include <stdio.h>
#include "wifi.h"


/******************************************************************
数: void ms_delay(int t)
能: 毫秒级延时
数:
返回值: 无
*******************************************************************/
void ms_delay(int t) 
{  
int i,j; 
  for(i=t;i>0;i--)   
for(j=110;j>0;j--); 
}


/******************************************************************
数: void LED(void)
能: 发送完命令后显示用的函数
数:
返回值: 无
*******************************************************************/
void LED(void)
{


P1 = 0;
ms_delay(100);
P1 = 0xff;
ms_delay(100);


}


/******************************************************************
数: void WIFI_Init(void)
能: wifi初始化(名字:esp8266;密码:1234567890)
数:
返回值: 无
*******************************************************************/
void WIFI_Init(void)
{


ES = 0;
TI = 1;


printf("AT+RST\r\n");
LED();
ms_delay(1000) ;


printf("AT+CWMODE=3\r\n");
LED();
ms_delay(1000) ;


printf("AT+CIPMUX=1\r\n");
LED(); 
ms_delay(1000) ;


printf("AT+CIPSERVER=1,8080\r\n");
LED();
ms_delay(1000) ;


while(!TI);
TI = 0;
ES = 1;


}

3、最后成品,



esp8266通过51单片机的串口(P3.0—R,P3.1—T)连接,电脑或是手机用软件连接,模式选择TCPClient,IP填192.168.4.1(一般都是这个,不是的话自己查看一下),端口是8080(因为是我自己设置的)。点击连接就能连上了(这时候wifi要连上,别忘了,我有好几次忘连了,怎么连都连不上)。我的目的很简单,发送0,led亮,发送1,led灭。

这是最后成品样子,但是我这里程序上有个bug,就是第一次发送的数据,要在第二次发送数据的时候才能处理(第一次发送0,不亮,在发送1,就亮了,在发送0,灭了)。

做到这里不想做了,所以希望谁知道是怎么回事的,告诉我一声,感激不尽,我QQ是516912066,大家交流一下!!!!

关于窗口的操作详谈

javaduke原创于www.dukejava.com----java的网上家园关于窗口的操作详谈 娇娃支持弹出式窗口,不过在应用中注意下面几个要点:1)窗口的定义:final Frame useri...
  • javaduke
  • javaduke
  • 2000-11-04 07:27:00
  • 608

使用ESP8266和51单片机的智能开关/智能灯

本文章所介绍的智能开关为在局域网内实现手机开关的简单方法,功能能简单,仅供参考。 如果对ESP8266模块不了解,请阅读以下两篇文章: ESP8266与电脑连接 ESP8266基础功能调试一、软件...
  • xiaohupashu
  • xiaohupashu
  • 2017-03-29 11:04:54
  • 9378

51单片机连接ESP8266串口WiFi模块

烧录固件引脚连接 WiFi 51单片机 VCC 3.3V (5V连接时间过长可能会烧坏WiFi模块) GND GND CH_PD 3.3V GPIO0 GND ...
  • pop1586082213
  • pop1586082213
  • 2017-01-18 15:53:57
  • 22430

关于51单片机+ESP8266

前言:这个题目是我在单片机课程设计《基于ESP8266的物联电梯系统》中用到的,其实本质上就是实现了单片机对esp8266进行初始化,再将手机连上esp8266的WiFi,然后再通过手机端发送指令,e...
  • sherry_qin
  • sherry_qin
  • 2016-03-02 11:52:44
  • 24792

ESP8266模块51单片机测试程序

  • 2016年03月11日 16:13
  • 82KB
  • 下载

ESP8266 AT指令设置及51单片机的控制

ESP8266 AT指令设置及51单片机的控制 (献给正在学习路上的兄弟姐妹们)         对于ESP8266模块好多刚接触的朋友们第一感觉就是价格的确很便宜,然而初次接触它时你也许会对它束...
  • yang140698
  • yang140698
  • 2017-06-15 16:01:44
  • 6222

ESP8266模块使用完整教程

在我入门ESP8266小黄板的过程中,过程是艰难的,因为网络上的资料太多太乱,官网上的资料不算太完备,而在技术交流群里面的就更乱了,所以想按自己学习所总结到的经验来分享给大家。资源链接:http://...
  • sherry_qin
  • sherry_qin
  • 2016-03-16 11:29:36
  • 59827

51单片机+ESP8266-01WIFI模块实现数据传输

前期准备ESP8266芯片AT指令集工具 51单片机开发板 ESP8266WIFI模块 USB转TTL 22.1184MHZ的晶振 串口调试助手 网络串口调试助手 ESP8266接线 管脚号 ...
  • qq_36278071
  • qq_36278071
  • 2017-09-17 21:51:37
  • 2136

使用BASIC语言控制ESP8266

请不要误解我的意思,因为目前为止,我们还没有一个可以完全正常工作的解释器,但是,多亏了 Michael Molinari,今天早上我的 ESP8266WIFI Facebook 网页上出现了一个链接,...
  • free0loop
  • free0loop
  • 2015-09-17 17:19:40
  • 897

ESP8266-SDK编译环境安装包的安装、编译与烧录教程【windows】

SDK编译环境安装包的安装、编译与烧录教程 【支持最新版AT、IOT及LUA源码编译,附源码】 1、安装包Fans_ESP8266_SDK_Make.exe 下载地址:http://...
  • u013636122
  • u013636122
  • 2016-02-03 16:41:33
  • 8149
收藏助手
不良信息举报
您举报文章:制作esp8266+c51,点亮单片机上的led小灯
举报原因:
原因补充:

(最多只允许输入30个字)