标题: 用51单片机和esp8266实现通过手机app控制单片机小灯 [打印本页]

作者: Floray002    时间: 2017-11-30 18:49
标题: 用51单片机和esp8266实现通过手机app控制单片机小灯
用51单片机和esp8266实现通过手机app控制单片机小灯,也可以控制其他外设,可以自行添加。附件为源程序,app可使用附件里面的安卓手机测试app或者ios系统可以去apple store下载netassist使用。

设计目的:
给所有客户提供一个标准全功能而又经济适用的体验平台!客户拿到手直接测试,而
没有任何争议的环节。
本测试板能完成什么:
拥有本测试板,你可以无需任何其他开发工具,对ESP8266 模块进行AT 类应用与SDK类应用开发。
简单的演示功能:用安卓手机做的一个控制界面,用手机WIFI 和板载WIFI 进行数据交互,让手机控制 板载WIFI 输出数据,板载CPU 收到数据后控制板载LED,和蜂鸣器的动作!当然你还可以进过串口调试工具,直接对板载WIFI 模块进行手动测试!
测试版是一块51/AVR开发板,MCU可更换,板上资源丰富。既可以学习WiFi又能学习单片机,一举两得
下面是收到测试版后的简单说明:
1. 默认收到的开发板内有开发板测试程序,使用WiFi功能时,需要用户把程序烧写到单片机(程序烧写见“KR-51程序烧写说明”)。
2.烧写完程后,连接蓝牙模块,如下图;
上图为收到开发板的跳线的跳线帽位置,只需插USB供电,或者插上独立供电电源供电(独立供电电源不小于5V/600mA)。上电后如果电源灯不亮,请尝试多次开关(左上角开关)。正常上电后可看到模块蓝灯在间歇性闪烁,这是MCU在配置模块作为服务端,在灯无闪烁后,可以在手机上搜索到ESP8266的WiFi名称,安卓手机设置里可以看到这个WIFI,如下图
连上这个WIFI,打开手机端APP(在测试版程序文件夹里),等待模块蓝灯停止闪烁,直接点连接,可以控制LED,蜂鸣器。
上图:(注:此跳线用跳线帽短接3,5 和4,6,代表USB_UART和模块的串口直连,)

查看波特率方法:模块:打开03_调试工具里的“SSCOM”串口调试助手,如果这样显示 代表模块工作在115200波特率下,如果不是,可调节波特率(一般是115200或者9600),直到输出正常字符。这时可通过AT+CIOBAUD=9600,改为9600的波特率. (更多指令请参照指令说明设置)
恢复连接,插上模块,重新连接

