找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 17348|回复: 39
收起左侧

ESP8266-01使用手机发送信息给Wifi模块控制51单片机点亮LED灯蜂鸣器(软件+app)

  [复制链接]
ID:551942 发表于 2019-5-31 17:47 | 显示全部楼层 |阅读模式
一、准备

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


二、串口调试ESP


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

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



IMG_20190531_170220.jpg esp8266-01串口调试图.png



  接好后,电源指示灯亮,串口的驱动玩单片机的应该都装好了,打开串口调试软件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,烧录完再接上,不然会发现烧录软件没反应)

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

截屏_20190531_174321.jpg 截屏_20190531_174328.jpg

单片机源程序如下:

  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, 下载次数: 672)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:390243 发表于 2019-6-2 00:39 | 显示全部楼层
请问大佬有没有遇到过,在利用ESP8266收发送数据的时候,只要程序从中断接受完数据,就从main函数的开头执行,而不从进入中断的地方开始?
回复

使用道具 举报

ID:531751 发表于 2019-6-6 16:13 | 显示全部楼层
请问这个app点连接/监听,怎么知道连上了呢?
回复

使用道具 举报

ID:531751 发表于 2019-6-6 23:34 | 显示全部楼层
那个问题解决了!但是我发0,单片机没反应是怎么回事呀?
回复

使用道具 举报

ID:631878 发表于 2019-11-14 10:40 | 显示全部楼层
下载了,文件夹里没有程序,后来在网页上找到了
回复

使用道具 举报

ID:673765 发表于 2019-12-26 21:22 | 显示全部楼层
请问1、大佬有没有ESP8266收发数据掉包的情况,不知是模块的问题还是程序写的有问题,有没有大佬知道怎么回事呀。2、收发数据还没有接收就接收成功了
回复

使用道具 举报

ID:758478 发表于 2020-5-22 16:36 | 显示全部楼层
围观一下,看看效果
回复

使用道具 举报

ID:758478 发表于 2020-5-22 16:36 | 显示全部楼层
围观一下,看看效果
回复

使用道具 举报

ID:761405 发表于 2020-5-26 10:39 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:632112 发表于 2020-5-27 11:13 | 显示全部楼层
值得学习学习,谢谢分享
回复

使用道具 举报

ID:69408 发表于 2020-6-3 13:13 | 显示全部楼层
这个经过测试单片机这边的程序可以使用的,就是用APP控制时不知道怎么回事不太灵敏,有时候要点击APP上的开或者关按键多次才能够正确的执行亮灭LED的了
回复

使用道具 举报

ID:787683 发表于 2020-6-23 14:42 | 显示全部楼层
看一下效果
回复

使用道具 举报

ID:787683 发表于 2020-6-23 14:43 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:430492 发表于 2020-6-24 11:15 | 显示全部楼层
这个不错的思路!家电都可以手机WIFI控制了!
回复

使用道具 举报

ID:724172 发表于 2020-6-29 10:54 | 显示全部楼层
真不错的思路
回复

使用道具 举报

ID:56960 发表于 2020-7-10 14:14 | 显示全部楼层
真不错的思路,路过顶一下!
回复

使用道具 举报

ID:65237 发表于 2020-7-14 21:39 | 显示全部楼层
谢谢分享 下载有空做一个
回复

使用道具 举报

ID:702127 发表于 2020-7-25 14:02 | 显示全部楼层
请问楼主,苹果手机可以吗?我按照您的教程一步一步来,8266通过USB转串口连接到电脑后,苹果手机可以正常连接wifi与串口,但是8266连接到单片机后,苹果手机只能连接wifi,连接串口时显示连接失败。
回复

使用道具 举报

ID:65237 发表于 2020-7-27 21:05 | 显示全部楼层
楼主请教下 你这是通过路 手机APP 路邮器 8266 单片机控制电路 是吗  其中路邮器那块怎么设置 能讲一下吗
回复

使用道具 举报

ID:65237 发表于 2020-7-29 16:52 来自手机 | 显示全部楼层
denminshen 发表于 2020-6-3 13:13
这个经过测试单片机这边的程序可以使用的,就是用APP控制时不知道怎么回事不太灵敏,有时候要点击APP上的开 ...

你好 你做的是直接app和esp8266直接连吗?中间有通过路由器没 还有app上面二项是怎么设置的 求指点啊 搞了好久app里二项tcp那里
回复

使用道具 举报

ID:65237 发表于 2020-7-30 17:16 来自手机 | 显示全部楼层
ziziziziz 发表于 2019-6-6 16:13
请问这个app点连接/监听,怎么知道连上了呢?

你是看那里说连上了
回复

使用道具 举报

ID:495323 发表于 2020-10-18 11:11 | 显示全部楼层
软件:TCP连接。楼主做的和我相同可以参考我的
,
回复

使用道具 举报

ID:810999 发表于 2020-10-23 08:59 | 显示全部楼层
非常不错,学习了。
回复

使用道具 举报

ID:881400 发表于 2021-1-29 14:55 | 显示全部楼层
用app控制不太灵敏,需要发送好几次数据才能打开或关闭,这是怎么回事呀?
回复

使用道具 举报

ID:545457 发表于 2021-1-29 17:29 | 显示全部楼层
打扰,请问为什么下载后没有程序?
回复

使用道具 举报

ID:545457 发表于 2021-1-29 17:36 | 显示全部楼层
GitHub 发表于 2019-11-14 10:40
下载了,文件夹里没有程序

我也是这个情况,不知道您解决了吗
回复

使用道具 举报

ID:915899 发表于 2021-5-5 15:30 | 显示全部楼层
没有单片机程序在里面啊
回复

使用道具 举报

ID:328014 发表于 2021-5-5 17:30 | 显示全部楼层
929260 发表于 2021-5-5 15:30
没有单片机程序在里面啊

单片机C语言程序有198行,不用下载 直接在网页上复制即可
回复

使用道具 举报

ID:430492 发表于 2021-5-5 19:59 | 显示全部楼层
没有APP的源程序,只有APK。
回复

使用道具 举报

ID:579174 发表于 2021-5-11 19:36 | 显示全部楼层
打卡,以后好找到!感谢分享!
回复

使用道具 举报

ID:409166 发表于 2021-5-13 21:16 | 显示全部楼层
感谢,正需要呢,下来学习下。
回复

使用道具 举报

ID:197229 发表于 2021-5-15 05:45 | 显示全部楼层
下载了app文件压缩档 7z格式要用什么软件打开?那位朋友能发给我一份解压好的啊?感谢先
回复

使用道具 举报

ID:403144 发表于 2021-5-17 18:16 | 显示全部楼层
这个压缩包里面怎么没有51单片机的程序啊

回复

使用道具 举报

ID:61192 发表于 2021-6-10 21:07 | 显示全部楼层
darkside 发表于 2021-5-17 18:16
这个压缩包里面怎么没有51单片机的程序啊

看28#已经回答了
回复

使用道具 举报

ID:920914 发表于 2021-6-14 15:55 | 显示全部楼层
多谢大佬分享技术
回复

使用道具 举报

ID:941748 发表于 2021-6-21 18:06 | 显示全部楼层
wifi模块?
回复

使用道具 举报

ID:624685 发表于 2021-6-21 18:54 | 显示全部楼层
先收藏,刚刚开始学习,后边一定用的到。谢谢
回复

使用道具 举报

ID:1010593 发表于 2022-3-15 21:31 | 显示全部楼层
楼主很详细的介绍。多谢了
回复

使用道具 举报

ID:974905 发表于 2022-7-6 00:15 | 显示全部楼层
ESP8266 的 默认 baud 不是115200吗?  用9600 可以调试?
回复

使用道具 举报

ID:36322 发表于 2023-2-16 23:15 | 显示全部楼层
解决了入门的第一步,终于有反应了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表