标题: ESP8266-01使用手机发送信息给Wifi模块控制51单片机点亮LED灯蜂鸣器(软件+app) [打印本页]

作者: admnesia    时间: 2019-5-31 17:47
标题: ESP8266-01使用手机发送信息给Wifi模块控制51单片机点亮LED灯蜂鸣器(软件+app)
一、准备

之前在网上找了很多关于ESP8266模块和单片机互联的资料,但是看完都一头雾水,直到向买的店要了实例代码后,才完成这一功能。对于我这样的新手,单单看模块说明书就写出单片机中的相关代码不要太难。本帖仅用于临时使用却找不到方法,而不是探究原理的爱好者们。需要准备的模块有:ESP8266-01模块、USB转TTL模块、单片机开发板或单片机学习板、LED灯、蜂鸣器、杜邦线,其他的可以自己加。


二、串口调试ESP


   首先要用ESP8266模块和USB转TTL模块进行串口调试,看你的wifi模块是不是正常工作的。具体教程百度很多,我就不过多说明了。但是记得串口调试时候要把ESP8266的波特率改为9600,因为51单片机最大也就9600,而且试验证明用单片机发送指令去修改波特率会有问题,保险点还是串口调试就修改好。除了波特率,其他的可以在单片机程序中设置。

  
  上图是ESP8266-01的接脚说明,在官方给的资料里有。串口调试时候接线方法为:CH_PD和VCC接3.3伏接口(模块工作电压3.3V,过高容易烧坏),esp的TXD接口接转换模块的RXD,esp的RXD接TXD,也就是读接写,写接读。不要接反。GND接GND,串口调试不是烧录,不用接烧录用的口。而且自己烧录不熟练容易成板砖。







  接好后,电源指示灯亮,串口的驱动玩单片机的应该都装好了,打开串口调试软件sscom42,sscom其他版本也差不多。如果串口没接好或者驱动不正常,软件打开会提示无法找到串口,找到就正常进入。然后点击软件的打开串口按钮,在“字符串输入框”输入:“AT”发送,返回“OK”,正常。然后输入“AT+RST”发送,重启。其他指令可以百度AT指令查看,或者在我的附件里有ESP8266的官方文件。
  测试后一定要记得把波特率在串口调试中修改了,发送“AT+CIOBAUD=9600”,返回OK后修改波特率成功。



三、接入单片机


  接入单片机的接线和串口大致一样。CH_PD和VCC接3.3V,CH_PD最好先串联一个10k电阻再接电源防止烧坏,如果单片机工作电压是5V,最好再接一个三端稳压降压模块,把5V输入,输出3.3V给wifi模块。在STC89C52RC单片机中,P3.0是RXD口,接Wifi模块的TXD口。P3.1是TXD口,接Wifi模块RXD口。记住度对写,写对读。(烧录单片机程序的时候要把wifi模块接的P3.0和P3.1接线拔了,因为烧录用的模块接口也是P3.0和P3.1,烧录完再接上,不然会发现烧录软件没反应)

  
  接好了后,把LED灯和蜂鸣器也接好就行了。下面是程序。其中有几个点注意,接收到的数据是字符串,不能直接进行整数的判断,要转换或者判断字符再赋值整数。代码中可以设置端口号,这里是8080,。IP地址我没有改,是官方默认的192.168.4.1。下载一个手机的串口调试助手,你也可以自己写一个,用E4A中文编码很适合初学者。选择TCP调试。连接小车的wifi,(wifi名字一般带ESP8266,也可以串口调试时候自己改)然后输入IP和端口,连接,发送字符“0”、“1”、“2”进行测试。



