国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

ELEOK

標題: 通過ESP8266連接OneNET平臺遠程控制51單片機 [打印本頁]

作者: eng    時間: 2021-6-24 00:23
標題: 通過ESP8266連接OneNET平臺遠程控制51單片機
硬件:51單片機,ESP8266
云平臺:OneNet平臺
功能:51單片機通過ESP8266連接OneNet平臺,通過GET方法得到OneNet發(fā)送的數(shù)據(jù),進而單片機讀取進行下一步操作。
這是2018年編寫的程序,由于年代久遠,可能不是很好用,但大體思路是這樣的。讀者該修改的地方修改,OneNET平臺該注冊的注冊,注意用的是HTTP協(xié)議。
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uint a,i,flag,temp;
  6. sbit DQ=P2^4;
  7. sbit k1=P1^0;      
  8. char bb[1]="";
  9. char aa[1]="";
  10. sbit  b=P1^4;
  11. uchar datalen = 0;
  12. uchar value;
  13. uchar cnt = 0;
  14. uchar recbuffer[51]="";                                //接收緩沖
  15. sbit  LED1=P0^0;
  16. sbit  LED2=P0^1;
  17. sbit  LED3=P0^2;
  18. sbit  LED4=P0^3;
  19. sbit  LED5=P0^4;
  20. //void delay(uint i)                //延時5us
  21. //{
  22. //        do
  23. //        {
  24. //                _nop_();            
  25. //                _nop_();
  26. //                _nop_();
  27. //                i--;
  28. //        }
  29. //        while(i);        
  30. //}
  31. void delay1(uint z)                                         //延時1ms
  32. {
  33.         uint x,y;
  34.         for(x=z;x>0;x--)
  35.                 for(y=110;y>0;y--);
  36. }

  37. void sendChar(uchar a)                                 //單片機發(fā)送一個字節(jié)
  38. {
  39.         SBUF = a;
  40.         while(TI==0);
  41.         TI=0;        
  42. }

  43. void sendString(uchar *s)                        //發(fā)送一個字符串
  44. {
  45.         while(*s!='\0')
  46.         {
  47.                 sendChar(*s);
  48.                 s++;
  49.         }
  50.                
  51. }
  52. void init()
  53. {
  54.         /*串口中斷定時器初始化*/
  55.         TMOD=0x20;                                                        //定時器1工作在方式2  
  56.         TH1=0xfd;                                                        //波特率為9600,精振為11.0592MHz
  57.         TL1=0xfd;
  58.         REN=1;                                                                //啟動串行口接收數(shù)據(jù)
  59.         SM0=0;                                                                //串口工作在方式1
  60.         SM1=1;                                                                //串行口工作方式選擇
  61.         EA=1;                                                                //打開總中斷
  62.         TR1=1;                                                        //打開定時器中斷
  63.         /*esp8266初始化*/
  64.         sendString("AT\r\n");
  65.          delay1(1000);
  66.         sendString("AT+RST\r\n");
  67.         delay1(1000);
  68.            sendString("AT+CWMODE=3\r\n");                //設(shè)置WIFI應(yīng)用模式
  69.         delay1(1000);//設(shè)置WIFI應(yīng)用模式
  70.         sendString("AT+RST\r\n"); //重置WIFI模塊
  71.         delay1(1000);
  72.         sendString("AT+CIFSR\r\n"); //查詢本地IP
  73.         delay1(1000);
  74.         sendString("AT+CWJAP="123456","wds123456"\r\n");  //連接無線路由器
  75.         delay1(1000);
  76. }
  77. //void chuansu()                                                         //單片機通過8266給OneNET傳送數(shù)據(jù)
  78. //{
  79. //        sendString("AT+CIPSTART="TCP","183.230.40.33",80\r\n");//和服務(wù)器建立TCP連接
  80. //        delay1(1000);
  81. //        sendString("AT+CIPMODE=1\r\n");          //進入透明傳輸模式
  82. //        delay1(1000);
  83. //        sendString("AT+CIPSEND\r\n");                 //開始傳輸
  84. //        delay1(1000);
  85. //        sendString("POST /devices/527602572/datapoints?type=3 HTTP/1.1\r\n");
  86. //        delay1(1000);
  87. //        sendString("api-key:sggrqbMr4YanhJ2YyjP6E=EwWd4=\r\n");
  88. //        delay1(1000);
  89. //        sendString("Host:api.heclouds.com\r\n");  
  90. //        delay1(1000);
  91. //        sendString("Content-Length:11\r\n");
  92. //        delay1(1000);
  93. //        sendString("\r\n");
  94. //        delay1(1000);
  95. //        sendString("{"temp":");                          
  96. //        delay1(1000);
  97. //        sendString("30");                            //aa為溫度數(shù)據(jù)
  98. //        delay1(1000);
  99. //        sendString("}");
  100. //        delay1(1000);
  101. //        sendString("\r\n");
  102. //        delay1(1000);               
  103. //        ES=1;                                          //開串口中斷
  104. //}
  105. void kg1()
  106. {
  107.         sendString("AT+CIPMUX=0\r\n");
  108.         delay1(1000);
  109.         sendString("AT+CIPSTART="TCP","183.230.40.33",80\r\n");  //和服務(wù)器建立TCP連接
  110.         delay1(1000);
  111.         sendString("AT+CIPMODE=1\r\n"); //進入透明傳輸模式
  112.         delay1(1000);
  113.         sendString("AT+CIPSEND\r\n"); //開始傳輸
  114.         delay1(1000);
  115.         sendString("GET /devices/527602572/datastreams/kg1 HTTP/1.1\r\n");
  116.         delay1(800);
  117.         sendString("api-key:BfVl=mcQuY7JB9BAnAEW=UZdIB8=\r\n");
  118.         delay1(800);
  119.         sendString("Host:api.heclouds.com\r\n");
  120.         delay1(800);
  121.         sendString("\r\n");
  122.         ES=1;
  123. }
  124. void main()
  125. {
  126.         init();
  127.         while(1)
  128.         {
  129. //                if(k1==0)                  //當k1按下時就給OneNET平臺發(fā)送一次溫度數(shù)據(jù)
  130. //            {        
  131. //                        delay1(10);
  132. //                        if(k1==0)
  133. //                        {
  134. //                                chuansu();
  135. //                        }
  136. //                }
  137.                 kg1();
  138. //                        if(value == '1')
  139. //            LED1=0;
  140. //                if(value == '0')
  141. //                LED1=1;
  142. //                if(value == '3')
  143. //            LED2=0;
  144. //                if(value == '2')
  145. //                LED2=1;
  146. //                if(value == '5')
  147. //                LED3=0;
  148. //                if(value == '4')
  149. //                LED3=1;
  150. //                if(value == '7')
  151. //                LED4=0;
  152. //                if(value == '6')
  153. //                LED4=1;
  154. //                if(value == '9')
  155. //                LED5=0;
  156. //                if(value == '8')
  157. //                LED5=1;        
  158.                         switch(value)
  159.                 {
  160.                     case '1':
  161.                         LED1=0;
  162.                         break;
  163.                         case '0':
  164.                         LED1=1;
  165.                         break;
  166.                         case '3':
  167.                         LED2=0;
  168.                         break;
  169.                         case '2':
  170.                         LED2=1;
  171.                         break;
  172.                         case '5':
  173.                         LED3=0;
  174.                         break;
  175.                         case '4':
  176.                         LED3=1;
  177.                         break;
  178.                         case '7':
  179.                         LED4=0;
  180.                         break;
  181.                         case '6':
  182.                         LED4=1;
  183.                         break;
  184.                         case '9':
  185.                         LED5=0;
  186.                         break;
  187.                         case '8':
  188.                         LED5=1;
  189.                         break;
  190.                 }                 
  191.                
  192.         }
  193. }
  194. void Usart() interrupt 4
  195. {        
  196.         uchar rec;
  197.         if(RI != 0)
  198.         {
  199.                 rec = SBUF;
  200.                 RI = 0;
  201.         }
  202.         if(rec == '{')
  203.         cnt = 1;
  204.         if(cnt == 1)
  205.         {
  206.                 if(rec != '}')
  207.                 {
  208.                     recbuffer[datalen++] = rec;
  209.                 }
  210.                 else
  211.                 {
  212.                     cnt = 0;
  213.                     value = recbuffer[datalen - 1];
  214.                     datalen = 0;
  215.         }
  216.         

  217.     }
  218. }
復(fù)制代碼








歡迎光臨 ELEOK (http://m.afoofa.cn/) Powered by Discuz! X5.0