用51单片机和esp8266实现通过手机app控制单片机小灯

  • 时间:
  • 浏览:30
  • 来源:跟我学网络
用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, 下载次数: 997)