单片机源程序如下:

  1. #include <reg52.h>
  2. #include <string.h>
  3. #include <stdio.h>

  4. sbit P11_LED =P1^1; //自己定义你的LED接口
  5. sbit BUZZ = P2^3; //自己定义你的蜂鸣器接口


  6. char Recive_table[20]="";  //接收缓冲,最大20个字节
  7. char Recive_state = 0;   //接收完成标志
  8. void WIFI_Init(void);
  9. void Uart_Init(void);
  10. void ms_delay(int t);
  11. void LED(void);

  12. int main (void)
  13. {
  14.         /********************功能初始化***********************/
  15.         Uart_Init();//串口初始化,波特率为9600
  16.         ms_delay(1000) ;
  17.         WIFI_Init(); //wifi初始化
  18.         /****************************************************/
  19.         /**********************主循环************************/
  20.         while(1)
  21.         {
  22.                 ms_delay(10) ;
  23.                 if(Recive_state == 1)
  24.                 {
  25.                         ES=0;  //清空接收标志位
  26.                         if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//接收到的字符串形式为+IPD,x,x:y
  27.                         {
  28.                             if((Recive_table[3]=='D')&&(Recive_table[6]==','))
  29.                             {   
  30.                                 
  31.                                     if(Recive_table[9]=='0')  //如果你发送的是“0”
  32.                                     {
  33.                                                 P11_LED = 0;              //LED亮
  34.                                             ms_delay (10);
  35.                             BUZZ=0;               //蜂鸣器响一声
  36.                                         ms_delay (10);
  37.                             BUZZ=1;
  38.                                                 ms_delay (30);
  39.                                                 P11_LED = 1;              //LED灭
  40.                                     }
  41.                                        
  42.                                         if(Recive_table[9]=='1')  //如果你发送的是“1”
  43.                                     {
  44.                                                 P11_LED = 0;              //LED亮
  45.                                             ms_delay (10);
  46.                             BUZZ=0;               //蜂鸣器响两声
  47.                                         ms_delay (10);
  48.                             BUZZ=1;
  49.                                                 ms_delay (10);
  50.                             BUZZ=0;
  51.                                         ms_delay (10);
  52.                             BUZZ=1;
  53.                                                 ms_delay (30);
  54.                                                 P11_LED = 1;              //LED灭
  55.                                     }
  56.                                        
  57.                                         if(Recive_table[9]=='2')  //如果你发送的是“2”
  58.                                     {
  59.                                                 P11_LED = 0;              //LED亮
  60.                                             ms_delay (10);
  61.                             BUZZ=0;               //蜂鸣器响三声
  62.                                         ms_delay (10);
  63.                             BUZZ=1;
  64.                                                 ms_delay (10);
  65.                             BUZZ=0;
  66.                                         ms_delay (10);
  67.                             BUZZ=1;
  68.                                                 ms_delay (10);
  69.                             BUZZ=0;
  70.                                         ms_delay (10);
  71.                             BUZZ=1;
  72.                                                 ms_delay (30);
  73.                                                 P11_LED = 1;              //LED灭
  74.                                     }
  75.                                        

  76.                                 }
  77.                                 
  78.                                 
  79.                                        
  80.                                        
  81.                         }
  82.                         memset(Recive_table,'\0',20);
  83.                         Recive_state = 0;
  84.                         ES=1;  //打开接收标志位
  85.                 }
  86.         }
  87.         /****************************************************/
  88.          
  89. }

  90. /******************************************************************
  91. 函 数: void Uart_Interrupt() interrupt 4
  92. 功 能: 串口中断函数,将收到的字符存到Recive_table[]数组中
  93. 参 数: 无
  94. 返回值: 无
  95. *******************************************************************/
  96. void Uart_Interrupt() interrupt 4         
  97. {   
  98.         static char i=0;  //因为是一位一位接收,所以用static
  99.         if(RI==1)   
  100.         {  
  101.                 ES = 0;
  102.                 RI=0;         
  103.                 Recive_table[i]=SBUF;        
  104.                 i++;
  105.                 if((Recive_table[i-1] == '\n'))
  106.                 {
  107.                         Recive_table[i]='\0';
  108.                         i=0;
  109.                         Recive_state = 1;
  110.                 }
  111.                 ES = 1;      
  112.         }
  113.         else
  114.         TI = 0;     
  115. }

  116. /******************************************************************
  117. 函 数: void Uart_Init(void)
  118. 功 能: 串口初始化,波特率为9600(这个不会,上网百度)
  119. 参 数: 无
  120. 返回值: 无
  121. *******************************************************************/
  122. void Uart_Init(void)
  123. {  
  124.         TMOD=0x20;
  125.         TH1=0xfD;
  126.         TL1=0xfD;
  127.         TR1=1;
  128.         REN=1;
  129.         SM0=0;
  130.         SM1=1;
  131.         EA=1;
  132.         ES=1;
  133. }

  134. /******************************************************************
  135. 函 数: void ms_delay(int t)
  136. 功 能: 毫秒级延时
  137. 参 数: 无
  138. 返回值: 无
  139. *******************************************************************/
  140. void ms_delay(int t)
  141. {  
  142.         int i,j;
  143.         for(i=t;i>0;i--)   
  144.                 for(j=110;j>0;j--);
  145. }

  146. /******************************************************************
  147. 函 数: void LED(void)
  148. 功 能: 发送完命令后显示用的函数
  149. 参 数: 无
  150. 返回值: 无
  151. *******************************************************************/
  152. void LED(void)
  153. {
  154.         P2 = 0;
  155.         ms_delay(100);
  156.         P2 = 0xff;
  157.         ms_delay(100);
  158. }


  159. /******************************************************************
  160. 函 数: void WIFI_Init(void)
  161. 功 能: wifi初始化
  162. 参 数: 无
  163. 返回值: 无
  164. *******************************************************************/
  165. void WIFI_Init(void)
  166. {
  167.         ES = 0;
  168.         TI = 1;
  169.         printf("AT+RST\r\n");
  170.         LED();
  171.         ms_delay(1000) ;
  172.         printf("AT+CWMODE=3\r\n");
  173.         LED();
  174.         ms_delay(1000) ;
  175.         printf("AT+CIPMUX=1\r\n");
  176.         LED();
  177.         ms_delay(1000) ;
  178.         printf("AT+CIPSERVER=1,8080\r\n");      // 设置端口号8080      
  179.         LED();
  180.         ms_delay(1000) ;
  181.     printf("AT+CIOBAUD=9600\r\n");   // 设置与单片机一致的波特率     
  182.         LED();
  183.         ms_delay(1000) ;
  184.         while(!TI);
  185.         TI = 0;
  186.         ES = 1;

复制代码
AT指令集内容太多无法直接贴出来,只好放在附件里面了:
ESP8266模块AT指令+ 串口调试软件.7z (18.06 MB, 下载次数: 694)


作者: LOGLOG6    时间: 2019-6-2 00:39
请问大佬有没有遇到过,在利用ESP8266收发送数据的时候,只要程序从中断接受完数据,就从main函数的开头执行,而不从进入中断的地方开始?
作者: ziziziziz    时间: 2019-6-6 16:13
请问这个app点连接/监听,怎么知道连上了呢?
作者: ziziziziz    时间: 2019-6-6 23:34
那个问题解决了!但是我发0,单片机没反应是怎么回事呀?
作者: GitHub    时间: 2019-11-14 10:40
下载了,文件夹里没有程序,后来在网页上找到了
作者: DFFFGH    时间: 2019-12-26 21:22
请问1、大佬有没有ESP8266收发数据掉包的情况,不知是模块的问题还是程序写的有问题,有没有大佬知道怎么回事呀。2、收发数据还没有接收就接收成功了
作者: 2795825624    时间: 2020-5-22 16:36
围观一下,看看效果
作者: 2795825624    时间: 2020-5-22 16:36
围观一下,看看效果
作者: jack9168    时间: 2020-5-26 10:39
谢谢分享
作者: ycs89554171    时间: 2020-5-27 11:13
值得学习学习,谢谢分享
作者: denminshen    时间: 2020-6-3 13:13
这个经过测试单片机这边的程序可以使用的,就是用APP控制时不知道怎么回事不太灵敏,有时候要点击APP上的开或者关按键多次才能够正确的执行亮灭LED的了
作者: 杨宫梓    时间: 2020-6-23 14:42
看一下效果
作者: 杨宫梓    时间: 2020-6-23 14:43
感谢分享
作者: cooleaf    时间: 2020-6-24 11:15
这个不错的思路!家电都可以手机WIFI控制了!
作者: dilongking    时间: 2020-6-29 10:54
真不错的思路
作者: 沧海一粒    时间: 2020-7-10 14:14
真不错的思路,路过顶一下!
作者: 阿飞7812    时间: 2020-7-14 21:39
谢谢分享 下载有空做一个
作者: ii11nnocent    时间: 2020-7-25 14:02
请问楼主,苹果手机可以吗?我按照您的教程一步一步来,8266通过USB转串口连接到电脑后,苹果手机可以正常连接wifi与串口,但是8266连接到单片机后,苹果手机只能连接wifi,连接串口时显示连接失败。
作者: 阿飞7812    时间: 2020-7-27 21:05
楼主请教下 你这是通过路 手机APP 路邮器 8266 单片机控制电路 是吗  其中路邮器那块怎么设置 能讲一下吗
作者: 阿飞7812    时间: 2020-7-29 16:52
denminshen 发表于 2020-6-3 13:13
这个经过测试单片机这边的程序可以使用的,就是用APP控制时不知道怎么回事不太灵敏,有时候要点击APP上的开 ...

你好 你做的是直接app和esp8266直接连吗?中间有通过路由器没 还有app上面二项是怎么设置的 求指点啊 搞了好久app里二项tcp那里
作者: 阿飞7812    时间: 2020-7-30 17:16
ziziziziz 发表于 2019-6-6 16:13
请问这个app点连接/监听,怎么知道连上了呢?

你是看那里说连上了
作者: 有心插花花木兰    时间: 2020-10-18 11:11
软件:TCP连接。楼主做的和我相同可以参考我的
,
作者: xxw369    时间: 2020-10-23 08:59
非常不错,学习了。
作者: 保尔柯察金    时间: 2021-1-29 14:55
用app控制不太灵敏,需要发送好几次数据才能打开或关闭,这是怎么回事呀?
作者: 玩卟欺    时间: 2021-1-29 17:29
打扰,请问为什么下载后没有程序?
作者: 玩卟欺    时间: 2021-1-29 17:36
GitHub 发表于 2019-11-14 10:40
下载了,文件夹里没有程序

我也是这个情况,不知道您解决了吗
作者: 929260    时间: 2021-5-5 15:30
没有单片机程序在里面啊

作者: 51hei团团    时间: 2021-5-5 17:30
929260 发表于 2021-5-5 15:30
没有单片机程序在里面啊

单片机C语言程序有198行,不用下载 直接在网页上复制即可
作者: cooleaf    时间: 2021-5-5 19:59
没有APP的源程序,只有APK。
作者: XZHI2003    时间: 2021-5-11 19:36
打卡,以后好找到!感谢分享!
作者: canghaiyisuMF    时间: 2021-5-13 21:16
感谢,正需要呢,下来学习下。
作者: bomb1999    时间: 2021-5-15 05:45
下载了app文件压缩档 7z格式要用什么软件打开?那位朋友能发给我一份解压好的啊?感谢先
作者: darkside    时间: 2021-5-17 18:16
这个压缩包里面怎么没有51单片机的程序啊


作者: ouyang    时间: 2021-6-10 21:07
darkside 发表于 2021-5-17 18:16
这个压缩包里面怎么没有51单片机的程序啊

看28#已经回答了
作者: 1606786084    时间: 2021-6-14 15:55
多谢大佬分享技术

作者: tvs    时间: 2021-6-21 18:06
wifi模块?
作者: pq1972    时间: 2021-6-21 18:54
先收藏,刚刚开始学习,后边一定用的到。谢谢
作者: hhy1030    时间: 2022-3-15 21:31
楼主很详细的介绍。多谢了

作者: charlyking    时间: 2022-7-6 00:15
ESP8266 的 默认 baud 不是115200吗?  用9600 可以调试?
作者: zxcscm    时间: 2023-2-16 23:15
解决了入门的第一步,终于有反应了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1