一、前言
上一篇用藍牙作為通信方式,雖然勉強完成了控制,但結果顯然不是那么符合我們的預期,既然用藍牙還需要研究一段時間,那我們就先整一些現成的,不需要研究的!iot云平臺!這里當然也是通過wifi的方式。
二、開發準備
1、硬件了解
這是官方手冊中wifi的特性描述,同樣也是2.4g,速率150M是比我之前在stm32上用過的esp8266快的,對我的預期來說那是夠夠的了,畢竟我頂多就控控燈開關,上報一下傳感器數據之類的。
2、例程選擇
我一貫都是用mqtt連接的騰訊云,所以我現在也是選擇mqtt的例程,然后這里還有ssl、tcp和ws,我選擇的是tcp,ssl強調安全加密,ws是適配瀏覽器環境的,tcp沒有加密而且輕量,直接通過1883端口通信。
3、例程分析
這個例程就比較簡單了,只對連接mqtt來說的話,其實前邊都不是我們需要關心的內容,直接從網絡連接 example_connect 這里看起就好
這里有注釋,大意就是根據在menuconfig中的選項(wifi或以太網)自動初始化對應的網絡模塊,而且要提前在menuconfig中設置wifi的參數。(我也是百度翻譯的)
但是這個函數,我是沒找到,可能不是用C來實現的吧(瞎猜的),因為這里所說的menuconfig,在vscode本來就是點一下那個設置的圖標,這里配置后邊再說
然后mqtt_app_start就是,mqtt連接的開始
點開,這里有一個config的結構體,但是跟我記憶中的不太一樣,我記得好像這個結構體以前是輸入端口,username和password之類的就行來著
點進去看看:
現在分了好幾個,我將每一個都折疊了
就是mqtt的參數和任務的參數,我看了一下,broker_t設置url,credentials_t設置username、client_id、password,其他保持默認就好,具體設置后邊說。至于全部參數的詳細作用,其實我也并不能都說得上來,有需要大家自行百度!
三、修改例程
1、設置wifi名稱和密碼
點一下下邊的這個設置,就會發現新大陸兄弟們
直接搜索wifi就好,然后輸你的wifi名稱和密碼,注意是2.4g那個,下邊的參數就用默認的就好,改完點右上角保存
2、設置mqtt的參數
因為是測試,所以我直接將騰訊云設備信息下邊那里有直接給出來的三元組直接宏定義了,服務器地址要加上mqtt://,不要url會報錯
如果是想做成通用點的程序,三元組就要通過計算了,算法官方有:
物聯網通信 設備基于 TCP 的 MQTT 接入_騰訊云
服務器地址的話可以通過snprintf,例如:
char endpoint[100];
snprintf(endpoint, sizeof(endpoint), "mqtts://%s.iotcloud.tencentdevices.com", ClientID);
然后只需要在mqtt_app_start這個函數,注釋掉本來的url,加上我們的參數,就實現簡單的連接了
3、檢驗是否激活設備
燒錄程序:
成功連接wifi后會顯示ip地址
后邊的就是mqtt訂閱成功,成功激活設備了
在平臺上看一看
4、增加上報led狀態和接收led開/關指令
①增加頭文件
②增加宏定義
topic在騰訊云上可以直接看到
③增加變量:
增加了一個燈的開關狀態變量
一個任務句柄
一個環形結構
還有一個信號量
④增加函數
1、led相關
2、存儲區部分
3、回調函數修改:
4、創建任務
我把原先的mqtt_app_start注釋不用,自己創建了一個任務,還有前邊一些初始化
任務也很簡單,就是有中斷有數據接收時,直接進入數據處理,如果是開關的話就執行led開/關的操作,并直接上報燈的狀態。如果沒有的話就5s上報一次。
但其實這里5s并不準確,因為每次上報會有數據回復,又會跳轉到處理數據這里。
四、燒錄驗證
1、串口打印消息查看
這里是主動上報的,我加了一幀打印計數
這是控制的
2、平臺查看
可以看到,數據一直有上報,并且突變時會直接上
3、實際效果
esp32C3基于idf 騰訊云mqtt控制燈亮滅視頻-CSDN直播
五、總結
中斷這里我把數據存到存儲區,然后AI搜了一下這個環形緩沖區結構,再自己修改了下,之前都是用的靜態申請空間的。
一整個流程下來,其實跟我之前STM32+ESP8266是沒什么區別的。感興趣可以對比下。
STM32+ESP8266連接騰訊IOT上傳數據(四)_stm32通過esp8266上傳數據到云平臺-CSDN博客
比stm32+eps8266這種方法省了一個cpu,穩定性還沒測,我準備到時候把功能寫完,再一直掛著試試