【OneNET】_01_使用微信小程序通過新版OneNET平臺獲取STM32設備信息并進行控制

【OneNET】_01_使用微信小程序通過新版OneNET平臺獲取STM32設備信息并進行控制

  • 一、 前言
    • 1.1 OntNET+硬件方面: STM32F103C8T6 + ESP01S
      • 教程
    • 1.2 微信小程序方面
  • 二、STM32代碼部分修改
  • 三、微信小程序修改的部分
  • 四、小筆記(個人雜記)
    • 4.1 OneNETOneNET物聯網開放平臺
      • 產品優勢
    • 4.2 MQTT協議
    • 4.3 MQTT與HTTP區別
      • MQTT:
      • HTTP:

一、 前言

筆者在這先簡單介紹一下自己的整個系統,以好讓各位朋友能夠快速了解這篇文章對自己是否有幫助。

1.1 OntNET+硬件方面: STM32F103C8T6 + ESP01S

通過MQTT協議(筆者是直接給ESP01S刷了MQTT的AT固件,這種方法簡單方便)將采集到的光照、設備電量和開鎖信息上傳到OneNET平臺(這個過程就是向云平臺你所創建設備發布主題),并且也要訂閱云平臺你所創建設備的主題,這樣你的STM32才能收到云平臺下發的指令。

教程

視頻教程可參考:新版onenet利用stm32+esp8266接入指南 筆者這部分也是參考這位老師的,她這個接入的視頻教程沒有問題,她這個系列還有其它的視頻,有部分采用的是http協議的并且是老版OneNET,但其思想是相通的可借鑒。
注意: 她的微信小程序連接云平臺的教程和云平臺下發指令的教程,實踐有問題,我會在后續部分詳細說明。云平臺創建設備,和數據上云參考此up,微信小程序連接云平臺和指令下發建議參考下面博主的教程。

文本教程 可參考下面這位博主的文章,
1.使用新版OneNET創建MQTT設備遠程控制單片機,OneNET創建設備,我是跟著上面up做的,但這個文章看后感覺沒有問題。
2.ESP8266-01s入門:AT指令講解、上云與MQTT通信教程,AT指令部分很詳細。
3.使用微信小程序和OneNET平臺MQTT實現51/STM32單片機遠程智能控制和數據通信教程 ,他這個教程里ESP8266指令接收與處理ESP8266_ReceiveCmd() 函數我在實踐時有問題,后續在相應部分會詳細說明。

1.2 微信小程序方面

4.通過微信小程序獲取oneNET設備數據教程,這部分我也是參考了上面up和這位博主的教程,實踐發現up的教程有點小問題主要是獲取和推送所用的API方面在新版不適用,,這里用到的API都可以OneNET的官方文檔和API調試頁面找到。小程序效果如下圖。
在這里插入圖片描述

二、STM32代碼部分修改

  1. 首先要在esp01s的初始化里,加入對云平臺設備主題進行訂閱的命令。即第7條命令,命令里要修改產品ID和設備名稱,具體的文本教程有。
    注意 不先進行訂閱,后續小程序進行POST時就會報錯。
/*** @brief   初始化ESP8266* @param   無* @retval  無*/
void ESP8266_Init(void)
{ESP8266_Clear();delay_xms(100);/* 確認AT命令可以正確發送并得到響應 */printf("0. AT\r\n");while (ESP8266_SendCmd("AT\r\n", "OK"))delay_xms(100);/* 重啟ESP8266 */printf("1. AT+RST\r\n");while (ESP8266_SendCmd("AT+RST\r\n", ""))delay_xms(100);/* 設置Wi-Fi模式 */printf("2. CWMODE 設置Wi-Fi模式\r\n");    while (ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"))delay_xms(100);/* 打開DHCP */printf("3. AT+CWDHCP 打開DHCP\r\n");while (ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK"))delay_xms(100);/* 配置Wi-Fi連接 */printf("4. CWJAP 配置Wi-Fi連接\r\n");while (ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP"))delay_xms(100);/* 設置MQTT登錄用戶信息 */printf("5. MQTTUSERCFG 設置MQTT登錄用戶信息\r\n");while (ESP8266_SendCmd(ESP8266_USERCFG_INFO, "OK"))delay_xms(100);/* 發起向指定MQTT服務器的連接 */printf("6. MQTTCONN 發起向指定MQTT服務器的連接\r\n");while (ESP8266_SendCmd(ESP8266_ONENET_INFO, "OK"))delay_xms(100);/* 訂閱指定的MQTT主題 */printf("7. MQTTSUB 訂閱指定Topic\r\n");while (ESP8266_SendCmd("AT+MQTTSUB=0,\"$sys/78peC*h6uT/l*ck/thing/property/set\",0\r\n", "OK"))delay_xms(100);printf("7. ESP8266 Init OK\r\n");
}
  1. 要修改文本教程博主extractJsonValue()函數 該函數主要是從接收的字符串里提取我們需要的信息。如果碰到錯誤可以把里面的變量值都打印出來看一下,很容易就可以找出問題所在。
