本次教程是使用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燈狀態上傳與命令下發(附源碼)
額,這個是程序上傳之后第二天發現的問題,所以我程序是有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 }
/********************************神奇的分割線********************************/

