分享

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

 共同成长888 2019-12-29
 用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黑下载附件…………
复制代码

0.png

全部资料51hei下载地址:
wifi测试程序.zip (2.46 MB, 下载次数: 888)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多