/*** @brief  從JSON字符串中提取出指定鍵的值* @param  *buffer 包含JSON的字符串* @param  *key 指定查找的鍵值* @param  *value 儲存查找的鍵值* @param  valueMaxLen 變量緩沖區的最大長度* @retval 無*/
void extractJsonValue(const char *buffer, const char *key, char *value, size_t valueMaxLen)
{const char *jsonStart, *jsonEnd, *keyStart, *keyValueEnd;size_t keyValueLength;size_t keyLength = strlen(key);char keyPattern[20];                   /* 預留足夠的空間存儲 key 和查找格式串 */sprintf(keyPattern, "\"%s\"", key);   /* 構建查找模式串,即 "key": *//* 查找JSON字符串的開頭 */jsonStart = strchr(buffer, '{');if (jsonStart == NULL)return;/* 查找JSON字符串的結尾 */jsonEnd = strrchr(jsonStart, '}');if (jsonEnd == NULL)return;/* 查找鍵 */keyStart = strstr(jsonStart, keyPattern);if (keyStart == NULL)return;/* 查找鍵值的結束 括號 ,確定鍵值的結束位置 */keyValueEnd = strchr(keyStart, '}');if (keyValueEnd == NULL || keyValueEnd > jsonEnd)return;/* 根據鍵值的起始和結束位置,計算鍵值的長度 */keyValueLength = keyValueEnd - keyStart;/* 拷貝鍵值到value緩沖區中 */if (keyValueLength < valueMaxLen){strncpy(value, keyStart, keyValueLength);value[keyValueLength] = '\0';   /* 添加字符串終止字符\0 */}else{/* 如果提供的緩沖區不夠大,那么可以根據實際情況處理,這里簡單地截斷字符串 */strncpy(value, keyStart, valueMaxLen - 1);value[valueMaxLen - 1] = '\0';   /* 添加字符串終止字符\0 */}
}