单片机源程序如下:
  1. /**************************************************************************************
  2. *功能:Wifi模块测试                                                                                                               *
  3. *说明:手机安装测试APP,手机连接WiFi模块,控制开发板上的LED、蜂鸣器                                          *
  4. *硬件连接:在J10处插上跳线帽  1,3用跳线短路 2,4用跳线短路                                                          *
  5. *作者:研发中心                                                                                                                                                  *
  6. ***************************************************************************************/
  7. #include <REGX52.H>
  8. #include<intrins.h>

  9. typedef unsigned int uint;
  10. typedef unsigned char uchar;
  11. /**串口数据使用**/
  12. #define        RX1_Lenth                32                        //串口接收缓冲长度

  13. uchar        idata RX1_Buffer[RX1_Lenth];        //接收缓冲
  14. uchar        TX1_Cnt;        //发送计数
  15. uchar        RX1_Cnt;        //接收计数
  16. bit                B_TX1_Busy;        //发送忙标志

  17. /*************        端口引脚定义        **************/
  18. sbit LED1=P1^0;//LED1
  19. sbit LED2=P1^1;//LED2
  20. sbit LED3=P1^2;//LED3
  21. sbit DK1=P1^3;//继电器
  22. sbit BEEP=P2^5;//蜂鸣器        

  23. /**wifi模块命令**/
  24. unsigned char RST[8]="AT+RST\r\n";
  25. unsigned char LYMS[13]="AT+CWMODE=2\r\n";
  26. //unsigned char SZLY[38]="AT+CWSAP='ESP8266','0123456789',11,0\r\n";

  27. unsigned char SZDLJ[13]="AT+CIPMUX=1\r\n";
  28. unsigned char KQFU[21]="AT+CIPSERVER=1,5000\r\n";
  29. unsigned char FSSJ[13]="AT+CIPSEND=\r\n";//AT+CIPSEND= 发送数据         


  30. void Delay2(unsigned long cnt)
  31. {
  32.         long i;
  33.          for(i=0;i<cnt*100;i++);
  34. }
  35. void Delay3(unsigned int N)
  36. {
  37.         int i;
  38.         for(i=0;i<N*10;i++);
  39. }



  40. /********************************************************************
  41. * 名称 : Uart_Init()
  42. * 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
  43. * 输入 : 无
  44. * 输出 : 无
  45. ***********************************************************************/
  46. void Uart_Init(void)
  47. {
  48.      TMOD = 0x20;   //定时器工作在定时器1的方式2
  49.      PCON = 0x00;   //不倍频
  50.      SCON = 0x50;        //串口工作在方式1,并且启动串行接收        
  51.      TH1 = 0xFd;    //设置波特率 9600
  52.      TL1 = 0xFd;
  53.      TR1 = 1;                //启动定时器1
  54.          ES = 1;                //开串口中断
  55.          EA = 1;                //开总中断
  56.          RX1_Cnt=0;                //接受计数清零
  57.          TX1_Cnt = 0;        //发送计数清零
  58.          B_TX1_Busy = 0;//初始化判忙标志位               
  59. }
  60. /********************************************************************
  61. * 名称 : Main()
  62. * 功能 : 主函数
  63. * 输入 : 无
  64. * 输出 : 无
  65. ***********************************************************************/
  66. void main(void)
  67. {
  68.         char i=0;

  69.         Uart_Init();

  70.         Delay3(2000);
  71.   /******************设置WiFi模块**********************************************/
  72.         for(i=0;i<8;i++)//AT+RST 重启
  73.         {
  74.                 SBUF=RST[i];Delay3(5);
  75.         }
  76.         Delay3(5000);
  77.         for(i=0;i<13;i++)//AT+CWMODE=2 设置成路由模式
  78.         {
  79.                 SBUF=LYMS[i];Delay3(5);
  80.         }
  81.         /*Delay3(1000);
  82.         for(i=0;i<38;i++)//AT+CWSAP="ESP8266","0123456789",11,0 设置路由
  83.         {
  84.                 SBUF=SZLY[i];Delay3(5);
  85.         }*/
  86.         Delay3(3000);
  87.         
  88.         for(i=0;i<13;i++)//AT+CIPMUX=1 设置成多连接
  89.         {
  90.                 SBUF=SZDLJ[i];Delay3(5);
  91.         }
  92.         Delay3(2000);
  93.         for(i=0;i<21;i++)//AT+CIPSERVER=1,5000 开启TCP服务端口
  94.         {
  95.                 SBUF=KQFU[i];Delay3(5);
  96.         }
  97.         Delay3(2000);
  98.         while (1)
  99.         {
  100.         
  101.         }
  102. }

  103. /********************************************************************
  104. * 名称 : Uart_Int()
  105. * 功能 : 串口中断子函数
  106. * 输入 : 无
  107. * 输出 : 无
  108. ***********************************************************************/
  109. void UART1_int (void) interrupt 4
  110. {
  111. //        char i,a,b,c;
  112.         if(RI)
  113.         {
  114.                 RI = 0;
  115.                 RX1_Buffer[RX1_Cnt] = SBUF;                //保存一个字节
  116.                 if(RX1_Buffer[0]==0x45)
  117.                 {
  118.                         RX1_Cnt++;
  119.                 }
  120.                 else
  121.                 {
  122.                         RX1_Cnt=0;
  123.                 }
  124.                 if(RX1_Cnt>=10)
  125.                 {
  126.                         if(RX1_Buffer[0]==0x45&&RX1_Buffer[1]==0x53&&RX1_Buffer[2]==0x50)
  127.                         {
  128.                                 if(RX1_Buffer[4]==0x4C&&RX1_Buffer[5]==0x45&&RX1_Buffer[6]==0x44)//判断LED
  129.                                 {
  130.                                         if(RX1_Buffer[7]==0x31)//判断LED1
  131.                                         {
  132.                                                 if(RX1_Buffer[3]==0x4B)//判断开
  133.                                                 {
  134.                                                         LED1=0;
  135.                                                 }
  136.                                                 if(RX1_Buffer[3]==0x47)//判断关
  137.                                                 {
  138.                                                         LED1=1;
  139.                                                 }
  140.                                         }
  141.                                         if(RX1_Buffer[7]==0x32)//判断LED2
  142.                                         {
  143.                                                 if(RX1_Buffer[3]==0x4B)//判断开
  144.                                                 {
  145.                                                         LED2=0;
  146.                                                 }
  147.                                                 if(RX1_Buffer[3]==0x47)//判断关
  148.                                                 {
  149.                                                         LED2=1;
  150.                                                 }
  151.                                         }
  152.                                         if(RX1_Buffer[7]==0x33)//判断LED3
  153.                                         {
  154.                                                 if(RX1_Buffer[3]==0x4B)//判断开
  155.                                                 {
  156.                                                         LED3=0;
  157.                                                 }
  158.                                                 if(RX1_Buffer[3]==0x47)//判断关
  159.                                                 {
  160.                                                         LED3=1;
  161.                                                 }
  162.                                         }
  163.                                 }
  164.                                 if(RX1_Buffer[4]==0x4A&&RX1_Buffer[5]==0x44&&RX1_Buffer[6]==0x51)//判断继电器
  165.                                 {
  166.                                         if(RX1_Buffer[7]==0x31)//判断LED1
  167.                                         {
  168.                                                 if(RX1_Buffer[3]==0x4B)//判断开
  169.                                                 {
  170.                                                         DK1=1;
  171.                                                 }
  172.                                                 if(RX1_Buffer[3]==0x47)//判断关
  173.                                                 {
  174.                                                         DK1=0;
  175. ……………………

  176. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码



以上资料51hei下载地址:
wifi测试程序.zip (2.46 MB, 下载次数: 1249)



作者: Floray002    时间: 2017-12-1 11:39
以上实验图片来自此款开发板卖家提供的资料
作者: Floray002    时间: 2017-12-1 11:43
这幅图为自己使用苹果手机进行的调试,经检测,板子上的3.3V实际上不够这个电压,所以esp8266模块的供电是使用电池从外部供电的,还有就是实现时,注意各个模块供地。

9D69A02DBC8C474946010FD2B3764EE3.png (120.2 KB, 下载次数: 258)

实验图

实验图

作者: Floray002    时间: 2017-12-3 09:11
我全部的资料都分享在上面了

作者: 永远的lgz    时间: 2018-1-7 22:01
楼主,我的手机用不了你这个软件,怎么回事

作者: chengfgc    时间: 2018-2-1 11:33
APP用不了,怎么回事呢?
作者: bhjyqjs    时间: 2018-2-9 08:49
好贴,谢谢楼主!
作者: youcanyouup    时间: 2018-4-9 18:29
ESP8266需要烧写吗?

作者: jjj12345    时间: 2018-4-11 20:53
hulujia 发表于 2018-4-9 18:21
求分享

谢谢非常不错哦
作者: chaselbaymax    时间: 2018-4-12 13:04
萌新有一个问题请教大佬:
我用的和你一样的开发板,然后运行程序没有反应,手机上搜不到wifi,阴差阳错打开了串口调试助手,发现这样的一幕,我每按一次复位,就会从串口输到电脑上一串应该传送给wifi模块的信息。 (试了试,没打开串口调试助手,程序也没有反应)
我刚开始学,不是很懂,是不是我哪连线连错了,把单片机传送给wifi模块的信息传到了电脑上
还是说这两个接口是连通的,发送到wifi模块的信息都能通过数据线显示在电脑上,如果这样的话,我为啥搜不到模块的wifi。。。

作者: hulujia    时间: 2018-4-12 15:00
楼主请问电池外部供电怎么实现?是要自己接线吗,不知道用usb转ttl模块接电脑上可以供电吗?
作者: 么么了    时间: 2018-4-16 20:49
chaselbaymax 发表于 2018-4-12 13:04
萌新有一个问题请教大佬:
我用的和你一样的开发板,然后运行程序没有反应,手机上搜不到wifi,阴差阳错打 ...

你解决了吗
作者: hzp1239    时间: 2018-4-20 08:18
谢谢分享
作者: Aphroditezero9    时间: 2018-4-29 17:27
您的app用不了啊,麻烦问下app向单片机发送的具体是什么字符或字符串呢

作者: 12348856    时间: 2018-5-12 11:17
为什么下载了资料里面的程序打不开?
作者: sssjjj    时间: 2018-5-17 21:22
你们的可以用吗
作者: sssjjj    时间: 2018-5-18 19:17
不能用
作者: tony054    时间: 2018-5-27 00:38
好东西,来这里学习一下~
作者: sefawg    时间: 2018-6-28 11:22
chaselbaymax 发表于 2018-4-12 13:04
萌新有一个问题请教大佬:
我用的和你一样的开发板,然后运行程序没有反应,手机上搜不到wifi,阴差阳错打 ...

我遇到了和你一模一样的问题,你的问题解决了吗? 是什么原因造成的?
作者: gnalorange    时间: 2018-7-9 22:33
好东西,正是我想要的!
作者: 一叶_知秋    时间: 2018-7-11 23:38
请问有app的代码吗

作者: ligongping    时间: 2018-8-1 08:55
本帖最后由 ligongping 于 2018-8-1 10:44 编辑

为什么我下载后会弹出来这个E:捕获1.PNG

捕获1.PNG (41.01 KB, 下载次数: 215)

捕获1.PNG

作者: 太阳神犬    时间: 2018-8-1 09:44
看到楼主做的,瞬间自己也想做一个了
作者: 驴闯天涯    时间: 2018-8-10 21:45
谢谢分享
作者: anxuchu1    时间: 2018-9-15 22:06
谢谢楼主了
作者: dcein    时间: 2018-10-10 20:22
大家能发一份wifi程序和app给我吗?多谢

作者: zqy181818    时间: 2018-10-13 11:58
ligongping 发表于 2018-8-1 08:55
为什么我下载后会弹出来这个

这个E4A文件造成的,因为你的杀毒软件会误判。你可以放心用好了。
作者: zmc419    时间: 2018-10-14 09:54
用8266的端口直接输出不更好么,省掉了单片机
作者: zmc419    时间: 2018-10-14 10:00
朋友会做APP么。这个8266,用的是AT固件,单片机通过串口和8266通讯,不如直接用NODMCU固件
作者: lqsgg    时间: 2018-10-19 21:44
Floray002 发表于 2017-12-3 09:11
什么意思?资料都在上面

谢谢分享!学习学习!
作者: bhjyqjs    时间: 2018-10-26 14:18
很不错,谢谢分享!
作者: bioveronica    时间: 2018-11-25 20:51
第一次学习Wifi,谢谢楼主分享!
作者: Ramon123    时间: 2018-11-30 19:57
chaselbaymax 发表于 2018-4-12 13:04
萌新有一个问题请教大佬:
我用的和你一样的开发板,然后运行程序没有反应,手机上搜不到wifi,阴差阳错打 ...

现在能用了吗?我也出现了这样的情况
作者: xunxing    时间: 2018-11-30 22:10
尝试一下呀
作者: tong553    时间: 2019-3-23 13:13
资料不错,值得学习
作者: azi197417    时间: 2019-4-22 22:37
这个挺好的
作者: 方回首已百年身    时间: 2019-4-24 12:48
不错的东东,赞一个!
作者: JJJJ123    时间: 2019-6-20 22:16
Floray002 发表于 2017-12-3 09:11
什么意思?资料都在上面

楼主软件用不了。。

作者: wushengxu0718    时间: 2019-7-23 14:27
学习学习
作者: 不就一个你    时间: 2019-7-23 19:59
hulujia 发表于 2018-4-12 15:00
楼主请问电池外部供电怎么实现?是要自己接线吗,不知道用usb转ttl模块接电脑上可以供电吗?

可以

作者: yihai703    时间: 2019-7-26 19:40
参考一下,谢谢
作者: assini    时间: 2019-8-6 10:05
很好  很棒  赞一个
作者: 18856141120    时间: 2019-9-2 00:03
谢谢分享谢谢谢
作者: ww8577    时间: 2019-9-5 15:57
我的手机是安卓系统无法使用这个软件,大家有什么好的方法吗?可能是我安卓版本太新了

作者: xyt9812    时间: 2019-9-17 19:15
太棒了,正想要一个51控制WiFi的实例代码,谢谢楼主!
作者: xyt9812    时间: 2019-9-17 19:16
太棒了,有了代码就会用了,谢谢楼主分享。
作者: lern01    时间: 2020-2-7 19:00
Esp8266的发送格式好似是:+IPD
作者: dyjpc    时间: 2020-2-10 23:12
三星手机A6s打不开安卓app,不能运行,不知差在哪里
作者: 太阳黑子1    时间: 2020-2-11 19:21
太好玩了!
作者: 570612699    时间: 2020-6-11 10:33
谢谢楼主,很有用
作者: sniar    时间: 2020-6-11 20:44
文件能用吗?

作者: sniar    时间: 2020-6-11 20:45
文件下载下来可以用吗?有人测试吗?
作者: dilongking    时间: 2020-9-11 08:58
回家试一下,这好像很复杂,晕,我这真是太新手了
作者: liushiming82    时间: 2020-9-11 09:09
APP是什么软件写的
作者: 快乐眼泪    时间: 2020-9-11 20:52
我做了一个没成功
作者: zhaobolove    时间: 2020-9-21 21:53
这个没有技术含量, 太简单了
作者: 万人弃    时间: 2020-9-29 16:15
这个好!代码也在!试了一下!还不错
作者: Floray002    时间: 2020-10-26 16:57
永远的lgz 发表于 2018-1-7 22:34
软件根本用不了

我的话是苹果手机,没有用过安卓的那一款,我用的是苹果对应的那款软件
作者: Floray002    时间: 2020-10-26 16:58
永远的lgz 发表于 2018-1-7 22:01
楼主,我的手机用不了你这个软件,怎么回事

配套的安卓手机测试app我没有试过,因为我是苹果,我用的apple store的netassist使,这个调试过没问题
作者: heikeji123456    时间: 2021-6-19 15:58
APP源码要如何编写呢?大家有类似能传个附件,给我们学习吗?
作者: mc6666    时间: 2021-6-28 16:45
永远的lgz 发表于 2018-1-7 22:01
楼主,我的手机用不了你这个软件,怎么回事

一样的,什么情况,解决了嘛


作者: magicfu    时间: 2021-8-18 16:56
有没有实现LED调光功能的,手机APP上带调光条,控制单片机上LED的亮度
作者: KKK1177    时间: 2022-4-5 15:24
APP用不了怎么回事

作者: QQQQ987    时间: 2022-9-2 00:33
51加物连网呀——,赞一个,




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