
任務2 數據上傳OneNET平臺一、任務描述本任務基于 STM32F103C8T6 最小系統板通過傳感器采集溫度、濕度、光照強度數據由 ESP-01S WiFi 模塊以MQTT 協議將數據上傳至OneNET物聯網平臺。實現硬件采集→ WiFi傳輸→MQTT上報→云端存儲顯示的完整物聯網流程掌握設備數據上報、平臺數據解析、物聯網通信格式等核心技能。二、任務目標1. 知識目標1理解MQTT 數據上報格式與 OneNET 平臺數據解析規則。2掌握溫濕度、光照傳感器數據采集與格式轉換方法。3熟悉 ESP-01S 通過AT 指令發布 MQTT 消息PUBLISH的流程。4理解 JSON 格式在物聯網數據傳輸中的作用。2. 能力目標1能夠采集溫度、濕度、光照模擬 / 數字數據。2能夠將采集數據拼接為標準 JSON 上報格式。3能夠通過 ESP-01S 將數據上傳至 OneNET 平臺。4能夠在 OneNET 平臺查看實時數據、歷史曲線。3. 素質目標1培養數據格式規范、通信時序嚴謹的工程習慣。2提升傳感器采集、數據封裝、云端調試綜合能力。3建立 “采集→處理→上傳→顯示” 的完整物聯網思維。三、任務重難點1. 任務重點1MQTT 數據上報主題$sys/產品ID/設備ID/thing/property/post2標準 JSON 數據格式包含溫度、濕度、光照。3ESP-01S 發布指令ATMQTTPUB。4數據成功上傳并在 OneNET 平臺顯示。2. 任務難點1JSON 格式錯誤導致平臺無法解析。2字符串拼接、轉義字符處理不當。3MQTT 主題錯誤、數據無法上報。4浮點型數據溫度 / 濕度格式轉換。四、知識準備1.MQTT 數據上傳原理設備作為MQTT 客戶端通過PUBLISH報文向指定主題Topic發送 JSON 格式數據平臺訂閱主題并解析、存儲、展示數據。2.OneNET 數據上報主題固定格式$sys/產品ID/設備ID/thing/property/post·必須替換為自己平臺的產品 ID和設備 ID·主題錯誤 → 數據發不出去 / 平臺收不到3.標準 JSON 上報格式必須嚴格遵守{id: 1,params: {temp: { value: 25.5 },humi: { value: 48 },light: { value: 320 }}}temp溫度humi濕度light光照格式錯誤 → 平臺顯示無數據4.ESP-01S MQTT 發布 AT 指令ATMQTTPUB0,主題,JSON數據,0,0\r\n·功能向平臺發布傳感器數據·0,0QoS0retain05.完整執行流程1設備連 WiFi2連接 MQTT 服務器任務 2 前半部分3采集溫濕度、光照4拼接成 JSON 字符串5使用ATMQTTPUB上傳6平臺顯示數據五、硬件連接ESP-01S模塊與主控STM32F103C8T6的引腳連接如表1所示。表1 ESP-01S模塊與主控STM32F103C8T6的引腳連接編號ESP-01S模塊主控STM32F103C8T61VCC3V32GNDGND3TXPA3USART2_RX4RXPA2USART2_TX硬件連接電路圖如圖1所示。圖1硬件連接電路圖六、任務實現任務 2.1 修改 main.c 代碼1.在/* USER CODE BEGIN 0 */和/* USER CODE END 0 */之間添加如下代碼char LED[10]false ,fan[10]false;2./* USER CODE BEGIN 2 */后的代碼如下/* USER CODE BEGIN 2 */Led_Init();//LED初始化Init_BH1750(); //光照傳感器初始化PWM_Init(); // 風扇驅動初始化Led_Set(LED_ON); //開啟LED燈strcpy(LED,true);OLED_Init();printf(任務2 數據上傳OneNET平臺\r\n);HAL_UART_Receive_IT(huart2,(uint8_t *)Uart2_RxData, 1);//開啟串口中斷HAL_Delay(500);esp01s_Init();//初始化esp01s連接wifiHAL_Delay(500);while(OneNet_DevLink())//連接OneNETHAL_Delay(1000);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){DHT11_Read_Data(temp, humi);light Value_GY30();printf(OneNet_SendData\r\n);OneNet_SendData();//發送數據esp01s_Clear();//清空數據緩存區HAL_Delay(3000);//3s發送一次/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */}任務 2.2 修改 onenet.c 代碼修改OneNet_FillBuf()函數的代碼如下extern uint8_t temp,humi;extern uint16_t light;extern char LED[10] ,fan[10];unsigned char OneNet_FillBuf(char *buf){char text[120];memset(text, 0, sizeof(text));strcpy(buf, {\id\:\123\,\params\:{);memset(text, 0, sizeof(text));sprintf(text, \temp\:{\value\:%d},, temp);strcat(buf, text);memset(text, 0, sizeof(text));sprintf(text, \humi\:{\value\:%d},, humi);strcat(buf, text);memset(text, 0, sizeof(text));sprintf(text, \light\:{\value\:%d},, light);strcat(buf, text);memset(text, 0, sizeof(text));sprintf(text, \LED\:{\value\:%s},, LED);strcat(buf, text);memset(text, 0, sizeof(text));sprintf(text, \fan\:{\value\:%s}, fan);strcat(buf, text);strcat(buf, }});return strlen(buf);}任務 2.3 編譯、下載、查看結果1.點擊編譯按鈕編譯程序。2.點擊下載按鈕下載程序。3.打開串口調試助手按stm32f103c8t6主控板上的復位鍵在串口調試助手中輸出打印信息如圖2所示。圖2 輸出打印信息4.刷新 OneNET設備詳情頁面設備數據已經上傳到OneNet平臺如圖3所示。圖3 設備數據上傳到OneNet平臺