三、微信小程序修改的部分

  1. 獲取云平臺數據時要使用以下API,并且要把產品ID和設備名稱都放進去** url: “https://iot-api.heclouds.com/thingmodel/query-device-property?product_id=你的產品ID&device_name=設備名稱”**
 /* 獲取OneNET云平臺設備數據 */get_info() {/* 發起 HTTPS 網絡請求 獲取設備參數 */wx.request({/* 網址、產品ID、設備名 */url: "https://iot-api.heclouds.com/thingmodel/query-device-property?product_id=78pevkh6uT&device_name=lck",header: {/* 用戶鑒權信息 */"authorization": "你的鑒權信息"},method: "GET",   /* HTTP 請求方法:獲取 */success: res => {// console.log("獲取成功", res)this.setData({LockState: res.data.data[0].value,battery_state: res.data.data[1].value,sunlight: res.data.data[3].value,})// console.log("LockState:", this.data.LockState)// console.log("battery_state:", this.data.battery_state)// console.log("sunlight:", this.data.sunlight)}});
  1. 使用微信小程序向云平臺推送數據,并下發到設備時,要使用以下API,同時要確保設備在線,并訂閱了此主題。可以使用云平臺的設備調試進行模擬。url: ‘https://iot-api.heclouds.com/thingmodel/set-device-desired-property’
 // 以下數據和URL應根據實際情況進行修改wx.request({url: 'https://iot-api.heclouds.com/thingmodel/set-device-desired-property',method: 'POST',header: {/* 用戶鑒權信息 */"authorization": "鑒權信息"},data: {"product_id": "產品ID","device_name": "設備名稱","params": {"屬性標識符": 1   /* 使用傳入的ledValue設置LED的狀態 */}},success: res =>{console.log("成功",res)}});

如果有問題可以在評論區進行交流、討論。

四、小筆記(個人雜記)

4.1 OneNETOneNET物聯網開放平臺

OneNET物聯網開放平臺是中國移動打造的面向產業互聯和智慧生活應用的物聯網PaaS平臺,OneNET支持適配各種網絡環境和協議類型,可實現各種傳感器和智能硬件的快速接入,提供豐富的API和應用模板以支撐各類行業應用和智能硬件的開發,有效降低物聯網應用開發和部署成本,滿足物聯網領域設備連接、智能化改造、協議適配、數據存儲、數據安全以及大數據分析等等平臺級服務需求。
在這里插入圖片描述

產品優勢

  1. 設備快速開發
    支持MQTT、CoAP、LwM2M、HTTP等多種行業主流標準協議及私有協議接入;支持2G、4G、NB-IoT、Wi-Fi、藍牙、Thread等多種通訊模組接入能力,提供設備端SDK及基于模組的接入能力,幫助開發者快速實現設備接入和產品智能化開發。
  2. 一站式應用開發
    提供通用領域服務和行業業務建模基礎模型,幫助開發者在線快速構建云上應用和進行應用托管;提供和物APP,用戶不必關注底層實現,只需通過配置專屬交互控制界面,即可完成智能家居場景APP應用開發,提高應用開發效率。
  3. 高效數據處理
    提供高可靠的實時消息云服務,保障開發者業務穩定運行,提供規則引擎、場景聯動等能力,幫助開發者靈活定義設備數據的解析過濾規則、存儲、輸出等,降低用戶數據處理成本。
  4. 增值服務升級
    提供遠程升級OTA、位置定位LBS、消息隊列MQ、數字可視化View、人工智能AI等增值能力,助力開發者產品升級;以強大的OneNET生態為基礎,打通國內外產品線上線下渠道,助力產品快速出貨和流量變現。以上引自官方文檔。

4.2 MQTT協議

MQTT(Message Queuing Telemetry Transport) 是一個輕量級的、基于客戶端/服務器的消息發布/訂閱的傳輸協議,專為低帶寬和不穩定網絡環境設計,廣泛用于物聯網設備之間的通信。
在MQTT中,設備可以作為發布者發送消息,或者作為訂閱者接收特定主題(Topic)的消息。這個模型允許多個設備共享特定的數據點并響應相應的變化。
MQTT設備使用這一協議,通過輕量級的消息交換,實現設備間的有效通訊和數據傳輸。

  1. 在OneNET平臺上使用MQTT進行設備通信時,設備充當MQTT客戶端、云平臺作為服務器,通過發布(publish)消息到平臺,或者訂閱(subscribe)平臺消息來實現與云端的雙向通信。
  2. 利用MQTT設備進行數據上傳的步驟通常包括:
  • 設備注冊:在OneNET平臺注冊設備,獲取設備ID等必要信息。
  • MQTT連接:設備使用MQTT協議與OneNET建立連接,完成認證。
  • 數據上傳:設備發布消息到指定的Topic,將數據上傳到云平臺。
  • 命令下發及控制:云平臺可發布消息給設備,設備訂閱對應Topic以接收命令或控制信息。
  • 實時監控:開發者或用戶利用平臺提供的應用程序接口(API),實現數據監控和設備管理。
    OneNET的MQTT服務使得IoT設備能夠以一種穩定且高效的方式與云端資源進行交互,使得管理和操作變得更加簡單靈活。

4.3 MQTT與HTTP區別

MQTT設備與HTTP設備在連接OneNET云平臺時使用的協議不同,各自有著不同的特點和適用場景。以下是兩者的主要區別:

MQTT:

  1. 輕量級協議:MQTT設計簡潔,數據包小,適用于帶寬有限的情況。
  2. 節省能源:設備可以長時間保持連接狀態,但不會頻繁發送數據,適合用電池供電的設備。
  3. 支持離線消息:通過“遺囑消息”等機制,即使設備離線也能保證一定程度的消息傳遞。
  4. 低延遲:基于發布/訂閱機制,可以快速響應和分發消息,幾乎實時的通訊體驗。
  5. 支持多對一和一對多通訊:一個主題可以有多個訂閱者,適用于廣播和分布式消息通訊。

HTTP:

  1. 基于請求/響應模式:客戶端發起請求,服務器回應請求,沒有長期連接狀態。
  2. 更加通用和普遍:HTTP作為互聯網的基礎協議,被絕大多數網絡應用支持。
  3. 連接簡單:HTTP的無狀態特性使得每次通信簡潔明了,但每次交互都需要重新建立連接。
  4. 相對較高的功耗和延遲:因為需要頻繁的連接建立和斷開,對能量消耗和通信延遲有影響。
    在物聯網應用中,選擇MQTT還是HTTP通常取決于特定的需求和場景。如果需要低功耗、持續連接、低延遲及大量設備間通信的應用,MQTT是更好的選擇。而對于偶爾傳送數據或者和現有Web服務進行交互的應用,HTTP可能更為合適。
    OneNET云平臺提供了對這兩種協議的支持,以滿足不同物聯網項目的需求。開發者可以根據具體情況選擇最適合的通信方式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81858.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81858.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81858.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用 python 編寫的一個圖片自動分類小程序(三)

圖片自動分類識別小程序記錄 2025/5/18 0:38修改程序界面&#xff0c;增加一些功能 用 python 編寫的一個圖片自動識別分類小程序。 操作系統平臺&#xff1a;Microsoft Windows 11 編程語言和 IDE&#xff1a;python 3.10 Visual studio code 一&#xff1a;圖片自動分…

嵌入式硬件篇---SGP30 氣體傳感器

文章目錄 前言一、SGP30 氣體傳感器詳解(一)基本概述(二)工作原理傳感器結構檢測機制自校準功能(三)主要特性(四)應用場景智能家居空氣質量檢測儀汽車行業商業建筑二、TVOC 與 eCO2 的含義(一)TVOC(總揮發性有機化合物)定義危害健康標準(二)eCO2(等效二氧化碳)…

【原創】ubuntu22.04下載編譯AOSP 15

安裝依賴的庫&#xff0c;順便把vim 也安裝一下 sudo apt-get install vim sudo apt-get install git gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip font…

防止勒索病毒的兜底方案——備份

勒索病毒入侵會對您的業務數據進行加密勒索&#xff0c;導致業務中斷、數據泄露、數據丟失等&#xff0c;從而帶來嚴重的業務風險。 防止勒索病毒有三個方向&#xff1a; 1&#xff09;實時防御已知勒索病毒 各個云廠商的云安全中心實現了對大量已知勒索病毒的實時防御。在服務…

es在已有歷史數據的文檔新增加字段操作

新增字段設置默認值 場景 在已經有大量數據的索引文檔上&#xff0c;增加新字段 技術實現 一.更新索引映射 通過PUT請求顯式定義新字段類型&#xff0c;確保后續寫入的文檔能被正確解析 PUT /文檔名/_mapping {"properties": {"字段名1": {"type…

留給王小川的時間不多了

王小川&#xff0c;這位頭頂“天才少年”光環的清華學霸、搜狗輸入法創始人、中國互聯網初代技術偶像&#xff0c;正迎來人生中最難啃的硬骨頭。 他在2023年創立的百川智能&#xff0c;被稱為“大模型六小虎”之一。今年4月&#xff0c;王小川在全員信中罕見地反思過去兩年工作…

深入掌握MyBatis:連接池、動態SQL、多表查詢與緩存

文章目錄 一、MyBatis連接池1.1 連接池的作用1.2 MyBatis連接池分類 二、動態SQL2.1 if標簽2.2 where標簽2.3 foreach標簽2.4 SQL片段復用 三、多表查詢3.1 多對一查詢&#xff08;一對一&#xff09;3.2 一對多查詢 四、延遲加載4.1 立即加載 vs 延遲加載4.2 配置延遲加載 五、…

TDesign AI Chat - Vue3.x 可用!騰訊出品的 AIGC 交互對話組件,免費開源、包含設計資源

各位前端開發者有遇到做 AI Chat 項目的聊天交互界面需求了嗎&#xff1f;TDesign 出品的這個組件很不錯&#xff0c;推薦給大家。 TDesign AI Chat 是 TDesign 為 AIGC 場景開發的 UI 系列組件中的一部分&#xff0c;主要用于開發目前非常流行的 ChatBot 對話交互場景。最近 …

spring -MVC-02

SpringMVC-11 - 響應 在 SpringMVC 中&#xff0c;響應是服務器對客戶端請求的反饋&#xff0c;它可以以多種形式呈現&#xff0c;包括視圖名稱、ModelAndView 對象、JSON 數據以及重定向等。以下是對 SpringMVC 中不同響應類型的詳細介紹&#xff1a; 1. 視圖名稱 通過返回…

老舊設備升級利器:Modbus TCP轉 Profinet讓能效監控更智能

在工業自動化領域&#xff0c;ModbusTCP和Profinet是兩種常見的通訊協議。Profinet是西門子公司推出的基于以太網的實時工業以太網標準&#xff0c;而Modbus則是由施耐德電氣提出的全球首個真正開放的、應用于電子控制器上的現場總線協議。這兩種協議各有各的優點&#xff0c;但…

ubuntu下docker安裝mongodb-支持單副本集

1.mogodb支持事務的前提 1) MongoDB 版本&#xff1a;確保 MongoDB 版本大于或等于 4.0&#xff0c;因為事務支持是在 4.0 版本中引入的。 2) 副本集配置&#xff1a;MongoDB 必須以副本集&#xff08;Replica Set&#xff09;模式運行&#xff0c;即使是單節點副本集&#x…

【前端開發】Uniapp日期時間選擇器:實現分鐘動態步長設置

技術棧 Uniapp + Vue3 + uView年份顯示前后一年,分鐘動態設置間隔效果圖 主體顯示<view class="uni-row-between selector"><view class="uni-flex-1 left" @click="!props.disabled && openPicker()"><uni-iconscolor=…

iOS 藍牙開發中的 BT 與 BLE

在 iOS 開發者的語境里&#xff0c;大家把 BT 和 BLE 當成兩種不同的藍牙技術在談——它們來自同一個 Bluetooth 規范&#xff0c;但面向的場景、協議棧乃至 Apple 提供的 API 都截然不同。 縮寫全稱 / 技術名稱規范層叫法iOS 支持現狀典型用途BTBluetooth Classic&#xff08…

Flink CEP是什么?

Apache Flink 的 CEP&#xff08;Complex Event Processing&#xff0c;復雜事件處理&#xff09; 是 Flink 提供的一個庫&#xff0c;用于在無界數據流中檢測符合特定模式的事件組合。 &#x1f3af; 一、什么是 CEP&#xff1f; ? 定義&#xff1a; CEP 是一種從連續的數據…

ARM (Attention Refinement Module)

ARM模塊【來源于BiSeNet】&#xff1a;細化特征圖的注意力&#xff0c;增強重要特征并抑制不重要的特征。 Attention Refinement Module (ARM) 詳解 ARM (Attention Refinement Module) 是 BiSeNet 中用于增強特征表示的關鍵模塊&#xff0c;它通過注意力機制來細化特征圖&…

AR0144CSSC20SUKA0-CRBR——1/4英寸 1.0 MP 高性能CMOS圖像傳感器解析

產品概述&#xff1a; AR0144CSSC20SUKA0-CRBR 是一款1/4 英寸&#xff0c;1.0 Mp CMOS 數字圖像傳感器&#xff0c;帶有 1280H x 800V 有效像素陣列 全局快門CMOS數字圖像傳感器&#xff0c;它結合了新型的創新全局快門像素設計&#xff0c;適用于準確快速的移動場景捕捉。該…

深入理解遞歸算法:Go語言實現指南

深入理解遞歸算法&#xff1a;Go語言實現指南 引言 遞歸是編程中一種優雅而強大的算法思想&#xff0c;通過函數自我調用的方式解決復雜問題。本文將使用Go語言演示遞歸的核心原理&#xff0c;并通過典型示例幫助開發者掌握這一重要技術。 一、遞歸基礎概念 1.1 遞歸定義 遞歸…

vue2實現【瀑布流布局】

瀑布流 1. 解釋2. 形成結構和樣式3. 自定義指令 1. 解釋 瀑布流特征&#xff1a; 等寬不等高&#xff1a;元素寬度固定&#xff0c;高度根據內容自適應。錯落排列&#xff1a;元素像瀑布一樣從上到下依次填充&#xff0c;自動尋找最短列插入 體現&#xff1a;圖中第一排1&…

CSS display有幾種屬性值

在 CSS 中&#xff0c;display 屬性是控制元素布局和渲染方式的核心屬性之一。它有多種屬性值&#xff0c;每個值都決定了元素在文檔流中的表現形式。以下是 display 的主要屬性值分類及說明&#xff1a; 1. 塊級和行內布局 塊級元素 (block) 特性&#xff1a;獨占一行&…

基于Java實現可靠傳輸

實現可靠傳輸 1. 結合代碼和 LOG 文件分析針對每個項目舉例說明解決效果。 RDT1.0 對應 Log 日志&#xff1a;Log 1.0.txt&#xff0c;接收文件 recvData 1.0.txt RDT1.0 版本是在可靠信道上進行可靠的數據傳輸&#xff0c;因此沒有過多的內容需要說明&#xff0c;發送方 L…