欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7509|回復: 7
打印 上一主題 下一主題
收起左側

巴法云+STC89C52單片機+ESP-01在線遠程控制多個設備 源程序等資料

  [復制鏈接]
跳轉到指定樓層
樓主
一直想試試遠程控制設備,τ 寶成品還是小貴,之前買的ESP8266-01(IO口太少,而且機智云、騰訊云等感覺又太麻煩)
這幾天接觸到巴法云,感覺挺簡單的,試了官方的示例(用的是MCU的ESP8266-12E+Arduino)但感覺浪費IO口
然后繼續百度搜資料,找到了巴法云-簡書,發現了這個ESP8266-01+STC89C52的示例(官方代碼備注詳細,簡單易懂)
后經摸索修改成了能同時控制二個設備的代碼,能用控制臺控制,也能用天貓精靈控制(APP控制還沒有時間測試)

還需低成本遠程控制多個設備的,可以添加NRF24L01當主機, 從機用NRF24L01+單片機實現




以下是巴法云的控制臺,我添加了二個設備,跟代碼里的一致



以下是附件內容,大家按順序操作即可,工具和引腳接線統統有圖有說明

  1. /*********************************************************************
  2. 題目:STC89C51/52+ESP8266-01/01S實現在線遠程控制多個設備
  3. 代碼:以下為利用巴法云2個訂閱主題分別控制2個IO口的代碼(方便新手理解及擴展)
  4. 注意:晶振一定是11.0592MHz。
  5. 關于UID:在巴法云注冊登陸,即可看到自己UID,推送微信消息,需要手機綁定微信,bemfa.com在控制臺進行綁定即可。
  6. 注意:新買的ESP8266-01默認是115200波特率,需要利用串口調試助手更改esp8266波特率為9600
  7.                         更改方法:USB轉串口板連接到ESP8266,波特率115200,發送  AT+UART=9600,8,1,0,0   //末尾有回車換行
  8.                          USB轉串口板接線方法:tx--rx ,rx--tx,gnd-gnd,3.3v--3.3v,EN--3.3v //esp8266--USB轉串口板
  9. 官方文檔見官網:www點cloud.bemfa點com/docs/#/?id=_51-tcp%e5%88%9b%e5%ae%a2%e4%ba%91
  10. 注冊、登陸頁面:cloud.bemfa點com/u_login.php

  11. STC89C51/52與ESP8266-01/01S的接線方式(注意-需要先將本程序燒錄到單片機后斷電,接上ESP8226-01/01S,然后上電):
  12. STC89C51/52           ESP8266-01
  13.     P30----------------TX
  14.     P31----------------RX

  15. 以下代碼只有幾處需要根據你的實際情況修改, 已注明"需要修改此部分", 其它地方不需要修改
  16. ********************************************************************/
  17. #include <reg52.h>  
  18. #include <stdio.h>
  19. #include <string.h> //包含頭文件
  20. #define uint unsigned int
  21. #define uchar unsigned char


  22. //************ 需要修改以下部分 ************
  23. #define Ssid  "wifi名稱"                                        //WIFI名稱,,修改為自己路由器的WIFI名稱,好像不支持中文
  24. #define PassWord  "wifi密碼"        //WIFI密碼,修改為自己路由器的
  25. #define Uid  "密鑰"                //巴法云UID密鑰,控制臺獲取

  26. #define TopicLed1  "LedA002" //巴法云控制臺創建,名稱自定義,app訂閱主題要和這個推送主題一致(如需控制多個主題,只要填其中一個即可)
  27. #define TopicLed2  "LedB002" //巴法云控制臺創建,名稱自定義,app訂閱主題要和這個推送主題一致(如需控制多個主題,只要填其中一個即可)
  28. sbit LED1 = P2^0; //燈1, 對應訂閱主題LedA002
  29. sbit LED2 = P2^1; //燈2, 對應訂閱主題LedB002
  30. //************ 需要修改以上部分 ************



  31. /*****************相關變量**************/
  32. uchar Receive;  //接收到的字節
  33. uchar i,i2,count; //定時器所用變量
  34. uint n;                                         //接收到字節的個數
  35. uchar flag=0; //標志位,檢查是否有數據通過串口發到MCU
  36. uchar connected = 0;  //標志位,檢查是否已連接服務器
  37. uchar Recive_table[100]; //用于接收wifi模塊反饋到MCU上的數據

  38. /*******************************************************************
  39. 名稱:延時函數
  40. 作用:毫秒級延時,微妙級延時函數,為數據收發完成作等待.......
  41. ********************************************************************/
  42. void ms_delay(uint t)
  43. {
  44.       uint i,j;
  45.       for(i=t;i>0;i--)
  46.        for(j=110;j>0;j--);
  47. }

  48. void us_delay(uchar t)
  49. {
  50.       while(t--);
  51. }



  52. /********************************************************************
  53. 名稱:波特率發生器函數
  54. 作用:波特率發生器可以是T1定時器實現,也可以是MCU內部獨立的波特率發生器,
  55. 各自不同的載入值計算式,具體根據寄存器相關設置來參考計算,以實現
  56. 異步串行通訊。(經測試,兩種設置方式均可用,可任選一種。)
  57. ********************************************************************/
  58. void Uart_Init()//使用定時器1作為波特率發生器(STC89C52、STC89C51、AT89C51或者STC12C560S2等均可)
  59. {
  60.         SCON=0x50;     //設置為串行口以方式1工作,8位異步通訊,允許接收中斷。
  61.         //一幀信息為10位,1位起始位,8位數據位(低位在先),1位停止位。
  62.         PCON=0x80;     //SMOD波特率選擇位為1,SMOD=1.
  63.         TMOD=0x21;    //設置定時器1為波特率發生器,工作在模式2,8位自動裝載
  64.         TH1=0xFA ;//波特率9600 ,TH1=256-FOSC/16/12/波特率
  65.         TL1=TH1;
  66.         EA=1;                            //總中斷打開
  67.         ES=0;                             //關閉串口中斷
  68.         TR1=1;                     //啟動定時器1

  69.         TH0=0xD8;                  //定時10ms
  70.         TL0=0xF0;
  71.         ET0=1;
  72.         TR0=1;
  73. }




  74. /********************************************************************
  75. 名稱:串口發送函數
  76. 功能:MCU向其他與其連接的設備發送數據(此處是無線WIFI模塊ESP8266)
  77. ********************************************************************/
  78. void Send_Uart(uchar value)
  79. {
  80.       ES=0;         //關閉串口中斷
  81.       TI=0;         //清發送完畢中斷請求標志位
  82.       SBUF=value;     //發送
  83.       while(TI==0);    //等待發送完畢
  84.       TI=0;         //清發送完畢中斷請求標志位
  85.       ES=1;         //允許串口中斷
  86. }
  87. /********************************************************************
  88. 名稱:串口發送數據
  89. 作用: 通過串口發送指令到WIFI模塊,以便可以實現無線接入和控制,帶回車換行
  90. ********************************************************************/
  91. void SerialSend(uchar *puf) // 數組指針*puf指向字符串數組               
  92. {

  93.       while(*puf!='\0')    //遇到空格跳出循環
  94.       {
  95.            Send_Uart(*puf);  //向WIFI模塊發送控制指令。
  96.            us_delay(5);
  97.            puf++;      
  98.       }
  99.       us_delay(5);
  100.       Send_Uart('\r');//回車
  101.       us_delay(5);
  102.       Send_Uart('\n');   //換行
  103. }   

  104. /********************************************************************
  105. 名稱:串口發送數據
  106. 作用: 通過串口發送指令到WIFI模塊,不帶回車換行
  107. ********************************************************************/
  108. void SerialSend_byte(uchar *puf) // 數組指針*puf指向字符串數組               
  109. {

  110.       while(*puf!='\0')    //遇到空格跳出循環
  111.       {
  112.            Send_Uart(*puf);  //向WIFI模塊發送控制指令。
  113.            us_delay(5);
  114.            puf++;      
  115.       }
  116. }   


  117. /********************************************************************
  118. 名稱:心跳函數
  119. 作用:發送心跳。如果一分鐘不發送心跳,服務器就會認為設備掉線,故建議30s發送一次心跳
  120. 在中斷1中調用,和發送數據函數,留一個就行,發送數據也相當于心跳
  121. ********************************************************************/
  122. void Ping(void)
  123. {        
  124.   SerialSend("cmd=0&msg=ping"); //發送心跳
  125. }

  126. void connect_topic(uchar x){
  127.         //發送訂閱指令,原格式為:cmd=1&uid=***UID***&topic=***Topic***
  128.         SerialSend_byte("cmd=1&uid=");
  129.         SerialSend_byte(Uid);
  130.         SerialSend_byte("&topic=");
  131.         
  132.         //************ 需要修改以下部分 ************
  133.         if(x==1){
  134.                 SerialSend_byte(TopicLed1);
  135.         } else if(x==2){
  136.                 SerialSend_byte(TopicLed2);
  137.         }
  138.         //************ 需要修改以上部分 ************
  139.         
  140.         us_delay(5);
  141.         Send_Uart('\r');//回車
  142.         us_delay(5);
  143.         Send_Uart('\n');   //換行
  144. }

  145. void connect_bemfa(void){
  146.         connected = 1;
  147.         SerialSend("AT+CIPMODE=1"); //開啟透明傳輸模式
  148.         ms_delay(1000);
  149.         SerialSend("AT+CIPSTART=\"TCP\",\"bemfa.com\",8344");  // 連接服務器和端口
  150.         ms_delay(1000);
  151.         SerialSend("AT+CIPSEND"); //進入透傳模式,下面發的都會無條件傳輸
  152.         ms_delay(1000);
  153.         
  154.         //************ 需要修改以下部分 ************
  155.         connect_topic(1); //連接第1個訂閱主題
  156.         ms_delay(1000);
  157.         connect_topic(2); //連接第2個訂閱主題
  158.         ms_delay(1000);
  159.         //************ 需要修改以上部分 ************
  160.                
  161.         connected = 1; //表示連接成功,可以發送數據了
  162. }


  163. /********************************************************************
  164. 名稱:主函數
  165. 作用:程序的執行入口
  166. ********************************************************************/
  167. void main()
  168. {   
  169.                 memset(Recive_table,'\0',sizeof Recive_table);//重置數組
  170.                 Uart_Init();//使用獨立的波特率發生器


  171.                 ms_delay(1000);
  172.                 SerialSend("AT+RST");     //重新啟動wifi模塊
  173.                 ms_delay(1000);
  174.                 SerialSend("AT");     //重新啟動wifi模塊
  175.                 ms_delay(1000);
  176.                 SerialSend("AT+CWMODE=3"); //設置路由器模式 1 station模式 2 AP路由器模式 3 station+AP混合模式
  177.                 ms_delay(1000);
  178.                 SerialSend("AT+CWJAP=\""Ssid"\",\""PassWord"\"");//設置模塊SSID:WIFI, PWD:密碼 及安全類型加密模式(WPA2-PSK)
  179.                 ms_delay(8000);
  180.                 connect_bemfa(); //連接巴法云服務器

  181.                 while(1)
  182.                 {
  183.                                 if(flag == 1){                                       
  184.                                         //************ 需要修改以下部分 ************
  185.                                         //實際收到到指令:cmd=2&uid=4d9ec352e0376f2110a0c601a2857225&topic=light002&msg=on
  186.                                         //字符串匹配,當檢測到字符串msg=on時,執行開燈
  187.                                         //如果有多個主題,可以加上主題名字以區分不同設備控制命令,如: if(strstr(Recive_table,"light002&msg=on"))
  188.                                         if(strstr(Recive_table,"LedA002&msg=on")){ //當檢測到字符串msg=on時,執行開燈
  189.                                                         LED1=0; //引腳置高電平
  190.                                         } else if(strstr(Recive_table,"LedA002&msg=off")){ //當檢測到字符串msg=off時,執行關燈
  191.                                                         LED1=1; //引腳置低電平
  192.                                         } else if(strstr(Recive_table,"LedB002&msg=on")){
  193.                                                         LED2=0;
  194.                                         } else if(strstr(Recive_table,"LedB002&msg=off")){
  195.                                                         LED2=1;
  196.                                         }
  197.                                         //************ 需要修改以上部分 ************

  198.                                         else if(strstr(Recive_table,"ERROR")){ //如果掉線或網絡故障,重新連接
  199.                                                         connect_bemfa(); //連接巴法云服務器
  200.                                         }
  201.                                         memset(Recive_table,'\0',sizeof Recive_table);//重置數組
  202.                                         flag=0;
  203.                                 }
  204.                 }         
  205. }

  206. /********************************************************************************
  207. 名稱:串行通訊中斷
  208. 作用:發送或接收結束后進入該函數,對相應的標志位清零, 實現模塊對數據正常的收發

  209. *********************************************************************************/

  210. void Uart_Interrupt() interrupt 4        
  211. {
  212.                 if(RI==1)
  213.                 {
  214.                                  RI=0;
  215.                                  Receive=SBUF;        //MCU接收wifi模塊反饋回來的數據
  216.                                  Recive_table[i]=Receive;      
  217.                                  i++;         
  218.                                  if((Receive =='\n')){
  219.                                                 i=0;
  220.                                                 flag = 1;
  221.                                 }
  222.                 }
  223.                 else TI=0;
  224. }

  225. //定時發送心跳,或發送傳感器數據
  226. //心跳建議30s發一次,一分鐘不發數據,服務器會認為設備掉線
  227. void timer0isr(void) interrupt 1  
  228. {
  229.                 TH0=0xD8;
  230.                 TL0=0xF0;
  231.                 i2++;
  232.                 if(i2==100)
  233.                 {
  234.                                 i2=0;
  235.                                 count++;
  236.                                 if(count>=40) //40秒,可自行修改
  237.                                 {
  238.                                         if(connected == 1){
  239.                                                                 Ping();   //發送心跳
  240.                                         }

  241.                                         count=0;
  242.                                 }               
  243.                 }        
  244. }
復制代碼

附件在2樓

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏15 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:424598 發表于 2020-11-2 23:57 | 只看該作者
附件在二樓

巴法云ESP8266-01.zip

12.27 MB, 下載次數: 142, 下載積分: 黑幣 -5

回復

使用道具 舉報

板凳
ID:782563 發表于 2021-2-2 13:01 | 只看該作者
想請問一下電路如何連接
回復

使用道具 舉報

地板
ID:134870 發表于 2021-3-26 22:38 | 只看該作者
51黑有你更精彩
回復

使用道具 舉報

5#
ID:857072 發表于 2021-4-4 21:10 | 只看該作者

51黑有你更精彩記號
回復

使用道具 舉報

6#
ID:83626 發表于 2021-10-4 20:15 | 只看該作者
下載來玩一下,正好手里有配件。
回復

使用道具 舉報

7#
ID:518395 發表于 2022-3-30 21:10 | 只看該作者
最近在學著用巴法云,謝謝樓主!
回復

使用道具 舉報

8#
ID:901516 發表于 2022-4-17 16:51 | 只看該作者
樓主知道如何用51發數據去巴法云平臺嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表