找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11049|回复: 27
打印 上一主题 下一主题
收起左侧

89C52单片机+ESP8266做的物联网+反馈 e4a手机客户端源程序

  [复制链接]
跳转到指定楼层
楼主
MCU是89C52单片机
WiFi模块是ESP8266
其他 8路继电器 电源模块  使用贝壳物联做服务器 还有客户端。
也可以用花生壳做内网穿透,8266做服务器,也可以实现物联以及反馈(8266支持同时5个客户端)
已经实现8开关+反馈+远程开门和锁门(汽车中控锁)
附C代码以及手机客户端代码(E4A)  ID以及APIKEY 需要去贝壳物联申请贝壳物联用户中心

e4a源代码:

手机客户端含源程序:


制作出来的实物图如下:



单片机源程序如下:
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char   
  4. sbit lcd0=P2^0;                 //输出端口
  5. sbit lcd1=P2^1;
  6. sbit lcd2=P2^2;
  7. sbit lcd3=P2^3;
  8. sbit lcd4=P2^4;
  9. sbit lcd5=P2^5;
  10. sbit lcd6=P2^6;
  11. sbit lcd7=P2^7;
  12. sbit lcd8=P0^5;
  13. sbit lcd9=P0^6;                   //暂定为开锁按钮
  14. sbit state=P0^4;         //门锁开关反馈状态




  15. sbit sw0=P1^0;
  16. sbit sw1=P1^1;
  17. sbit sw2=P1^2;
  18. sbit sw3=P1^3;
  19. sbit sw4=P1^4;
  20. sbit sw5=P1^5;
  21. sbit sw6=P1^6;
  22. sbit sw7=P1^7;            

  23. /*****************相关变量**************/
  24. uchar Receive;                              
  25. uchar Recive_table[150];                //用于接收wifi模块反馈到MCU上的数据
  26. uchar ac;            //登录状态标识
  27. /*******************************************************************
  28. 名称:延时函数  作用:毫秒级延时,微妙级延时函数,为数据收发完成作等待.......  
  29. ********************************************************************/
  30. void ms_delay(uint t)
  31. {  
  32.         uint i,j;  
  33.         for(i=t;i>0;i--)   
  34.         for(j=110;j>0;j--);
  35. }   

  36. void us_delay(uchar t)
  37. {  
  38.         while(t--);
  39. }         

  40. void Uart_Init()                                //使用定时器1作为波特率发生器(STC89C52、STC89C51、AT89C51等均可)
  41. {  
  42.     TMOD = 0x20;
  43.     SCON = 0x50;                                 //设置串行方式
  44.     TH1 = 0xFD;                                         //波特率9600
  45.     TL1 = TH1;
  46.     PCON = 0x00;
  47.     EA = 1;                                                //总中断打开
  48.     ES = 1;                                                //开串口中断
  49.     TR1 = 1;
  50.         }
  51.         
  52. void InitTimer0(void)
  53. {
  54.     TMOD |= 0x01;
  55.     TH0 = 0x0DC;
  56.     TL0 = 0x00;
  57.     EA = 1;
  58.     ET0 = 1;
  59.     TR0 = 1;
  60. }


  61. /********************************************************************
  62. 名称:串口发送函数  功能:MCU向无线WIFI模块ESP8266发送数据
  63. ********************************************************************/
  64. void Send_Uart(uchar value)
  65. {  
  66.         ES=0;                                                  //关闭串口中断
  67.         TI=0;                                           //清发送完毕中断请求标志位  
  68.         SBUF=value;                                 //发送
  69.         while(TI==0);                                 //等待发送完毕  
  70.         TI=0;                                           //清发送完毕中断请求标志位  
  71.         ES=1;                                                  //允许串口中断  
  72. }  

  73. /********************************************************************
  74. 名称:WIFI模块设置函数  作用: 启动模块,以便可以实现无线接入和控制
  75. ********************************************************************/

  76. void ESP8266_Set(uchar *puf,uchar a)         // 数组指针*puf指向字符串数组               
  77. {   
  78.         
  79.                
  80.                 while(*puf!='\0')                    //遇到空格跳出循环
  81.            {   
  82.                 Send_Uart(*puf);                  //向WIFI模块发送控制指令。  
  83.                 us_delay(5);   
  84.                 puf++;   
  85.            }
  86.                
  87.        if(a==1)
  88.                 {
  89.                 us_delay(5);  
  90.         Send_Uart('\r');                         //回车
  91.         us_delay(5);  
  92.         Send_Uart('\n');
  93.                 }                           //换行
  94. }


  95. unsigned char *Itoa(unsigned int ni,int dd)
  96. {char i=0,j=0,temp[16],outstr[16];
  97. unsigned int n,num=ni;
  98. while(num>=dd)
  99. {n=num%dd;
  100.   if(n>9)temp[i]=n+0x37;else temp[i]=n+0x30;
  101.   num=num/dd;
  102.   i++;
  103.   }
  104.   n=num;if(n>9)temp[i]=n+0x37;else temp[i]=n+0x30;
  105.   j=0;
  106.   for(;i>=0;i--){outstr[j]=temp[i];j++;}
  107.   outstr[j]=0;
  108.   return outstr;
  109.   }
  110. //------------------------------------------------------
  111. void ML_fasong()
  112. {
  113.    ESP8266_Set("{\"M\":\"say\",\"ID\":\"ALL\",\"C\":\"",0);
  114.                   ESP8266_Set(Itoa(P2,2),0);
  115.                   ESP8266_Set(Itoa(state,2),0);
  116.                   ESP8266_Set("\",\"SIGN\":\"00\"}\n",1);
  117. }
  118. void ledcl(uchar a)                //led处理
  119. {                                                                                                   
  120.    
  121.    if(a==0)
  122.      {       lcd0=~lcd0;
  123.                             ML_fasong();
  124.                             }
  125.    if(a==1)
  126.       {      
  127.           lcd1=~lcd1;
  128.           ML_fasong();              }
  129.    if(a==2)  
  130.     {      
  131.          lcd2=~lcd2;
  132.           ML_fasong();            
  133.           }
  134.    if(a==3)   
  135.    {      
  136.            lcd3=~lcd3;
  137.          ML_fasong();         
  138.            }
  139.    if(a==4)  
  140.     {      
  141.          lcd4=~lcd4;
  142.                  ML_fasong();
  143.      }
  144.    if(a==5)   
  145.    {      
  146.           lcd5=~lcd5;
  147.           ML_fasong();   
  148.    }
  149.    if(a==6)  
  150.     {      
  151.               lcd6=~lcd6;         
  152.              ML_fasong();   
  153.     }
  154.    if(a==7)  
  155.     {
  156.           lcd7=~lcd7;
  157.                      ML_fasong();
  158.      }
  159.          if(a==8)  
  160.     {
  161.                              lcd8=0;
  162.                         ms_delay(500);
  163.                         lcd8=1;
  164.                      ML_fasong();
  165.      }
  166.          if(a==9)
  167.          {
  168.                           lcd9=0;
  169.                         ms_delay(500);
  170.                         lcd9=1;
  171.                         ML_fasong();                  
  172.          }

  173. }  
  174. void key()                   //独立按键处理
  175. {
  176.   if(sw0==0)                  
  177.         {        
  178.                 ms_delay(10);   
  179.                 if(sw0==0)         
  180.                 {        ledcl(0);                }
  181.                     while(!sw0);         
  182.         }               
  183.         if(sw1==0)                  
  184.         {        
  185.                 ms_delay(10);   
  186.                 if(sw1==0)         
  187.                 {                ledcl(1);        }
  188.                     while(!sw1);         
  189.         }               
  190.    if(sw2==0)                  
  191.         {        
  192.                 ms_delay(10);   
  193.                 if(sw2==0)         
  194.                 {                        ledcl(2);        }
  195.                     while(!sw2);
  196.         }               
  197.         if(sw3==0)                  
  198.         {        
  199.                 ms_delay(10);   
  200.                 if(sw3==0)         
  201.                 {                ledcl(3);                }
  202.                     while(!sw3);         
  203.         }
  204.         if(sw4==0)                  
  205.         {        
  206.                 ms_delay(10);   
  207.                 if(sw4==0)         
  208.                 {                        ledcl(4);                }
  209.                          while(!sw4);         
  210.         }               
  211.         if(sw5==0)                  
  212.         {        
  213.                 ms_delay(10);   
  214.                 if(sw5==0)         
  215.                 {                ledcl(5);                 }
  216.                     while(!sw5);         
  217.         }               
  218.    if(sw6==0)                  
  219.         {        
  220.                 ms_delay(10);   
  221.                 if(sw6==0)         
  222.                 {                        ledcl(6);        }
  223.                      while(!sw6);         
  224.         }               
  225.         if(sw7==0)                  
  226.         {        
  227.                 ms_delay(10);   
  228.                 if(sw7==0)         
  229.                 {                ledcl(7);        }
  230.                                 while(!sw7);        
  231.         }
  232. }
  233.          
  234. void ML_panduan()
  235. {
  236.    uchar x,i,y,z;
  237.            x=30;
  238.          y=50;
  239.          i=0;
  240.          if(Recive_table[6]=='b')
  241.        {
  242.                    ms_delay(1000);
  243.                            ESP8266_Set("{\"M\":\"beat\"}\n",1);
  244.                         Recive_table[6]='0';
  245.                         if(ac>2)
  246.                          {
  247.                         ac--;
  248.                         }
  249.                               else
  250.                         {
  251.                          ac=0;
  252.                         }        
  253.                         
  254.                
  255.         }


  256.           while(x--)
  257.                  {
  258.                  if (Recive_table[i]=='s')
  259.           {
  260.                             if(Recive_table[i+1]=='a')
  261.                         {
  262.                           z=i+25;
  263.                           x=0;
  264.                           while(y--)
  265.                           {
  266.                                    if(Recive_table[z]=='C')
  267.                                  {
  268.                                           if(Recive_table[z+2]==':')
  269.                                          {
  270.                                                   switch(Recive_table[z+4])
  271.                                                  {
  272.                                                          case('a'):  y=0; ledcl(0); Recive_table[z+4]='1'; break;
  273.                                                         case('b'):  y=0; ledcl(1); Recive_table[z+4]='1'; break;
  274.                                                         case('c'):  y=0; ledcl(2); Recive_table[z+4]='1'; break;
  275.                                                         case('d'):  y=0; ledcl(3); Recive_table[z+4]='1'; break;
  276.                                                         case('e'):  y=0; ledcl(4); Recive_table[z+4]='1'; break;
  277.                                                         case('f'):  y=0; ledcl(5); Recive_table[z+4]='1'; break;
  278.                                                         case('g'):  y=0; ledcl(6); Recive_table[z+4]='1'; break;
  279.                                                         case('h'):  y=0; ledcl(7); Recive_table[z+4]='1'; break;
  280.                                                         case('i'):  y=0; ledcl(8); Recive_table[z+4]='1'; break;
  281.                                                         case('j'):  y=0; ledcl(9); Recive_table[z+4]='1'; break;
  282.                                                         case('o'):  y=0; lcd5=0; Recive_table[z+4]='1'; break;
  283.                                                         case('n'):  y=0; lcd5=1; Recive_table[z+4]='1'; break;
  284.                                                         case('0'):  y=0; ML_fasong();  Recive_table[z+4]='1'; break;

  285.                                                 
  286.                                                  }
  287.                                          }
  288.                                  }
  289.                                  else
  290.                                  z++;
  291.                           }
  292.                         }
  293.           }
  294.                   else
  295.                   i++;
  296.         }
  297. }

  298. //-------------------------------------------------------------------------
  299. void ML_chushihua()
  300. {         
  301.        uint p;
  302.                    p=2000;
  303.            // ESP8266_Set("AT+RST",1);
  304.            // ms_delay(p);
  305.                 ESP8266_Set("AT+CIPMUX=0",1);
  306.             ms_delay(p);
  307.         ESP8266_Set("AT+CIPSTART=\"TCP\",\"121.42.180.30\",8282",1);
  308.                 ms_delay(p);   
  309.                 ESP8266_Set("AT+CIPMODE=1",1);
  310.                 ms_delay(p);
  311.                 ESP8266_Set("AT+CIPSEND",1);
  312.                 ms_delay(p);
  313.                 ESP8266_Set("{\"M\":\"checkin\",\"ID\":\"此处为ID\",\"K\":\"此处为APIKEY\"}\n",1);
  314.                 ac=0;
  315. }



  316. void main()
  317. {        bit bdat;
  318.            bdat=state;         
  319.               Uart_Init();
  320.                 InitTimer0();
  321.           ML_chushihua();
  322.          
  323.           while(1)
  324.                    {
  325.                             ML_panduan();
  326.                          key();
  327.                          if(state!=bdat)
  328.                            {
  329.                              bdat=state;
  330.                                      ML_fasong();
  331. ……………………

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

所有资料51hei提供下载:
89C52+ESP8266简易物联网+手机客户端.zip (638.02 KB, 下载次数: 616)


评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏50 分享淘帖 顶4 踩
回复

使用道具 举报

沙发
ID:277550 发表于 2020-11-24 10:31 | 只看该作者

在 ESP8266 直接写程序联网、收发消息等;STC单片机做控制板,控制继电器等;;;之间可以串口通讯。可玩性更高。
回复

使用道具 举报

板凳
ID:693523 发表于 2020-11-24 12:15 来自手机 | 只看该作者
devcang 发表于 2020-11-24 10:31
在 ESP8266 直接写程序联网、收发消息等;STC单片机做控制板,控制继电器等;;;之间可以串口通讯。可玩 ...

我也想啊,但是技术不允许啊
回复

使用道具 举报

地板
ID:277550 发表于 2020-11-24 15:02 | 只看该作者
89C52都会了,ESp8266更可以了
回复

使用道具 举报

5#
ID:693523 发表于 2020-11-24 19:27 来自手机 | 只看该作者
devcang 发表于 2020-11-24 15:02
89C52都会了,ESp8266更可以了

8266目前只会一点AT指令,固件还不会
回复

使用道具 举报

6#
ID:846386 发表于 2020-11-25 12:04 | 只看该作者
这资源不错,学习
回复

使用道具 举报

7#
ID:822447 发表于 2020-11-26 12:55 | 只看该作者
楼主动手能力强!
回复

使用道具 举报

8#
ID:61192 发表于 2020-12-5 19:59 | 只看该作者
看得我心痒痒,实在是厉害,我也照葫芦画瓢试试看
回复

使用道具 举报

9#
ID:756506 发表于 2020-12-7 10:28 | 只看该作者
这个很不错,跟楼主学习学习。。
回复

使用道具 举报

10#
ID:796012 发表于 2020-12-17 16:39 | 只看该作者
你敢再按一次我就关掉程序。呵呵!
回复

使用道具 举报

11#
ID:285416 发表于 2021-7-26 03:58 来自手机 | 只看该作者
兄弟,你做的很不错。我也是正在找,e4a手机客户端与物联网连接的方法。手机app开发不怎么会。手机与单片机usb连接,你会吗?能不能教一教?还有就是看到你做的洞洞板。不明白你为什么还用洞洞板来做。给你推荐一下吧,挺不错的。担心广告嫌疑,我就不打地址了。jppcb  jlcpcb  两家都不错,四层都可以的。
回复

使用道具 举报

12#
ID:315554 发表于 2021-7-26 10:22 | 只看该作者
学习了,谢谢分享,8266多控,值得搞一下,我以前都只会用两个IO口,控一个继电器
回复

使用道具 举报

13#
ID:584195 发表于 2021-8-6 21:32 | 只看该作者
ESP8266直接就用IO控制了,还另整一个单片机,会不会把事情办复杂了?
回复

使用道具 举报

14#
ID:505058 发表于 2021-8-18 06:46 来自手机 | 只看该作者
nmgbtzyf 发表于 2021-7-26 03:58
兄弟,你做的很不错。我也是正在找,e4a手机客户端与物联网连接的方法。手机app开发不怎么会。手机与单片机 ...

他用的是各个模块组合啊,这焊接量也不大
回复

使用道具 举报

15#
ID:577423 发表于 2021-8-19 14:42 | 只看该作者
易语言编译器,看着全中文字体很有亲切感,手上正好有两个esp8266,看看这个程序有多么强大
回复

使用道具 举报

16#
ID:700827 发表于 2021-11-20 21:27 | 只看该作者
没有看到8266联网啊?
回复

使用道具 举报

17#
ID:3802 发表于 2021-12-10 17:08 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

18#
ID:101114 发表于 2022-1-20 11:54 | 只看该作者
学习了,感觉 8266这块芯片通过51玩出了新花样
回复

使用道具 举报

19#
ID:581038 发表于 2022-2-18 10:22 | 只看该作者
这个好,有学习价值,下了下了!
回复

使用道具 举报

20#
ID:1002378 发表于 2022-2-18 13:50 | 只看该作者
这个有兴趣,向你学习动手能力
回复

使用道具 举报

21#
ID:229010 发表于 2022-2-24 17:16 | 只看该作者
正学习这方面的知识,感谢。
回复

使用道具 举报

22#
ID:65691 发表于 2023-6-2 12:45 | 只看该作者

正学习这方面的知识,感谢。
回复

使用道具 举报

23#
ID:359281 发表于 2023-8-22 21:31 来自手机 | 只看该作者
好资料,51黑有你更精彩!
回复

使用道具 举报

24#
ID:216265 发表于 2023-8-25 05:37 | 只看该作者
历害了,支持你
回复

使用道具 举报

25#
ID:359281 发表于 2023-10-10 12:07 | 只看该作者
51黑有你更精彩!
回复

使用道具 举报

26#
ID:98880 发表于 2023-11-23 15:55 | 只看该作者
不错呀。我当年也是这样搞的,土味制作。
回复

使用道具 举报

27#
ID:596977 发表于 2024-3-7 10:35 | 只看该作者
51黑有你更精彩!
回复

使用道具 举报

28#
ID:511699 发表于 2024-3-24 14:29 | 只看该作者
正学习这方面的知识,感谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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