021_STM32程序移植之_ESP8266連接onenet


本次教程是使用STM32C8T6通過ESP8266-12F模塊將數據傳輸到ONENET雲端去,並且雲端能夠下發命令給單片機來實現雲端控制。本次實驗硬件設備:STM32C8T6最小系統,ESP8266-12F模塊,wifi。下面是簡單的設備傳輸結構圖:

 

 

 

/********************************神奇的分割線********************************/

視頻演示教程:https://v.qq.com/x/page/i0814q78no3.html

資料下載地址:https://download.csdn.net/download/xiaoguoge11/10858840

歡迎關注公眾號:luxiaoguogege

/********************************神奇的分割線********************************/

 

/********************************神奇的分割線********************************/

   實驗中只是將定義的數據進行上傳,具體的可以自己添加外部數據采集模塊來實現數據的上傳及控制。本次實驗中查看到的資料網址:

OneNET -中國移動物聯網開放平台https://open.iot.10086.cn/

基於WIFI方式連接OneNET(ESP8266)https://open.iot.10086.cn/doc/art441.html#109

麒麟開發板代碼、資料https://open.iot.10086.cn/bbs/thread-863-1-1.html

機智雲開發板使用方法https://pan.baidu.com/s/1AQIpM4mJ5EimHEYCDM9McQ

/********************************神奇的分割線********************************/

 

/********************************神奇的分割線********************************/

關於解決連接久了之后設備斷開連接玄學BUG問題,這位大佬解決了

基於STM32和ESP8266的LED燈狀態上傳與命令下發(附源碼) 

https://open.iot.10086.cn/bbs/forum.php?mod=viewthread&tid=23845&extra=page%3D1%26filter%3Dtypeid%26typeid%3D13

 

額,這個是程序上傳之后第二天發現的問題,所以我程序是有BUG的,具體的額解決方法可以參考上面連接大佬的分析,

因為時間是什么時候斷的,具體為什么斷這個因素太不明確了,懶得再分析浪費時間,所以提出簡單粗暴的方法:

 

1. 每隔幾分鍾重新調用一次與雲端連接函數,假如連接失敗程序就會卡死在那里,那么我們就再重新初始化ESP8266再進行重連

在程序的main.c程序中替換成這個,也就是增加重連函數,這個只是暫時解決方法測試一早上esp8266重新初始化了30次左右,

但是還是能保證掉線自動連接,具體為什么斷現在原因還不太明確,等以后有時間再慢慢分析

 

main.c程序

 1 #include "public.h"
 2 
 3 int main()
 4 {
 5     int timeCount = 0;    //發送間隔變量
 6     int esp8266_rest = 0;     
 7     int connect_time = 0;   /*連接時間*/
 8     delay_init();
 9     Usart1_Init(115200);                            //串口1,打印信息用
10     Usart2_Init(115200);                            //串口2,驅動ESP8266用
11     UsartPrintf(USART_DEBUG, " Hardware init OK\r\n");
12     
13     ESP8266_Init();                    //初始化ESP8266
14         
15     while(OneNet_DevLink())    //接入OneNET
16         delay_ms(500);
17 
18    send_data.Data1 = 1;
19    send_data.Data2 = 1;
20   while(1)
21     {
22         if(++timeCount >= 500)                                    //發送間隔5s
23         {
24             printf("向onenet平台發送數據:\r\n");
25             OneNet_SendData();                                    //發送數據
26             
27             timeCount = 0;
28             ESP8266_Clear();
29         }    
30         esp8266_rec();        /*主程序中調用來進行接收,數據處理不用這個,這個只是調用*/
31         
32         if(connect_time++ >= 2000)                                    //間隔20s就重新連接一次
33         {
34               printf("重新連接平台\r\n");
35                 connect_time = 0;
36                 while(OneNet_DevLink())    //接入OneNET
37                 {
38                     esp8266_rest++;
39                 delay_ms(500);    
40                     if(esp8266_rest == 10)
41                     {
42                         send_data.Data1 += 1;
43                         printf("重新連接平台第 %d 次",send_data.Data1);
44                         esp8266_rest = 0;
45                         ESP8266_Init();                    //初始化ESP8266
46                     }
47                 }
48 
49         }                    
50         
51         delay_ms(10);
52     }
53 }
View Code

 

/********************************神奇的分割線********************************/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM