• 方案介紹
    • 一、復刻項目的一般步驟
    • 二、 復刻的流程描述
    • 三、關于供電問題(很重要,很重要)
    • 四、復刻過程中可能會出現(xiàn)的各種問題疑問
    • 五、關于Qt上位機的源碼編譯問題
    • 六、 關于上位機源碼問題
    • 七、OneNet替換騰訊云IOT平臺
    • 八、源碼、文檔下載
  • 附件下載
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

STM32項目復刻制作流程講解、常見問題解決【合集】

6小時前
226
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

更多詳細資料請聯(lián)系.docx

共1個文件

注意?。?!【如果第一次了解項目的同學,請認真看完第一章,第二章、第三章,文章有目錄?。 ?/strong>
注意?。?!【如果第一次了解項目的同學,請認真看完第一章,第二章、第三章,文章有目錄?。 ?/strong>
注意?。?!【如果第一次了解項目的同學,請認真看完第一章,第二章、第三章,文章有目錄!!】

項目設計里用到的全部工具軟件,Qt安裝包、keil安裝包,各種調(diào)試助手,都可以在這里下載。
https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink

項目源碼可以去這里下載:
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU5Mjg3NTMxOQ==&action=getalbum&album_id=3230261637572755458#wechat_redirect

本文章內(nèi)容會實時更新,常見的問題會隨時記錄在冊。

在這里插入圖片描述

一、復刻項目的一般步驟

有2案例視頻,演示了從0開始復刻項目的過程:

這是案例【1】


STM32項目復刻實物的過程演示(從0開始演示組裝過程)

這是案例【2】


【2】STM32項目制作過程演示(環(huán)境檢測類物聯(lián)網(wǎng)項目)

程序下載過程講解【3】


講解STM32如何通過串口下載程序

下面以 某 個STM32項目為例。 所有的項目復刻過程都是以下的流程。

首先說明: 如果是單片機、STM32的項目。 你想打開項目源碼,編譯,就需要自己要安裝好keil軟件、安裝keil5,如果不會安裝百度自行找教程安裝。 設計文檔里都沒有寫keil軟件的安裝教程,這是單片機開發(fā)最基礎的工具。

這里是keil的完整安裝包的下載地址:
https://pan.quark.cn/s/4b10a7f126c6


keil軟件的安裝教程

項目設計里用到的全部工具軟件,都可以在這里下載。
https://pan.quark.cn/s/145a9b3f7f53

1.1 第1步

照著設計文檔,買回來硬件模塊。

每個項目都設計文檔: 打開設計文檔的目錄查看,找到硬件選型章節(jié),買回項目所需要的硬件,每個模塊的硬件型號,硬件鏈接都貼了的。照著點擊鏈接去買就行了,毫無壓力。

image-20240322132001847

image-20240322132127263

1.2 第2步

硬件買回來之后,然后按照硬件接線章節(jié)的硬件連線說明,將模塊與STM32開發(fā)板之間連接好線。

每個項目都設計文檔: 打開設計文檔的目錄查看,找到STM32設備端代碼設計章節(jié),找到硬件連線說明。

可能需要注意的一些問題:如果你接線之后,發(fā)現(xiàn)某些模塊無法正常使用。 接線也沒錯。 比如: RC522刷卡模塊、步進電機模塊、這些模塊。 注意去對比下你下載的STM32工程代碼里的接線說明。 每個工程里每個模塊都有對應的.h文件,.h文件里有說明當前工程里模塊對應的接線。
文檔的內(nèi)容寫完就發(fā)表,而代碼可能會因為后續(xù)調(diào)試做一些更改,沒有更新文檔,不過這個只是少部分項目。 大家復刻的時候注意看下工程對應接線就行。 有問題也可以私信問。
image-20240322131548073

下面是接線的過程:

按照設備文檔的說明,買回來硬件之后,拆開快遞,拿出來的模塊,就是下面這樣的。

image-20240321094343129

然后照著設計文檔的說明使用杜邦線進行接線就行了。

不知道如何接線? 沒關系,我下面以DHT11溫濕度傳感器為例,畫圖說明。你看懂了這個。其他模塊也差不多的。

在這里插入圖片描述

在這里插入圖片描述

注意: 如果是 OLED顯示屏,直接插上去就行了,買的開發(fā)板上本身就有排母,照著接,看準開發(fā)板板子上的 絲印說明,靠左插入,開發(fā)板的排母右邊最終會空出一個多余的插孔叫BL,這個OLED顯示屏用不到。

image-20240120160855493

如果是LCD顯示屏直接插上去就行。

image-20240227232916603

注意: 開發(fā)板自帶了4個按鍵,其中第2是個RST 是復位鍵、另外3個按鍵是可編程的獨立按鍵。

如果硬件接線里有說板載按鍵、板載LED燈,就是說的板子本身自帶的按鍵和LED,不用接。

image-20240321093357574

如果想固定板子,可以買個熱熔槍+熱熔膠棒,將模塊固定在板子上。

image-20240321094420385

最終的效果:

image-20240321094518439

1.3 第3步

使用手機開一個熱點。
(1)名字設置為: abc
(2)密碼設置為:12345678

注意事項:
WIFI頻段設置為:2.4GHZ

千萬注意:熱點的名字,密碼,頻段一點要設置正確。 否則,到時候,ESP8266-WIFI連接不上。 ESP8266 只能連接2.4GHZ的WIFI。

一切額外的情況:有些手機開啟的熱點后設置為2.4GHZ還是連接不上,這一般是熱點的加密方式ESP8266不支持,可以將你手機的熱點設置為開放網(wǎng)絡,也就是不要密碼,任何人可以連接這種,再次測試。 STM32代碼不用改,只要WIFI的名稱一樣即可

1.4 第4步

如果你的項目用到了云服務器。也就是物聯(lián)網(wǎng)平臺。那么就需要修改代碼,設置連接你自己的設備。

打STM32的keil工程。
在這里插入圖片描述

打開之后,先設置keil的編碼。
在這里插入圖片描述

然后再看下面的圖片改代碼:
在這里插入圖片描述

如果你是華為云物聯(lián)網(wǎng)云平臺,還需要改一處地方。
看下面圖片。
在這里插入圖片描述

還可以看視頻:

講解STM32如何通過串口下載程序

1.5 第5步

打開工程,代碼修改完畢之后,編譯代碼、然后,使用USB線將開發(fā)板的左邊的USB口(串口1)與電腦的USB連接,打開程序下載軟件下載程序。

具體下載過程看下面圖:

image-20240319223247836

打開程序下載軟件:

image-20240120160735942

還可以看視頻:

STM32單片機程序下載方法講解

1.4 第5步

下載成功之后,串口調(diào)試助手會打印初始化過程。 比如:ESP8266的初始化過程,以及WIFI熱點的連接過程。

串口調(diào)試助手網(wǎng)上隨便找一個就行了,任何串口調(diào)試助手都可以的,只是為了看一下打印的信息。

image-20240322132400283

如何提示ESP8266-錯誤,那么就認真檢查WIFI接線。

如果顯示W(wǎng)IFI連接失敗,請認真檢查 第三步。

如果一切正常,就進入了程序主界面。

這時候,打開微信小程序(如果你是微信小程序) 或者 手機APP(如果你是手機APP) ,也能看到設備的最新數(shù)據(jù),點擊控制按鈕,也能控制設備了。

到此,恭喜你,整個項目已經(jīng)完成開發(fā)。

注意: 如果你的項目用到了手機APP 或 Window上位機 ,你可以直接將資料包里的 Android手機的安裝包(后綴是.apk)的文件拷貝到手機直接安裝使用。 如果是Window上位機直接雙擊可執(zhí)行目錄下的exe應用程序文件運行。

1.5 【對于使用華為云IOT服務器的項目復刻】

關于帶華為云IOT的項目。 復刻就是兩種:
【方案1】你不需要自己創(chuàng)建華為云,采用原本代碼里已經(jīng)配置好的華為云服務器。 你直接安裝編譯好的手機APP使用,或者 打開電腦的APP使用。
【方案2】你自己創(chuàng)建了華為云服務器,你要替換你的華為云服務器。那么就需要改STM32代碼里main.c最前面的MQTT參數(shù),然后改Qt上位機代碼里widget.h里的服務器參數(shù)。 然后重新編譯生成APP,就可以了。 QT代碼編譯支持編譯Windows 的APP 和 Android的APP,Windows的編譯教程在設計文檔里已經(jīng)展示了。 Android的編譯需要配置Android環(huán)境,這個需要翻墻才好配置,需要網(wǎng)絡能夠訪問谷歌。這個配置過程可以自己搜搜教程解決。只要配置好了Android環(huán)境,能夠建立Android 工程,打開代碼就可以編譯出Android的APP 了。

對應的視頻:
【1】介紹STM32物聯(lián)網(wǎng)項目工程移植需要修改的地方 https://www.bilibili.com/video/BV17t42177WL
【2】Qt上位機源碼如何打開?編譯?運行? https://www.bilibili.com/video/BV1Cz42117Hh

那如何選擇呢? 這個看你自己的能力。
選擇【方案1】就不用改代碼,下載代碼就可以使用。
選擇【方案2】就需要改代碼,匹配你的華為云服務器。
不管你選擇【方案1】還是【方案2】對你看STM32代碼,看Qt代碼,對代碼學習,了解代碼如何設計的都沒有影響。

很多同學擔心華為云IOT服務器的費用,這個不用擔心: 遙遙領先的物聯(lián)網(wǎng)服務器是免費使用的??梢悦赓M創(chuàng)建1000個設備。

image-20240322132800075

二、 復刻的流程描述

在電腦上解壓已經(jīng)下載好的項目資料包,認真看設計文檔,買好硬件材料,硬件接線查看文檔STM32設計章節(jié)的第1小節(jié),有詳細描述如何接線,一定要認真看著說明接,接好線,下載代碼進去就可以了。

只要按照我說的做,只要模塊材料齊全,1天時間內(nèi)(都用不到一天),就可以完全做出我博客一模一樣,完全一樣的設計。

整體步驟復述:

(1) 下載自己想復刻的項目資料包

(2) 電腦安裝好keil軟件(我用的keil5)

(3)打開資料包里自帶的PDF設計文檔,先將設計文檔整體閱讀一遍(不要走馬觀花),先將文檔內(nèi)容閱讀一次之后,對文檔的內(nèi)容有一個大致的記憶,一定要記得看目錄,文檔都有目錄。

(4)照著設計文檔里第二章,去買好項目所需的全部硬件材料(STM32開發(fā)板不要亂換,換了代碼就得有改動,除非你有能力改代碼)。

(5)如果你復刻的項目里涉及到云平臺:比如,OneNet、騰訊云+微信小程序,華為云IOT服務器,那么就按照文檔的步驟一步一步去完成設計,完成模擬數(shù)據(jù)上傳以及測試。

(6)將淘寶買回來的模塊按照設計文檔STM32設計章節(jié)第1小節(jié)的硬件連線介紹,將模塊與STM32連接好。

項目里唯一需要焊接的地方是,解決電源不夠接擴展電源的情況下焊接排針擴展電源。
在這里插入圖片描述
如果你不方便焊接,可以直接在淘寶買電源擴展板。
鏈接: https://item.taobao.com/item.htm?id=647681090119&skuId=4672158745999&spm=a1z0d.6639537/tb.1997196601.4.754374841n18eN

買2個擴展板,方便分別擴展5v電源 和 3.3V電源。 將開發(fā)板的5V和3.3V電源分別用杜邦線接入到下面的擴展板最前面橫著的一排的VCC和GND上。其他模塊就可以將電源接在此擴展板上豎著的VCC和GND上了,解決電源不夠接的問題。
在這里插入圖片描述

(7)打開keil工程(工程文件一般在STM32源碼目錄下的USER目錄下,只要安裝好keil,就會自動識別工程文件)。如果你的項目涉及到云,比如:OneNet、騰訊云+微信小程序,華為云IOT服務器,那么需要打開工程里main.c文件,翻到最前面有幾個宏定義,設置MQTT服務器的三元組,設置ESP8266連接的WIFI名稱和熱點。要根據(jù)自己的實際情況進行修改。 MQTT三元組,訂閱主題、發(fā)布主題等等,根據(jù)自己在步驟(5)里測試最終得到的結(jié)果如實填入就行。 如果是用的onenet的HTTP協(xié)議上傳云端數(shù)據(jù),代碼里要修改自己的API KEY ,代碼里都會有注釋,如果用的SIM800C聯(lián)網(wǎng) 要注意插移動卡和聯(lián)通卡。

注意: 如果你的項目用的是華為云IOT物聯(lián)網(wǎng)服務器,肯定會用到Qt設計的Android手機APP,如果你簡單復刻項目,就不要改STM32代碼里的MQTT任何東西,QT上位機源碼也不用改,安裝我資料包里提供的手機APP安裝包或者Windows可執(zhí)行文件打開使用就行了。 如果你確實要修改或者增加上位機APP的工程,你下載的資料包里又沒有上位機源碼,可以單獨下載,在我的CSDN博客里可以單獨下載(CSDN里部分涉及華為云的項目資料,QT上位機源碼和STM32源碼是分開的),如果是在我的微信公眾號里下載的項目,就不用管,微信公眾號里下載的資源包都是帶了上位機源碼的。

(8)打開keil工程編譯,編譯成功之后,將程序下載到STM3開發(fā)板即可。下載方式看自己,串口下載也可以,使用stlink、jlink之類的下載器都可以,自己會哪種就用哪種,我基本上是采用串口下載HEX文件,這個在每個項目的演示視頻里我也演示過,視頻都在我的B站里。
地址在這里:
https://space.bilibili.com/68130189

這里有手把手教學視頻,如何制作項目: https://www.bilibili.com/video/BV1ar421x7rt
講解如何編譯代碼,下載STM32程序: https://www.bilibili.com/video/BV1Cw4m1e7Yc
演示上位機源碼如何設計如何開發(fā),手機APP如何開發(fā)出來的: https://www.bilibili.com/video/BV1Cz42117Hh

我的微信公眾號名稱: 《DS小龍哥嵌入式技術(shù)資訊》 打開微信搜索一下,就可以找到我的微信公眾號。在我的CSDN文章最底下,最底下,也有我的微信公眾號的推廣,點開就可以關注。

三、關于供電問題(很重要,很重要)

很多設計里用到的MQ2、MQ4、MQ3、MQ7、MQ135、MQxxx 系列的模塊,還用到了電機、風扇、充氧泵等一系列電機,還用到了SIM800C這種2G模塊、Air724UG等這種4G模塊,ESP8266這種WIFI模塊。 如果板子只是一根USB線供電,可能會導致系統(tǒng)供電不足。

出現(xiàn)的現(xiàn)象就是:
(1)板子插電腦上,發(fā)現(xiàn)串口被占用,串口無法使用。
(2)ESP8266硬件初始化錯誤,或者WIFI初始化之后卻連接不上網(wǎng)絡,SIM800C初始化不成功,4G模塊無法聯(lián)網(wǎng)等等問題。

那如何解決供電不足的問題?

【1】解決方案1

(1)如果你的設計可以用有線電源供電,就買下面推薦的穩(wěn)壓模塊。

那么需要采用外部電源供電,買一個下面的 可調(diào)電源穩(wěn)壓模塊 ,一個12V 、2A的電源插頭就可以了。 買回來之后,將模塊的電源都接在這個電源穩(wěn)壓模塊上,將STM32開發(fā)板上的5V和GND分別用杜邦線接到穩(wěn)壓模塊的5V和GND上即可。

采用外部電源供電,接好線之后的效果如下:
在這里插入圖片描述

在這里插入圖片描述

電源模塊的可調(diào)電壓輸出功能演示(調(diào)整輸出的電壓)

穩(wěn)壓模塊購買

鏈接:https://item.taobao.com/item.htm?spm=a21n57.1.0.0.2921523cQeodt2&id=16606969730&ns=1&abbucket=7#detail

image-20230919222637274

img

電源插頭購買

鏈接:https://item.taobao.com/item.htm?id=616513772095&price=12.5-28&sourceType=item&sourceType=item&suid=28568653-f37a-44d9-ba7f-79370acc2a9e&ut_sk=1.Y%2BSje8BXEHwDAAzffoCNOQAM_21646297_1700218130362.TaoPassword-WeiXin.ShareGlobalNavigation_1&un=6f62cf65130082c7143b731291a8a715&share_crt_v=1&un_site=0&spm=a2159r.13376460.0.0&sp_abtk=gray_ShareGlobalNavigation_1_code_simpleAndroid2&sp_tk=cTJPQVczdDRwNFI%3D&cpp=1&shareurl=true&short_name=h.5kwQOCl&bxsign=scd4p22mFtBbwnGM_SWdgwgZ27RN8IEynH4PqvQihq_j_z9InPF1g10n1NbTKmLx8KZRz6HVuBpo_O9axHjCBbsVlVvTKl9u7l4CGsrBWq6-xf26Zvx5y-ND4YT_gNAlrvG&tk=q2OAW3t4p4R&app=chrome

在這里插入圖片描述

【2】解決方案2

如果你的設計不方便有線電源供電,可以買2節(jié)18650的鋰電池供電。
鏈接: https://item.taobao.com/item.htm?app=chrome&bxsign=scdWKVX6xkbedt27TdLuqsjKd4c34isdT0gZpZ6Rql3CrMhv4w1KkR960SB5uamO4RV9gBhyxDg2apbGLyi-QEbVPbZlprpy__rI36GVSLcuW3FXEyfFlrP2duVwIh-_HKE&cpp=1&id=680313999743&price=13.8-57.8&shareUniqueId=25182787879&share_crt_v=1&shareurl=true&short_name=h.5qalsefob26nVI9&skuId=4973548713014&sourceType=item,item&sp_abtk=gray_1_code_simpleAndroid2&sp_tk=cGNoOFc3d1VmelI=&spm=a2159r.13376460.0.0&suid=2d94278f-4fab-44a0-b64a-1682588b096f&tbSocialPopKey=shareItem&tk=pch8W7wUfzR&un=5e1fcf13ad2864b5c078635431fc6d24&un_site=0&ut_sk=1.YJxexVHulMoDAFMawSZrEvzT_21646297_1705592795291.Copy.1

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

四、復刻過程中可能會出現(xiàn)的各種問題疑問

在復刻的時候,很多同學都會問,我用C8T6可以嗎?我用ZET6可以嗎?

首先,你要了解STM32F103這個系列。
在這里插入圖片描述

STM32F103是一個系列。 RCT6 C8T6 ZET6 RBT6 這些都是里面表示不同配置的芯片。 就像你買手機,你買iPhone15 有128G配置,有256G配置,有512G配置,有1TB配置 。
這就是 STM32F103后面的 RCT6 C8T6 ZET6 RBT6 區(qū)別。
不是說 ZET6 和 RCT6 是不同的芯片。 他們是一樣的。

區(qū)別就在于:不同的型號它的引腳數(shù)量不一樣、flash、sram大小不一樣。
如果工程是RCT6的,你想用C8T6?那你要確定目前項目里使用的STM32的GPIO口在C8T6里有沒有,如果有就可以。

在這里插入圖片描述

STM32F103C8T6最小系統(tǒng)板的IO口。
PB11 PB10 PB1 PB0 PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 PC15 PC14 PC13 
PB12 PB13 PB14 PB15 PA8 PA9 PA10 PA11 PA12 PA15 PB3 PB4 PB5 PB6 PB7 PB8 PB9



PA13(SWDIO)和PA14(SWCLK): 用作STLNK-V2下載器的-SW模式的下載口。

(1)LCD顯示屏為什么不亮?下載代碼之后屏幕不顯示怎么辦? ESP8266-WIFI顯示硬件初始化錯誤或者連接不上熱點怎么辦? 屏幕上一直顯示 WIFI Connect怎么辦??

這些問題都是指向一個問題: 你的ESP8266 連不上你的熱點。

首先,我得說明一下: 只要你現(xiàn)在做的項目是物聯(lián)網(wǎng)項目,只要里面使用到了WIFI或者2G、4G模塊,支持這種需要聯(lián)網(wǎng)上傳數(shù)據(jù)的功能。 那么,在初始化階段,模塊一定要初始化成功,單片機才會運行接下來的程序。

就比如,上面提到這些問題,為什么屏幕不顯示?卡住?數(shù)據(jù)不動? 其實不是卡住,是現(xiàn)在ESP8266-WiFi正在連接你的WIFI熱點。 (這個問題在每個視頻里(我發(fā)布在B站的視頻),也就是項目對應的視頻里,都有講解這個上電WIFI連接的過程,很多同學其實不愛看視頻講解,也不愛看文檔,看了就是簡單瞟一眼就完了,結(jié)果做的時候遇到一堆問題,其實只要認真看文檔+視頻,90%的問題都已經(jīng)可以解決了)

那么怎么解決上面說的問題?
(1) 如果是ESP8266-WIFI,就打開工程里main.c文件,翻到最前面有幾個宏定義,設置ESP8266連接的WIFI名稱和熱點; 上電的時候,ESP8266必須要連接指定的熱點,連接成功之后,才可聯(lián)網(wǎng),才可以繼續(xù)執(zhí)行程序。(你的手機同時也要開啟熱點,頻段設置為2.4GHZ)
(2)如果是2G模塊或者4G模塊,就檢查SIM卡是否插入,是否插入正確,2G模塊要插移動卡,比如:SIM800C。
(3) ATK-ESP8266的電壓接5V,不要接3.3V,怕你的USB線供電電流不夠?qū)е聼o法正常工作(不要用開發(fā)板自帶的黑色USB線,用單獨買的質(zhì)量好一點的藍色USB線)。

那么按照上面的操作之后,發(fā)現(xiàn)你的ESP8266還是連接不上? LCD顯示屏還是卡住?

繼續(xù)看下面的第【2】小節(jié)的內(nèi)容。

(2)ESP8266-WIFI初始化不成功、ESP8266-WIFI連接不上熱點怎么辦?

如果你的項目是屬于物聯(lián)網(wǎng)的項目,也就是項目中用到了ESP8266-WiFi,一定要注意: 如果ESP8266無法正常工作,無法正常連接網(wǎng)絡。整體的程序是無法正常運行的。也就造成了,屏幕不顯示任何東西,按鍵無反應,等等現(xiàn)象。 這里一定要注意看。

第一步,保證你的ESP8266接線正常,一定檢查清楚。
如果還是無法解決,可以看我的B站視頻(講解ESP8266的調(diào)試):
https://www.bilibili.com/video/BV1ku4y1E74M

第二步,自己手機開熱點的時候,要配置正確。
在這里插入圖片描述
在這里插入圖片描述

第三步,檢查USB供電的線,需要質(zhì)量好一點線,我文中用到的STM32F103RCT這款開發(fā)板本身自帶的黑色USB線,質(zhì)量特別差,所以在項目硬件材料里我都會讓大家買一條藍色USB下載線進行使用,原因就是這個。
在這里插入圖片描述

第四步,打開串口調(diào)試助手,查看程序運行的狀態(tài)。 如果WIFI連接不上,或者顯示屏沒什么反應。一定要打開串口調(diào)試助手看問題原因。

打印:WIFI:0 就表示ESP8266已經(jīng)連接到路由器。 如果打印的是 WIFI:6 就表示ESP8266無法連接你的熱點,這就要認真檢查上面描述的這些問題了。 如果打印 WIFI:8 就表示連接不上MQTT服務器,要檢查你的WIFI熱點是否連接了互聯(lián)網(wǎng)能不能上網(wǎng)。
在這里插入圖片描述

在這里插入圖片描述

第五步,如果不管如何接線,esp8266-WIFI都顯示硬件檢測錯誤,那么:最壞的結(jié)果,你的WIFI壞了,該換新的了。

可以重新買一個,買這一款。
https://item.taobao.com/item.htm?abbucket=2&id=669720765911&ns=1&pisk=fUroLOsKpzuWBmYmnZo5-T-emfQAwLiIPWKK9DhFujlX22ldPW039SgU20e8iXPTtvE8vk4XxRwQ2TidF0wSAD5O6GE3F8iCvRCpsuA2uAyqLLkeZ8oWUD5O6MYv341-Y7dhoLx2uAGqUvuEYtmqdAhEY2kz3tDEpQ8e4WW03jMpUeoEzqkqpAArYvkF0IknLQ8EUUoq0jMEYUlWU_lzYuEVN60eNUDcpoHorXxKiH0Qch3S_7c2Y1oIECGaUjxexb1Li_e0e_x_H0ZgsAFR03VgLRaEokAVsXZ03uzUhQXqj-4YW44caHcY2jgT4cvF4-moZVr7aMX3_-2UWqqAQGio4bzKVJpGw-quw8Z0pp8qq0UmSumNfQlLkRqnKk1Cm52UCyu0xQjPaE8aYzxIS_aMRegrhxc9E1i-MgxbsoXcnFcIzxMr6tXDRegrhxcOntYiV4kjUfC…&priceTId=2147804a17296673045032855ebf7f&skuId=4822574445585&spm=a21n57.1.item.42.656d523cJYhwBB&utparam=%7B%22aplus_abtest%22%3A%225b42f3c93ff81d4fde9ec8fd8b7d175c%22%7D&xxc=taobaoSearch
在這里插入圖片描述

(3)繼電器如何接?不會使用繼電器怎么辦。

看這個視頻,講解繼電器的。
https://www.bilibili.com/video/BV1FC4y1J7k2/

(4)MQTT協(xié)議看不懂,我想學習項目里的MQTT協(xié)議代碼如何編寫的,怎么辦?

看這個視頻,講解MQTT協(xié)議代碼,如何從0開始一行一行寫出來的。
https://www.bilibili.com/video/BV1BN4y1Y7cf

(5)如果使用SIM800C-GSM模塊無法連接網(wǎng)絡、無法初始化怎么?

如果你用的項目里使用了SIM800C、SIM900A這種2G的GSM模塊,接線正確,串口調(diào)試助手缺打印初始化失敗。
首先:插入的卡必須是移動或者聯(lián)通卡。
然后,檢查你附近是否還有移動、聯(lián)通的2G基站。2G已經(jīng)處于淘汰階段,很多地方已經(jīng)關閉了2G基站,如果已經(jīng)關閉,就無法使用了。

(6)GPS無法定位成功,定位位置不刷新怎么辦?

如果你的項目里用到了GOS模塊。發(fā)現(xiàn)GPS模塊上傳到云平臺的GPS定位沒有更新。
解決: GPS模塊必須在空曠地帶使用,GPS模塊定位成功之后,上面有一個紅色的小燈,會1秒閃爍一次。 如果燈沒有閃爍,就表示沒有定位成功。 GPS信號無法穿墻,你在屋里是無法定位成功的。

(7)OneNet 新版界面更新了,不一樣怎么辦? 針對MQTT協(xié)議接入

講解2024新版本OneNet云平臺MQTT協(xié)議的使用(講解設備上云以及可視化頁面設計)

如果你看到的項目設計文檔里描述的OneNet界面與現(xiàn)在不一樣。

看區(qū)別在下面。

在這里插入圖片描述

點擊創(chuàng)建產(chǎn)品。
在這里插入圖片描述

填寫產(chǎn)品信息。

在這里插入圖片描述

注意,注意,注意,這里填:數(shù)據(jù)流!?。?shù)據(jù)流?。?!數(shù)據(jù)流!?。?/strong>
在這里插入圖片描述
創(chuàng)建完成。
在這里插入圖片描述
接下里與原文檔里教程沒什么區(qū)別,照著做就行了。

如果到了可視化界面設計的步驟,發(fā)現(xiàn)綁定數(shù)據(jù)源沒有,怎么辦?

OneNet更新之后,綁定數(shù)據(jù)源發(fā)生了變化,如果要正常找到數(shù)據(jù)流,看下面這樣綁定。

image-20230927113458668

userId在這里看:

image-20230927113534977

accessKey在這里看:

image-20230927113734383

產(chǎn)品ID在這里看:

image-20230927113803107

設備名稱在這里看:

image-20230927113844802

也可以看下面最新寫的文檔(不過這個是在專欄里,要訂
閱才可以看):
https://blog.csdn.net/xiaolong1126626497/article/details/133923492

(8)OneNet多協(xié)議入口沒有了怎么辦?

如果你當前的項目,采用的HTTP協(xié)議接入OneNet,你現(xiàn)在注冊的賬號進去卻看不到多協(xié)議接入,沒有HTTP協(xié)議了是什么情況?
這是因為OneNet更新之后,關閉了新用戶多協(xié)議入口 ,老用戶還可以繼續(xù)使用。
那怎么解決? 老用戶都能使用,那說明功能還在,只是屏蔽了新用用戶的入口。
可以這樣解決: 你先正常登錄OneNET,進入到控制臺。然后。
復制這個鏈接:https://open.iot.10086.cn/develop/global/product/#/public?protocol=3&other=1 復制到瀏覽器里打開,就可以進入多協(xié)議的界面了。 這就是相當于點擊隱藏掉的多協(xié)議按鈕,跳轉(zhuǎn)過去的網(wǎng)頁地址。

下面是HTTP協(xié)議調(diào)試上傳數(shù)據(jù)的效果視頻:

OneNet-HTTP協(xié)議上傳的模擬測試(TCP調(diào)試助手)

2024年4月13號之后,OneNet關閉了多協(xié)議新建設備的功能。不管是老用戶,還是新用戶。都無法新建設備,但是之前新建的項目還是正常可以使用,不受到影響。

如果你復刻我項目里的多協(xié)議項目,那么你就不用去做onenet的新建設備的操作。直接使用原來項目里設計好的OneNet鏈接就行可以了。按照原項目里的API KEY 上傳數(shù)據(jù),在設計好發(fā)布好的可視化頁面上就可以看。

(9) (RTC時鐘問題)界面上的時間,倒計時,不動,RTC初始化失敗,如何解決?界面上時間顯示不對如何解決?

這是針對2023年之前的老項目,對于2024年的項目修改時間在main函數(shù)里有注釋看注釋就知道了

如果你的項目里用到了RTC時鐘,也就是界面會顯示時間、顯示倒計時之類的時間。 如果發(fā)現(xiàn)初始化一直卡住RTC初始化不動,或者是 RTC的計時時間不變)(界面上的時鐘不動),一直靜止狀態(tài)。
可能板子上的RTC實時時鐘晶振壞了 或者 虛焊了。 也就是芯片旁邊的圓柱體晶振。你如果有電洛鐵,在晶振的兩個腳上點一下。焊接一下再試試。圓柱體的晶振就是 32.768KHZ,是實時時鐘的晶振。 如果再不行,就換個板子試試,或者 換一個晶振焊接上去。

可以動手修改下RTC的初始化代碼:

如何修改呢? 將源工程里rtc.c里的RTC_Init 函數(shù)代碼全部刪除。 注意,是RTC_Init 這個函數(shù)這段代碼刪除。 然后,將下面的代碼貼進去。重新編譯工程下載進去,測試倒計時,時鐘 這些是否正常(如果還是不正常,就看這段代碼的下面還有一個單獨測試的工程測試RTC時鐘,如果還是不行。那就是上面的問題了)。
在這里插入圖片描述

/**
 * @brief       RTC寫入后備區(qū)域SRAM
 * @param       bkrx : 后備區(qū)寄存器編號,范圍:0~41
 * @param       data : 要寫入的數(shù)據(jù),16位長度
 * @retval      無
 */
void rtc_write_bkr(uint32_t bkrx, uint16_t data)
{
    uint32_t temp = 0;
    PWR->CR |= 1 << 8;  /* 取消備份區(qū)寫保護 */
    temp = BKP_BASE + 4 + bkrx * 4;
    (*(uint16_t *)temp) = data;
}

/**
 * @brief       RTC讀取后備區(qū)域SRAM
 * @param       bkrx : 后備區(qū)寄存器編號,范圍:0~41
 * @retval      讀取到的值
 */
uint16_t rtc_read_bkr(uint32_t bkrx)
{
    uint32_t temp = 0;
    temp = BKP_BASE + 4 + bkrx * 4;
    return (*(uint16_t *)temp); /* 返回讀取到的值 */
}

/**
 * @brief       RTC初始化
 *   @note
 *              默認嘗試使用LSE,當LSE啟動失敗后,切換為LSI.
 *              通過BKP寄存器0的值,可以判斷RTC使用的是LSE/LSI:
 *              當BKP0==0X5050時,使用的是LSE
 *              當BKP0==0X5051時,使用的是LSI
 *              注意:切換LSI/LSE將導致時間/日期丟失,切換后需重新設置.
 *
 * @param       無
 * @retval      0,成功
 *              1,進入初始化模式失敗
 */
u8 RTC_Init(void)
{
      /* 檢查是不是第一次配置時鐘 */
    uint16_t bkpflag = 0;
    uint16_t retry = 200;
    uint32_t tempreg = 0;
    uint32_t clockfreq = 0;

    RCC->APB1ENR |= 1 << 28;        /* 使能電源時鐘 */
    RCC->APB1ENR |= 1 << 27;        /* 使能備份時鐘 */
    PWR->CR |= 1 << 8;              /* 取消備份區(qū)寫保護 */

    bkpflag = rtc_read_bkr(0);      /* 讀取BKP0的值 */

    if (bkpflag != 0X5050)          /* 之前使用的不是LSE */
    {
        RCC->BDCR |= 1 << 0;        /* 開啟外部低速振蕩器 */
        
        while (retry && ((RCC->BDCR & 0X02) == 0))  /* 等待LSE準備好 */
        {
            retry--;
            delay_ms(5);
        }
        
        tempreg = RCC->BDCR;        /* 讀取BDCR的值 */
        tempreg &= ~(3 << 8);       /* 清零8/9位 */

        if (retry == 0)             /* 開啟LSE失敗? */
        {
            RCC->CSR |= 1 << 0;         /* LSI使能 */
        
            while (!(RCC->CSR & 0x02)); /* 等待LSI就緒 */
            
            tempreg |= 1 << 9;          /* LSE開啟失敗,啟動LSI. */
            clockfreq = 40000 - 1;      /* LSI頻率約40Khz(參考F103數(shù)據(jù)手冊說明) */
            rtc_write_bkr(0, 0X5051);   /* 標記已經(jīng)初始化過了,使用LSI */
        }
        else
        {
            tempreg |= 1 << 8;          /* 選擇LSE,作為RTC時鐘 */
            clockfreq = 32768 - 1;      /* LSE頻率為32.769Khz */
            rtc_write_bkr(0, 0X5050);   /* 標記已經(jīng)初始化過了,使用LSE */
        }

        tempreg |= 1 << 15;             /* 使能RTC時鐘 */
        RCC->BDCR = tempreg;            /* 重新設置BDCR寄存器 */

        while (!(RTC->CRL & (1 << 5))); /* 等待RTC寄存器操作完成 */

        while (!(RTC->CRL & (1 << 3))); /* 等待RTC寄存器同步 */

        RTC->CRH |= 1 << 0;             /* SECF = 1, 允許秒中斷 */
        RTC->CRH |= 1 << 1;             /* ALRF = 1, 允許鬧鐘中斷 */

        while (!(RTC->CRL & (1 << 5))); /* 等待RTC寄存器操作完成 */

        RTC->CRL |= 1 << 4;             /* 允許配置 */
        RTC->PRLH = 0X0000;
        RTC->PRLL = clockfreq;          /* 時鐘周期設置(有待觀察,看是否跑慢了?)理論值:32767 */
        RTC->CRL &= ~(1 << 4);          /* 配置更新 */

        while (!(RTC->CRL & (1 << 5))); /* 等待RTC寄存器操作完成 */

        if (bkpflag != 0X5051)          /* BKP0的內(nèi)容既不是0X5050,也不是0X5051,說明是第一次配置,需要設置時間日期. */
        {
            SetRtcTime(2024, 4, 29, 6, 59, 55);   /* 設置時間 */
        }
    }
    else     /* 系統(tǒng)繼續(xù)計時 */
    {
        retry = 30;     /* 避免卡死 */
        
        while ((!(RTC->CRL & (1 << 3)) && retry))   /* 等待RTC寄存器同步 */
        {
            delay_ms(5);
            retry--;
        }

        retry = 100;    /* 檢測LSI/LSE是否正常工作 */
        
        tempreg = RTC->DIVL;            /* 讀取DIVL寄存器的值 */
        while (retry)
        {
            delay_ms(5);
            retry--;
            
            if (tempreg != RTC->DIVL)   /* 對比DIVL和tempreg, 如果有差異, 則退出 */
            {
                break;                  /* DIVL != tempreg, 說明RTC在計數(shù), 說明晶振沒問題 */
            }
        }
        if (retry == 0)
        {
            rtc_write_bkr(0, 0XFFFF);   /* 標記錯誤的值 */
            RCC->BDCR = 1 << 16;        /* 復位BDCR */
            delay_ms(10);
            RCC->BDCR = 0;              /* 結(jié)束復位 */
            return 1;                   /* 初始化失敗 */
        }
        else
        {
            RTC->CRH |= 0X01;           /* 允許秒中斷 */

            while (!(RTC->CRL & (1 << 5))); /* 等待RTC寄存器操作完成 */
        }
    }

    STM32_SetPriority(RTC_IRQn,2,1);//設置RTC中斷優(yōu)先級   /* 優(yōu)先級設置 */
    
    
    return 0;
}		 			


或者 下載這個工程測試一下RTC時鐘: r如果這個工程測試也不行,那么就實錘了上面的問題
https://download.csdn.net/download/xiaolong1126626497/89225596

在這里插入圖片描述

如何你的LCD界面上的時間顯示的不是當前的時間,如何更改?
一些設計項目中時間并不是與網(wǎng)絡同步的,如果時間不正確,需要自己更改。

在哪里更改?
在這里插入圖片描述

設置之后編譯代碼下載進去,然后,板子斷電,再重新上電就更新時間了。 (需要斷電一次才會更新時間)

【10】騰訊云IOT的MQTT三元組,需要python環(huán)境,我沒有怎么辦?

如果你的項目用到騰訊云IOT服務器,那么在MQTT三元組秘鑰生成章節(jié),會用到一段python代碼運行,如果你的電腦沒有python環(huán)境,照著下面文章教程去搭建即可。
看這篇文章: Python入門開發(fā): windows下搭建python開發(fā)環(huán)境(vscode)
https://blog.csdn.net/xiaolong1126626497/article/details/118497618

視頻看這個:

騰訊云IOT平臺生成MQTT三元組的過程(運行python)

【11】Qt工程源碼打不開,編譯報錯怎么辦?

如果你的設計里用到了上位機,需要自己開發(fā)上位機或者Android手機APP。
當你打開資料包里的Qt工程時,發(fā)現(xiàn)報錯,無法編譯,一堆紅色。
如何解決?
(1) 照著文檔里上位機章節(jié)說明,先把Qt環(huán)境安裝好
(2)將資料包里的Qt工程拷貝出來,放在你電腦的英文路徑下,再打開工程即可(工程文件的后綴就是.pro)。

【12】 Android開發(fā)環(huán)境如何搭建?

如果你的設計里用到了上位機,并且你需要自己編譯出Android手機的APP。
這就需要搭建Anroid開發(fā)環(huán)境。 如果你只需要在電腦上編譯運行,就不用這么麻煩。
如何搭建Android開發(fā)環(huán)境??
看這里: https://blog.csdn.net/xiaolong1126626497/article/details/117254453

【13】開發(fā)板的電源不夠接?如何擴展?

當你的模塊都買回來時,接線發(fā)現(xiàn),板子的電源口太少了,模塊很多,電源不夠接,怎么解決?

有兩種辦法:
第一種: 需要焊接排針。 淘寶購買兩排單排排針。 然后在PCB洞洞板上焊接兩排排針擴展電源。
看下面的圖片: 兩排排針底部 是聯(lián)通的。 焊接好之后,分別用兩根杜邦線,將排針分別插在開發(fā)板的5V和GND電源口上,這樣就可以將板子的5V和GND擴展出多個,你的模塊就可以正常接了。
在這里插入圖片描述
在這里插入圖片描述

如果你不會焊接怎么辦? 但是又想焊接,你可以去外面 修手機修電腦的店鋪,讓他們幫忙給你焊接一下排針即可。

第二種辦法: 直接淘寶買電源擴展板。
鏈接: https://item.taobao.com/item.htm?id=647681090119&skuId=4672158745999&spm=a1z0d.6639537/tb.1997196601.4.754374841n18eN

買2個擴展板,方便分別擴展5v電源 和 3.3V電源。 將開發(fā)板的5V和3.3V電源分別用杜邦線接入到下面的擴展板最前面橫著的一排的VCC和GND上。其他模塊就可以將電源接在此擴展板上豎著的VCC和GND上了,解決電源不夠接的問題。
在這里插入圖片描述

【14】 電機怎么接?加熱棒怎么接? 與繼電器如何接?

在很多項目設計里,都用到了 抽水電機、散熱風扇、充氧電機、加熱模塊,等等。
比如:智能魚缸、智慧農(nóng)業(yè)、智能花盆、盆栽種植 、大棚種植 這些項目里基本上都要 進行灌溉,抽水、加熱,通風。 那如何接呢?

首先: 上面提到的這些模塊,不能直接與單片機也就是STM32連接,需要通過繼電器進行控制。 STM32控制繼電器,繼電器再去控制這些電機,實現(xiàn)最終的控制。

如果買回來的電機、加熱棒有USB口怎么接? 要么買USB母頭底座在板子上焊接一個轉(zhuǎn)接口,要么直接把電機的USB接頭剪掉,剝出里面的銅絲,連繼電器即可。 那么,繼電器如何接? 看上面的(3)小節(jié)的講解。

【15】MQTT調(diào)試助手去哪里下載?

在物聯(lián)網(wǎng)相關的項目里,會看到我的項目文檔里用到MQTT調(diào)試助手進行與物聯(lián)網(wǎng)平臺互發(fā)數(shù)據(jù)進行測試,這個工具去哪里下載? 一般在資料包的工具目錄下都會自帶,如何沒有也可以去下載。
下載地址: https://download.csdn.net/download/xiaolong1126626497/18784012

【16】 如何下載程序?STM32應該如何下載程序?

STM32可以支持兩種方式下載:
(1) 串口下載。 串口下載HEX文件。
(2) 下載器下載。 通過ST-LINK、J-LINK 之類的下載器,點擊keil軟件里的下載按鈕下載程序。

串口下載: 我項目里用到的最多的板子都是STM32F103RCT6這一款,這款板子本身自帶了CH340芯片,也就是USB-TTL芯片,直接可以接電腦。 通過電腦打開串口,就可以下載程序。

這種下載方式不需要下載器,你只需要接一根USB線就可以下載。

接線圖如下圖:
在這里插入圖片描述

打開程序下載工具: 看序號點擊,下載即可。
在這里插入圖片描述

具體下載也可以看視頻:

講解STM32如何通過串口下載程序

【17】LCD顯示屏上半部分有雪花,有白色,顯示不全如何解決?

我的很多項目里用到了1.44寸SPI接口的LCD顯示屏,在我視頻里和文檔里看到,我當初做出的實物,顯示一切正常;而你照著設計文檔買好硬件,練好線,下載進去發(fā)現(xiàn),LCD顯示屏上半部分顯示的不正確。

比如,錯誤效果如下:

在這里插入圖片描述

問題原因:
因為這個顯示屏的驅(qū)動IC芯片有更換,雖然照著鏈接買的看起來和我當初買的長的一樣。顯示屏本身的驅(qū)動IC有變化,導致驅(qū)動代碼有變化。

解決辦法:
打開STM32工程,找到lcd.c 或者 oled.c 源文件。
找到Lcd_SetRegion函數(shù)。

照著下面代碼修改就行。

/*************************************************
函數(shù)名:LCD_Set_Region
功能:設置lcd顯示區(qū)域,在此區(qū)域?qū)扅c數(shù)據(jù)自動換行
入口參數(shù):xy起點和終點
返回值:無
*************************************************/
void Lcd_SetRegion(u16 x_start,u16 y_start,u16 x_end,u16 y_end)
{		
	Lcd_WriteIndex(0x2a);
	Lcd_WriteData(0x00);
	Lcd_WriteData(x_start+2);
	Lcd_WriteData(0x00);
	Lcd_WriteData(x_end+2);

	Lcd_WriteIndex(0x2b);
	Lcd_WriteData(0x00);
	Lcd_WriteData(y_start+1);
	Lcd_WriteData(0x00);
	Lcd_WriteData(y_end+1);
	
	Lcd_WriteIndex(0x2c);

}

【18】1.44寸的LCD顯示屏的字有重疊?LCD顯示屏的字顯示不全?

問題和【17】差不多,都是驅(qū)動IC問題。

解決辦法也很簡單的。
只要你先找到代碼里LCD顯示屏的繪制函數(shù)。
比如:

LCD_ShowChineseFont(0,16*1+2,16,HZ_FONT_16[20],RED,0);
此函數(shù):
第一個參數(shù)是設置顯示的內(nèi)容 橫坐標(X)的位置。
第二個參數(shù)是設置顯示的內(nèi)容 縱坐標(Y)的位置。
第三個參數(shù)是設置顯示的內(nèi)容 字體大小。
第四個參數(shù)是設置顯示的內(nèi)容字模在數(shù)組里的下標。
第五個參數(shù)是設置顯示的內(nèi)容字體的顏色。
第六個參數(shù)是設置顯示的內(nèi)容背景的顏色。

只要搞清楚函數(shù)每個參數(shù)的含義,自己調(diào)整一下X、Y 的位置,就可以解決問題。

在這里插入圖片描述

【19】騰訊云IOT平臺更新了,界面與文檔不一樣怎么辦啊?

如果你的項目用到了微信小程序、用到了騰訊云IOT平臺,但是發(fā)現(xiàn)文檔里的截圖與你現(xiàn)在登錄進去看到的界面長的不一樣,這可怎么辦啊?

問題原因,2024年3月份 騰訊云更新了物聯(lián)網(wǎng)平臺的界面展示,去掉了項目創(chuàng)建功能,進去就直接可以進行產(chǎn)品開發(fā)了省去了前面創(chuàng)建項目的y頁面。 但是: 這并不影響使用。

看下圖:
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
到了這一步,接著看文檔的產(chǎn)品開發(fā)章節(jié)繼續(xù)就行了,大同小異。
在這里插入圖片描述

【20】 OneNet平臺設計的可視化頁面,點擊按鈕無法使用怎么辦?

OneNet 在2023年4月份之后更新了平臺,也就是現(xiàn)在看到的新版,物聯(lián)網(wǎng)開發(fā)平臺。

更新之后,我也寫了教程,介紹新版物聯(lián)網(wǎng)平臺的使用辦法,其實與原來的也差別不大,只是界面上改了樣式,改了流程,核心是沒變的。功能也是可以正常使用。

結(jié)果 后面OneNet內(nèi)部數(shù)據(jù)遷移,改出了BUG,新版本平臺可視化頁面的全部輸入控件都無法下發(fā)命令了。 不僅僅是按鈕,是全部,所有的 輸入類型的設備都無法發(fā)送,不管你是免費版,還是29塊錢的企業(yè)版,還幾大千專業(yè)版 統(tǒng)統(tǒng)無法使用了。 目前只能等待OneNet工程師給點力,進行修復。才可以繼續(xù)使用。

如果想繼續(xù)發(fā)送命令控制STM32,那怎么辦?
在設備后臺輸入命令發(fā)送就行了。 其實就是和在可視化頁面點擊按鈕一樣的。在可視化頁面點擊按鈕也是和這里手動輸入命令發(fā)現(xiàn)沒區(qū)別的。就是多了一個界面。

在這里插入圖片描述
可能就有同學問,我發(fā)送什么命令,這里我填什么?

這個很好理解的。 你是不是在可視化頁面配過按鈕下:如果你是這樣配置的: led_sw:{V} 這個就是命令格式。 {V} 需要替換成具體的值。 比如: led_sw:1 led_sw:0 發(fā)送出去。這就是命令

這里發(fā)送與你按下按鈕發(fā)送沒有區(qū)別。 這里是手動編輯命令下發(fā)。

你點擊按鈕,按下開就是發(fā)送: led_sw:1 ,按下關就是發(fā)送: led_sw:0

當前,你千萬別認為只能發(fā)送: led_sw:1 和 led_sw:0 我只是舉例子。 你的按鈕當初怎么配置的,就填什么命令。

【21】接電機,水泵,加熱泵,充氧泵等等電機之后,整個設備就工作不正常了? 這個怎么解決?

在很多項目里,比如:水產(chǎn)養(yǎng)殖、智能魚缸、智能飲水機等等項目里,都會用到電機、加熱模塊等等。
如果你的整個項目設備是采用USB線供電,整個設備模塊的電源都從開發(fā)板上取電,這樣是不行。 電機一轉(zhuǎn)動,整個系統(tǒng)就會工作異常,比如: 溫度讀取不出來了,光敏讀取也是錯誤。 特別是: 會導致ESP8266-WIFI斷網(wǎng),掉線,如果正在使用手機APP遠程操作,微信小程序遠程操作,電機一轉(zhuǎn)動,你就發(fā)現(xiàn)無法控制了。

這個要怎么解決? 如果你的實物上確實需要接電機演示。

那么需要采用外部電源供電,買一個下面的 可調(diào)電源穩(wěn)壓模塊 ,一個12V 、2A的電源插頭就可以了。 買回來之后,將模塊的電源都接在這個電源穩(wěn)壓模塊上,將STM32開發(fā)板上的5V和GND分別用杜邦線接到穩(wěn)壓模塊的5V和GND上即可。

采用外部電源供電,接好線之后的效果如下:
在這里插入圖片描述

在這里插入圖片描述

如果買的水泵是帶USB接口的。可以買一個USB母座,方便接線。
鏈接:https://item.taobao.com/item.htm?spm=a1z09.2.0.0.720c2e8daW68Pi&id=660481026591&_u=p1pq7ueo846a&skuId=4760127756241
在這里插入圖片描述

(1)穩(wěn)壓模塊

鏈接:https://item.taobao.com/item.htm?spm=a21n57.1.0.0.2921523cQeodt2&id=16606969730&ns=1&abbucket=7#detail

image-20230919222637274

img

(2)電源插頭

鏈接:https://item.taobao.com/item.htm?id=616513772095&price=12.5-28&sourceType=item&sourceType=item&suid=28568653-f37a-44d9-ba7f-79370acc2a9e&ut_sk=1.Y%2BSje8BXEHwDAAzffoCNOQAM_21646297_1700218130362.TaoPassword-WeiXin.ShareGlobalNavigation_1&un=6f62cf65130082c7143b731291a8a715&share_crt_v=1&un_site=0&spm=a2159r.13376460.0.0&sp_abtk=gray_ShareGlobalNavigation_1_code_simpleAndroid2&sp_tk=cTJPQVczdDRwNFI%3D&cpp=1&shareurl=true&short_name=h.5kwQOCl&bxsign=scd4p22mFtBbwnGM_SWdgwgZ27RN8IEynH4PqvQihq_j_z9InPF1g10n1NbTKmLx8KZRz6HVuBpo_O9axHjCBbsVlVvTKl9u7l4CGsrBWq6-xf26Zvx5y-ND4YT_gNAlrvG&tk=q2OAW3t4p4R&app=chrome

image-20231212111308716

【22】電容觸摸鍵盤無法使用如何解決?

之前很多項目里用到了電容觸摸按鍵,原來的店鋪里觸摸按鍵升級了。原本項目代碼無法使用。
新版的按鍵鍵盤驅(qū)動芯片換了,原來代碼無法兼容。

可以在這里買項目里一樣的之前的電容矩陣鍵盤:
https://item.taobao.com/item.htm?app=chrome&bxsign=scddfIsDSl5TauUwzXNou-6K3uhIT764ob-ctvEm3hTNQ40dYtEeY7sBLXcoppwDPB5s4uMmJ-dHSTQiAlx6XVYmwFA_zAm7Ik7poJA2bpqaDg7yYylUs7rrGKEJQE40shBJBw8zrP4xwgsxBgl9OTZaQ&cpp=1&id=739766244195&price=18&share_crt_v=1&shareurl=true&short_name=h.g03ocbA&sourceType=item,item&sp_tk=aVljdVdJaEY3eU4=&spm=a2159r.13376460.0.0&suid=1976c8fa-74e2-4894-bdc5-3ed8e7906bdf&tbSocialPopKey=shareItem&tk=iYcuWIhF7yN&un=d63971ee90e66b72cd6664ca157bcc86&un_site=0&ut_sk=1.ZVIcUAeojBoDAHiIpg94CyWH_21646297_1713787176064.Copy.ShareGlobalNavigation_1

看準這里。

在這里插入圖片描述

在這里插入圖片描述

【23】 物聯(lián)網(wǎng)服務器的域名如果變成IP地址?

比如: 以華為云物聯(lián)網(wǎng)服務器為例。
在這里插入圖片描述

如何得到IP地址?如何域名轉(zhuǎn)IP? 打開Windows的命令行輸入以下命令。

ping  65b0f8a974.st1.iotda-device.cn-north-4.myhuaweicloud.com

在這里插入圖片描述

得到下面的IP地址信息: 如果設備支持填寫域名可以直接填域名,不支持就直接填寫IP地址。 (IP地址就是域名解析得到的)

華為云的MQTT服務器地址:117.78.5.125
華為云的MQTT端口號:1883

【24】 華為云IOT平臺更新之后如何生成MQTT密碼?

華為云提供了一個在線工具,用來生成MQTT鑒權(quán)三元組: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/

打開這個工具,填入設備的信息(也就是創(chuàng)建完設備之后保存的信息),點擊生成,就可以得到MQTT的登錄信息了。

這樣填:
在這里插入圖片描述

填入設備的信息: (上面兩行就是設備創(chuàng)建完成之后保存得到的)

直接得到三元組信息。
在這里插入圖片描述
得到三元組之后,設備端通過MQTT協(xié)議登錄鑒權(quán)的時候,填入?yún)?shù)即可。

ClientId  662a2c5971d845632a06f9fb_dev1_0_0_2024042510
Username  662a2c5971d845632a06f9fb_dev1
Password  5bcc5df45ce9e8bfe40c20408de495304a80bca79bf9e64e41f536b40723f177

【25】有人4G模塊模塊的項目(可能的問題)

如果你復刻的項目路用到了有人科技的4G模塊。
比如:
154 基于STM32的森林火災監(jiān)控系統(tǒng)設計
149 基于STM32設計的溫室大棚種植監(jiān)測系統(tǒng)(onenet+GPRS通信)
100 基于STM32+OneNet設計的物聯(lián)網(wǎng)智慧路燈
這些項目就用到了有人科技的4G 模塊。

一定要看下面圖片的說明。
在這里插入圖片描述

看下面,將接收4G模塊里代碼部分的printf打印刪除或者注釋掉。 簡單來說,就是 將下面圖片里的全部printf代碼行刪除或者注釋掉。
在這里插入圖片描述

【26】樹莓派系統(tǒng)鏡像下載

鏈接:https://pan.baidu.com/s/1vYamLV9CPDbUF2wQMcbtPA?pwd=9ubq
提取碼:9ubq
–來自百度網(wǎng)盤超級會員V8的分享

自己也可以問樹莓派的商家要鏡像資料下載。

【27】RC522刷卡模塊無反應?或者同一張卡的卡號刷出來可能不一致?

如果你的項目里使用的RC522模塊刷卡沒有反應。
(1)檢查接線是否正確
(2)RC522模塊要焊接排針,焊接之后才可以使用
(3)RC522供電必須接3.3V
(4)使用的杜邦線檢查是否有松動接觸不良的情況。

如果以上檢查了,你的刷卡模塊還是無法正確刷卡。
那么,可以修改代碼再測試下。 (防止可能不同版本的keil軟件本身的優(yōu)化機制,優(yōu)化了 __nop();)
在這里插入圖片描述
修改之后,再下載進去測試。

如果以上測試之后,發(fā)現(xiàn)RC522模塊還是無法正常刷卡使用?

那么可能就是模塊本身壞了??梢钥紤]更換模塊再測試。

STM32+RFID-RC522模塊刷卡效果

【28】SIM800C模塊無法上傳數(shù)據(jù)到OneNet云平臺?

之前文章里的SIM800C模塊商家的鏈接過期了。
下面這個商家的SIM800C可以使用。
鏈接:https://item.taobao.com/item.htm?abbucket=5&id=595955619423&ns=1&priceTId=2150407917166339557863879e961b&skuId=5521873678704&spm=a21n57.1.item.28.4de2523cMXukmD

在這里插入圖片描述

本項目有好幾個OneNet的項目是采用的SIM800C模塊鏈接,通過SIM800C連接OneNet上傳數(shù)據(jù),通過HTTP協(xié)議上數(shù)據(jù)到云平臺。

因為SIM800C是2G模塊(支持聯(lián)通和移動的2G),隨著時代的發(fā)展,現(xiàn)在的2G基站已經(jīng)慢慢的淘汰了。 SIM800C使用起來信號就不會很好,如果你使用的SIM800C的位置距離2G的基站很遠,可能聯(lián)網(wǎng)的速度就很慢。

將項目代碼下載進去之后,如果你接好了SIM800C,串口打印出來看到初始化也成功了,但是運行時,串口打印是發(fā)送數(shù)據(jù)失敗,OneNet無法接收數(shù)據(jù)。

那么這個問題可能是SIM800C信號比較弱,連接服務器的時間太長,導致代碼里原來的等待時間超時。
可以在以下的位置增加延時函數(shù)測試問題。
看下面的截圖: 增加延時等待網(wǎng)絡連接成功。
在這里插入圖片描述

代碼中:

printf("連接服務器的狀態(tài):%drn",SIM800C_Connect_TCP_Server("183.230.40.33","80"));

這函數(shù)就是配置SIM800C去鏈接服務器的。 如果服務器連接成功,會返回CONNECT OK

如果上面的延時可以解決問題,為了更加方便等待SIM800C網(wǎng)絡連接成功。

可以增加一個函數(shù),用來等待CONNECT OK返回。

注意:當前的SIM800C是接在串口2的,也就是PA2 和 PA3上的。

int WaitConnect_ok(void)
{
	 int j=0;
	if(strstr((char*)USART2_RX_BUFFER,"CONNECT OK"))
	{
		  printf("WaitConnect_ok:%srn",USART2_RX_BUFFER);
		 	return 0;
	}
	 USART2_RX_FLAG=0;
   USART2_RX_CNT=0;
	 memset(USART2_RX_BUFFER,0,sizeof(USART2_RX_BUFFER));
	
	 for(j=0;j<1000;j++) //等待的時間(ms單位)
      {
          if(USART2_RX_FLAG)
          {
              USART2_RX_BUFFER[USART2_RX_CNT]='?';
						  printf("WaitConnect_ok:%srn",USART2_RX_BUFFER);
              if(strstr((char*)USART2_RX_BUFFER,"CONNECT OK"))
              {
                  return 0;
              }
              else break;
          }
          delay_ms(20); //一次的時間
      }
			return 1;
}

在這里插入圖片描述

然后,在發(fā)送數(shù)據(jù)的函數(shù)的這個位置增加函數(shù)的調(diào)用。

printf("GPRS服務建立狀態(tài):%drn",WaitConnect_ok());

函數(shù)在連接服務器的代碼下面調(diào)用。 具體看下面圖片的標識。 (注意:我這只是以某個項目為例的,你自己復刻的項目里如果用到了SIM800C上傳數(shù)據(jù)到OneNet,你的函數(shù)名字不一定于我截圖長的一樣,但是你只需要知道,增加的這個函數(shù)的目的是: 為了等待SIM800C鏈接你附近的基站成功,并且通過基站鏈接服務器成功; 所以,將增加的這個等待放在你的sim800.c里鏈接服務器的函數(shù)下面調(diào)即可。)
在這里插入圖片描述

或者看這個截圖。
在這里插入圖片描述

【29】OneNet(MQTT)協(xié)議生成的密碼無法登陸?

在這里插入圖片描述
et 時間填大一點。 這個軟件win11上無法生成正確的密碼。在win10上運行,無法在win11運行。

【30】嬰兒床的播放器模塊與喇叭接線

在嬰兒床的項目中,用到了音樂播放器播放安撫音樂。很多同學不知道這個 音樂播放器與繼電器,喇叭與播放器之間如何接線,這里就畫了一個圖。 其中,音樂播放器上有兩個紅色圈圈的位置,需要焊接2個針出來,就可以單獨接杜邦線了。

在這里插入圖片描述

五、關于Qt上位機的源碼編譯問題

如果你的項目用到了Qt上位機,一定要看下本小節(jié)的內(nèi)容。

注意!注意! 你的Qt環(huán)境必須要是QT5.12.6 ,我的版本是QT5.12.6。 一定要安裝這個版本。

QT5.12.6 的安裝包網(wǎng)盤下載地址: 也就去Qt官網(wǎng)下載。
https://pan.quark.cn/s/f40557068445

Qt上位機源碼如何打開?編譯?運行?

【1】QT工程如何打開和使用?

(1)在你的項目源碼路徑下可以看到上位機源碼工程。
(2)一定要將上位機源碼目錄拷貝到你電腦上純英文路徑(別放桌面)。最好在你D盤新建一個純英文目錄,將此源碼拷貝過去。路徑中一定不能有中文。
(3)如果你源碼目錄有一個后綴是.pro.user的文件,要先刪除,再打開工程。
(4)如果你已經(jīng)安裝好了Qt環(huán)境,然后雙擊工程文件就可以打開項目。
在這里插入圖片描述

【2】用到了第三方庫?比如:OpenCV、ffmpeg怎么運行?

如果你的Qt上位機項目用到OpenCV、ffmpeg等等第三方庫。 打開工程之后,編譯運行,程序會提示異常結(jié)束,無法正常運行。怎么辦?
這個是因為,你Qt程序運行之后無法找到你的第三庫的DLL文件,就無法正常運行。

最簡單的操作,你將我的資料包《可執(zhí)行程序》目錄里全部文件(除了應用程序EXE文件可以不拷貝),拷貝到 你自己Qt編譯生成的exe應用程序路徑下即可。
在這里插入圖片描述

如果你找不到你的工程生成的EXE文件在哪里? 你Qt工程編譯成功之后,在下面都會有提示的。
看下面的截圖。

【3】你自己 編譯的Qt程序,獲取Token失敗怎么辦? (華為云IOT項目的上位機)

首先你觀察,你的Qt控制臺輸出的信息是不是提示一堆SSL相關的警告?

如果是,就是說明: 你的Qt環(huán)境缺少了SSL協(xié)議,也就是openSSL的庫。 導致Qt無法使用https的API鏈接。故而無法正常獲取token,也無法正常使用其他功能。

如何解決?
最簡單的操作,從這里下載需要的SSL庫文件。 https://download.csdn.net/download/xiaolong1126626497/89309957
將這2個文件拷貝到你程序編譯后生成的 應用程序 相同目錄下即可,重新在Qt軟件里編譯運行,測試即可。

或者 你打開我的資料包里《windows可執(zhí)行程序》目錄里找到這兩個庫,拷貝到 你自己Qt編譯生成的exe應用程序路徑下,重新在Qt軟件里編譯運行,測試即可。
在這里插入圖片描述

如果你找不到你的工程生成的EXE文件在哪里? 你Qt工程編譯成功之后,在下面都會有提示的。
看下面的截圖。
在這里插入圖片描述

【4】如何搭建Qt的Android環(huán)境?

Qt可以編譯Android的APP,但是編譯Android的APP需要自己搭建Android環(huán)境。

我提供了搭建環(huán)境的教程。在我的博客里,不過要花費29.9訂閱Qt的技術(shù)文章專欄才可以看。這個文章在Qt的技術(shù)文章專欄里。 你也可以百度搜索教程自己搭建。

付費教程鏈接:https://blog.csdn.net/xiaolong1126626497/article/details/117254453

【5】Qt上位機的源碼修改問題? 華為云IOT上位機項目

如果使用的是華為云的IOT項目,想要自己修改上位機的源碼,改成自己的設備那么看下面圖片說明。

工程樣式:1:
在這里插入圖片描述

工程樣式:2:
在這里插入圖片描述

但是注意了,如果你的項目工程用的華為云IOT平臺是基礎版(現(xiàn)在新用戶沒有基礎版,都是標準版的)

如果你要改成標準版使用,要修改的地方就多一些。
看下圖。

這個鏈接要改成自己設備的。這個鏈接如何獲?。?你在看文檔的時候應該看到我講解了在線調(diào)試設備,在線修改設備屬性。在調(diào)試頁面右上角調(diào)試成功,就會有一個鏈接,貼過來替換下面的的鏈接即可。

這個鏈接要改成自己設備的。這個鏈接如何獲??? 你在看文檔的時候應該看到我講解了在線調(diào)試設備,在線獲取影子數(shù)據(jù)。在調(diào)試頁面右上角調(diào)試成功,就會有一個鏈接,貼過來替換下面的的鏈接即可。
在這里插入圖片描述

這個鏈接就是在這里獲取(看下圖)。
在這里插入圖片描述

還有一點要注意: 華為云基礎版 和標準版 修改設備屬性時,下發(fā)的屬性格式不一樣。

標準版的格式是這樣的: 就是下發(fā)的命令屬性的JSON格式。 如果你原來是基礎版,要換標準版,修改Qt上位機的時候要注意這個問題,不然無法下發(fā),會報錯。

{"services":{"motor":1}}

也可以看視頻:

介紹STM32物聯(lián)網(wǎng)項目工程移植需要修改的地方

我這里再重新敘述一遍: (這里是以 105 基于STM32設計的汽車修理廠環(huán)境檢測系統(tǒng)為例,介紹QT上位機源碼如何修改 ) 這個項目就是基礎版的華為云設計的,而現(xiàn)在的新建的華為云是默認為標準版,怎么改? 看下面截圖。

在這里插入圖片描述

這是設備的賬號信息 。 根據(jù)自己的實際情況替換。

在這里插入圖片描述

這是查詢設備屬性 。 也就是獲取影子數(shù)據(jù)的API接口。
在這里插入圖片描述

這是修改設備屬性 。 也就是給設備下發(fā)控制命令的API接口。
在這里插入圖片描述

就完成了。

六、 關于上位機源碼問題

如果是從我的微信公眾號里下載的項目資料包,這里不用看,直接忽略。
如果項目用的是OneNet云平臺、阿里云云平臺、騰訊云微信小程序,這里也不用看,直接忽略。

我做的STM32項目里,有很多涉及到需要自己開發(fā)上位機APP,也就是手機APP 的項目,部分項目源碼在CSDN上,STM32源碼和上位機源碼是分開的,是兩個資源包。如果不修上位機源碼,不自定義更改,就不需要單獨去下載上位機的源碼。 在設計文檔里的上位機設計章節(jié),已經(jīng)詳細講解如何設計上位機,設計過程,拿去寫文檔,貼圖,都完全夠了。 這就是復刻項目的最簡單,最容易的步驟。

如果確實需要修改或增加上位機的功能,要修改Qt源碼,可以參考文檔自己設計,也可以去單獨下載。

下面是CSDN博客里部分,獨立的上位機源碼下載鏈接,根據(jù)自己的項目找到對應的上位機即可,如果找不到也可以私信問我。

【1】基于樹莓派+華為云設計的智能家居系統(tǒng)-Qt上位機源碼.zip
https://download.csdn.net/download/xiaolong1126626497/88798014

【2】基于STM32+華為云設計的智慧農(nóng)業(yè)灌溉系統(tǒng)【華為云IOT】-Qt上位機源碼.zip
https://download.csdn.net/download/xiaolong1126626497/88561390

【3】基于STM32+華為云設計的智慧農(nóng)業(yè)灌溉系統(tǒng)(升級版)項目的Qt上位機源碼.zip
https://download.csdn.net/download/xiaolong1126626497/88561385

【4】基于STM32設計的智能嬰兒床控制系統(tǒng)-Qt上位機源碼.zip
https://download.csdn.net/download/xiaolong1126626497/88842288

【5】基于STM32+華為云設計的智能魚缸-Qt上位機源碼.zip
https://download.csdn.net/download/xiaolong1126626497/88539687

【6】基于STM32設計的智能教室管理系統(tǒng)-Qt上位機源碼(智慧大屏).zip
https://download.csdn.net/download/xiaolong1126626497/88541655

【7】114 基于STM32的熏艾式空氣消毒裝置設計與實現(xiàn)【Qt上位機源碼】.zip

https://download.csdn.net/download/xiaolong1126626497/90035427

【8】基于STM32設計的人體健康監(jiān)護系統(tǒng)(Qt上位機源碼包)
https://download.csdn.net/download/xiaolong1126626497/88462877

【9】基于STM32的智能花盆系統(tǒng)設計與實現(xiàn)(Qt上位機源碼包)
https://download.csdn.net/download/xiaolong1126626497/88439627

【10】 基于STM32設計的小龍蝦養(yǎng)殖系統(tǒng)【Qt上位機源碼】
https://download.csdn.net/download/xiaolong1126626497/88917639

【11】106 基于STM32設計的城市綠化云端監(jiān)控系統(tǒng)【Qt上位機源碼】
https://download.csdn.net/download/xiaolong1126626497/88921525

【12】132 基于STM32設計的口罩識別和無線測溫系統(tǒng)【Qt上位機源碼】
https://download.csdn.net/download/xiaolong1126626497/88968240

【13】123 基于物聯(lián)網(wǎng)的智能澆水系統(tǒng)(STM32+華為云IOT)-上位機源碼.zip
https://download.csdn.net/download/xiaolong1126626497/89165977

【14】105 基于STM32的汽車修理廠環(huán)境監(jiān)測-Qt上位機源碼.7z
https://download.csdn.net/download/xiaolong1126626497/89221595

【15】基于STM32+華為云IOT設計的智能澆花系統(tǒng)-序號112.zip
https://download.csdn.net/download/xiaolong1126626497/87853772

七、OneNet替換騰訊云IOT平臺

7.1 前言

從2024年06月20日起, 新注冊騰訊云物聯(lián)網(wǎng)開發(fā)平臺的用戶需購買公共實例激活碼才可使用公共實例,在此時間之前注冊的用戶并已開通公共實例的用戶則不受影響。

目前大部分主流平臺都已經(jīng)進入收費階段,只有華為云目前完全免費,OneNet免費(可視化界面設計部分功能收費,29一個月)。 騰訊云、阿里云都已經(jīng)進入了收費模式。

下面是官網(wǎng)的公告。

image-20240918142211785

現(xiàn)在登錄騰訊云物聯(lián)網(wǎng)開發(fā)平臺 已經(jīng)沒有免費的公共實例可以使用,需要購買激活碼才可繼續(xù)使用。

image-20240918142045068

7.2 OneNet替換騰訊云IOT

之前做的很多項目是基于騰訊云物聯(lián)網(wǎng)開發(fā)平臺設計的,如果購買的基于騰訊云物聯(lián)網(wǎng)開發(fā)平臺設計的項目源碼,因為騰訊云物聯(lián)網(wǎng)開發(fā)平臺更新的問題無法再繼續(xù)使用免費的公共實例,需要購買才可以使用;如果不想花錢購買騰訊云的物聯(lián)網(wǎng)平臺,可以采用中國移動的OneNet物聯(lián)網(wǎng)開發(fā)平臺替換。

因為騰訊云物聯(lián)網(wǎng)平臺替換為OneNet平臺最簡單。 而且OneNet平臺設計的界面比微信小程序更加漂亮。

目前中國移動的OneNet物聯(lián)網(wǎng)開發(fā)平臺還是可以繼續(xù)免費使用。

對于【OneNet】平臺不了解的同學,要認真看一下這個視頻,是一個手把手的保姆級教學視頻,教導OneNet如何使用。不懂的地方也可以隨時問我。

關于中國移動的OneNet物聯(lián)網(wǎng)開發(fā)平臺 的使用可以看視頻教程:https://www.bilibili.com/video/BV12m421u7A5

也可以看文檔(如果訂閱了CSDN的物聯(lián)網(wǎng)專欄 或者 微信公眾號里的物聯(lián)網(wǎng)項目合集),分享的項目里有很多采用OneNet做的項目,也可以通過這些項目文章了解中國移動的OneNet物聯(lián)網(wǎng)開發(fā)平臺的使用辦法。

那么很多同學可能會問: 我現(xiàn)在的項目是采用騰訊云物聯(lián)網(wǎng)開發(fā)平臺做的,如果我換成中國移動的OneNet物聯(lián)網(wǎng)開發(fā)平臺,整個項目改動的地方多嗎? 如果沒有基礎第一次復刻開發(fā)項目能不能自己替換修改?

答案: 修改的地方不多,可以自己替換完成修改。

為什么說,修改的地方不多?

比: 我們做的物聯(lián)網(wǎng)項目可能是:基于STM32+XXX物聯(lián)網(wǎng)平臺設計的XXX項目。

這些項目里面的STM32硬件端XXX物聯(lián)網(wǎng)平臺通信都是采用的MQTT協(xié)議。(可能很多同學暫時還不懂什么是MQTT協(xié)議,但是這不重要)

我們使用的騰訊云IOT物聯(lián)網(wǎng)平臺中國移動OneNet物聯(lián)網(wǎng)平臺、華為云物聯(lián)網(wǎng)平臺、阿里云物聯(lián)網(wǎng)平臺 等等,這些物聯(lián)網(wǎng)平臺都是一個服務器,準確說是MQTT物聯(lián)網(wǎng)服務器,都是支持MQTT協(xié)議接入。

我們的項目可以接入騰訊云物聯(lián)網(wǎng)平臺,也是采用的MQTT協(xié)議接入。 如果想替換成其他的云,代碼改動的地方多嗎? 并不多的,因為其他平臺也是支持MQTT協(xié)議接入。 這就是標準協(xié)議的好處。 替換物聯(lián)網(wǎng)平臺,代碼改動的地方很少(下面會單獨說明)。

7.3 修改說明:STM32代碼

7.3.1 OneNet如何得到MQTT三元組?

關于OneNet的使用,可以看這篇文章學習(免費的)。

https://blog.csdn.net/xiaolong1126626497/article/details/144806792

7.3.2 替換MQTT三元組(常規(guī)操作)

需要修改的地方: MQTT三元組。 (這個是替換你自己物聯(lián)網(wǎng)服務器的MQTT信息)

在你的項目代碼里,main.c最前面可以看到關于物聯(lián)網(wǎng)服務器的信息定義,具體看下圖。 將此處的信息替換成你自己MQTT服務器的信息就可以了。

image-20240918145434533

7.3.3 修改上傳的數(shù)據(jù)格式。

每個項目里在main.c文件里main函數(shù)中的while(1)循環(huán)里面都可以看到下面截圖類似的代碼。 這個就是組合將要上傳的數(shù)據(jù),準備下一步上傳到物聯(lián)網(wǎng)開發(fā)平臺。

image-20240918145950149

每個物聯(lián)網(wǎng)開發(fā)平臺的數(shù)據(jù)格式都不一樣,OneNet有自己格式,騰訊云也有自己的格式,大同小異。

注意: 上面截圖里的代碼,只是一個很普通的字符串拼接,大家不要看的太神秘,很高級。 只要你懂得C語言的字符串,慢慢看一下就知道這份代碼的含義。

我舉個例子【1】: 【192 獨居老人居家監(jiān)護系統(tǒng)】

這是騰訊云IOT需要的數(shù)據(jù)格式。

 sprintf(tmp_buff,"{"method":"report","clientToken":"123","params":{"HeartRate":%d,"DHT11_T":%d,"DHT11_H":%d,"MLX90614":%.1f,"MQ7":%d,"People":%d,"Fall":%d,"RespiratoryRate":%d}}",
            HeartRate,DHT11_T,DHT11_H,MLX90614,MQ7,People,Fall,RespiratoryRate);

這是OneNet需要的數(shù)據(jù)格式。

sprintf(tmp_buff,"{"id":123,"dp":{"HeartRate":[{"v":%d}],"DHT11_T":[{"v":%d}],"DHT11_H":[{"v":%d}],"MLX90614":[{"v":%.1f}],"MQ7":[{"v":%d}],"People":[{"v":%d}],"Fall":[{"v":%d}],"RespiratoryRate":[{"v":%d}]}}			",HeartRate,DHT11_T,DHT11_H,MLX90614,MQ7,People,Fall,RespiratoryRate);

我舉個例子【2】: 【227 基于單片機的人體健康監(jiān)測設計】

這是騰訊云IOT需要的數(shù)據(jù)格式。

 sprintf(mqtt_buff,"{"method":"report","clientToken":"123","params":{"HeartRate":%d,"SPO":%d,"LU90614":%.1f,"MPU6050":%d}}",
HEART,SPO2,LU90614,mpu6050_fall_flag);

這是OneNet需要的數(shù)據(jù)格式。

sprintf(tmp_buff,"{"id":123,"dp":{"HeartRate":[{"v":%d}],"SPO":[{"v":%d}],"LU90614":[{"v":%.1f}],"MPU6050":[{"v":%d}]}}", HEART,SPO2,LU90614,mpu6050_fall_flag);

我舉個例子【3】: 【187 基于STM32設計的物聯(lián)網(wǎng)智能魚缸】

這是騰訊云IOT需要的數(shù)據(jù)格式。

sprintf(tmp_buff,"{"method":"report","clientToken":"123","params":{"ds18b20_max":%d,"adc_hp_max":%d,"time_food":%d,"auto_mode":%d,"water_hp":%d,"temp_data":%.2f,"BH1750":%d,"MQ135":%d,"oxygen_sw":%d,"heat_sw":%d,"led_sw":%d}}",
            ds18b20_max,adc_hp_max,time_food,auto_mode,water_hp,temp_data,BH1750,MQ135,motor_oxygen,temp_heat,LED3_B);

這是OneNet需要的數(shù)據(jù)格式。

sprintf(tmp_buff,"{"id":123,"dp":{"ds18b20_max":[{"v":%d}],"adc_hp_max":[{"v":%d}],"time_food":[{"v":%d}],"auto_mode":[{"v":%d}],"water_hp":[{"v":%d}],"temp_data":[{"v":%.1f}],"BH1750":[{"v":%d}],"MQ135":[{"v":%d}],"motor_oxygen":[{"v":%d}],"temp_heat":[{"v":%d}],"LED3_B":[{"v":%d}],}}",
            ds18b20_max,adc_hp_max,time_food,auto_mode,water_hp,temp_data,BH1750,MQ135,motor_oxygen,temp_heat,LED3_B);
            

我舉個例子【4】: 【236 基于STM32+4G通信技術(shù)設計遠程農(nóng)田灌溉系統(tǒng)】

這是騰訊云IOT需要的數(shù)據(jù)格式。

sprintf(data_buff,"{22method22:22report22,22clientToken22:2212322,22params22: 
            {22DHT11_T22:%d,22DHT11_H22:%d,22BH175022:%d,22DS18B2022:%f,22mode_type22:%d, 
            22MOTOR_SW22:%d,22Water_MIN22:%d,22WaterLevel22:%d}}",
            DHT11_T,DHT11_H,BH1750,DS18B20,ctrl_mode,MOTOR_SW,Water_MIN,Water_level); 
           

這是OneNet需要的數(shù)據(jù)格式。

//OneNet的格式
sprintf(data_buff,"{22id22:123,22dp22:{22DHT11_T22:[{22v22:%d}],22DHT11_H22:[{22v22:%d}],22BH175022:[{22v22:%d}],22DS18B2022:[{22v22:%.1f}],22mode_type22:[{22v22:%d}],22MOTOR_SW22:[{22v22:%d}],22Water_MIN22:[{22v22:%d}],22WaterLevel22:[{22v22:%d}]}}",
			DHT11_T,DHT11_H,BH1750,DS18B20,ctrl_mode,MOTOR_SW,Water_MIN,Water_level);
			            

我舉個例子【5】: 【163 基于STM32+微信小程序設計的智能門鎖

這是騰訊云IOT需要的數(shù)據(jù)格式。

//更新微信小程序
sprintf(mqtt_message,"{"method":"report","clientToken":"123","params":{"lock":%d}}",Motor);
            MQTT_PublishData(POST_TOPIC,mqtt_message,0);
            USART1_Printf("更新門鎖狀態(tài):開鎖rn");   

這是OneNet需要的數(shù)據(jù)格式。

//更新OneNet
sprintf(mqtt_message,"{"id":123,"dp":{"lock":[{"v":%d}]}}",Motor);
			MQTT_PublishData(POST_TOPIC,mqtt_message,0);
			USART1_Printf("更新門鎖狀態(tài):開鎖rn");		            

我舉個例子【6】: 【175 基于STM32設計的牛羊喂養(yǎng)系統(tǒng)】

這是騰訊云IOT需要的數(shù)據(jù)格式。

sprintf(tmp_buff,"{"method":"report","clientToken":"123","params":{"HX711":%d,"DHT11_T":%d,"DHT11_H":%d,"ADC":%d,"button":0}}",
            Weight_Residue,DHT11_T,DHT11_H,water_Residue);

這是OneNet需要的數(shù)據(jù)格式。

//更新OneNet
sprintf(tmp_buff,"{"id":123,"dp":{"HX711":[{"v":%d}],"DHT11_T":[{"v":%d}],"DHT11_H":[{"v":%d}],"ADC":[{"v":%d}],"button":[{"v":0}]}}",
			Weight_Residue,DHT11_T,DHT11_H,water_Residue);            

我舉個例子【7】: 【171 基于STM32+微信小程序設計的智能寵物喂養(yǎng)系統(tǒng)_標準版】

這是騰訊云IOT需要的數(shù)據(jù)格式。

//上報數(shù)據(jù)
sprintf(mqtt_buff,"{"method":"report","clientToken":"123","params":{"DS18B20":%d,"weight":%d,"time":%d,"button":%d}}",
temp_ds18b20,Weight_Shiwu,time_food,button);

這是OneNet需要的數(shù)據(jù)格式。

//更新OneNet
sprintf(mqtt_buff,"{"id":123,"dp":{"DS18B20":[{"v":%d}],"weight":[{"v":%d}],"time":[{"v":%d}],"button":[{"v":%d}]}}", temp_ds18b20,Weight_Shiwu,time_food,button);         

其他的平臺就按自己平臺規(guī)定的格式上傳數(shù)據(jù)即可。

不要被一大串數(shù)據(jù)迷惑了,這就是一個字符串拼接,里面的這種是轉(zhuǎn)義符。

STM32代碼端,只需要改這2個地方,其他依舊如原本項目一樣使用即可,具體使用可以看原本項目對應的視頻。

7.4 修改說明:服務器配置(手把手教程)

如果你的項目原本是騰訊云IOT平臺,現(xiàn)在想替換成OneNet平臺,那么應該如何去創(chuàng)建實現(xiàn)?

基本上這些物聯(lián)網(wǎng)平臺使用都有5個步驟:

(1)創(chuàng)建產(chǎn)品

(2)創(chuàng)建數(shù)據(jù)流(有些平臺叫創(chuàng)建屬性、或者 物模型 這些都只是一個名字)

(3)創(chuàng)建設備

(4)得到MQTT三元組

(5)得到訂閱主題格式、發(fā)布主題格式,發(fā)布的數(shù)據(jù)組合格式

主要關注的是 (2)創(chuàng)建數(shù)據(jù)流物模型 的名字。

如果你的項目是騰訊云IOT平臺,你在你項目文檔里可以看到原本項目開發(fā)的時候創(chuàng)建了物模型也就是填寫了每個物模型的名字。

如果你現(xiàn)在采用onenet替換實現(xiàn)原本的項目,你在onenet創(chuàng)建的時候也會有一個步驟是創(chuàng)建數(shù)據(jù)流,你只需要照著原來文檔里的騰訊云創(chuàng)建物模型的名字挨個去創(chuàng)建你onenet的數(shù)據(jù)流就行了。創(chuàng)建完就完成。

其他的步驟,具體可以直接看 OneNet的視頻: https://www.bilibili.com/video/BV12m421u7A5

7.5 OneNet生成密碼

很多同學反饋,使用OneNet提供的token.exe生成密碼,不正常,無法登陸,導致斷開連接。
在這里插入圖片描述

此軟件win11運行生成的密碼可能不正確 或者 你自己填寫的超時時間不對 。導致無法登陸。

為此,我提供了一份Python代碼,實現(xiàn)此密碼生成的算法。
建議大家,用我提供的代碼,使用Python生成密碼。解決此問題。

還不用考慮過期時間問題。非常的方便。你只需要安裝好Python環(huán)境就可以了。

完整的代碼如下。`

import base64
import hmac
from urllib.parse import quote
import time

# 中國移動官方文檔給出的核心秘鑰計算算法
def token(id,access_key):  
    version = '2018-10-31'
    res = 'products/%s' % id  # 通過產(chǎn)品ID訪問產(chǎn)品API
    # 用戶自定義token過期時間
    et = str(int(time.time()) + 63072000) # 設置為2年有效時間
    # 簽名方法,支持md5、sha1、sha256
    method = 'sha1'
    # 對access_key進行decode
    key = base64.b64decode(access_key)
    # 計算sign
    org = et + 'n' + method + 'n' + res + 'n' + version
    sign_b = hmac.new(key=key, msg=org.encode(), digestmod=method)
    sign = base64.b64encode(sign_b.digest()).decode()
    # value 部分進行url編碼,method/res/version值較為簡單無需編碼
    sign = quote(sign, safe='')
    res = quote(res, safe='')
    # token參數(shù)拼接
    token = 'version=%s&res=%s&et=%s&method=%s&sign=%s' % (version, res, et, method, sign)
    return token

username    = "DGvoS8UR1Q"                                           # 產(chǎn)品ID
accesskey   = "aTF1a2JDc2s0QlNEMFZHU0l6QnJFbDd1Z1oxMUlZOGI="         # accessKey
password = token(username, accesskey)
print(password)

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

八、源碼、文檔下載

我的微信公眾號名稱: 《DS小龍哥嵌入式技術(shù)資訊》 打開微信搜索一下,就可以找到我的微信公眾號。在我的CSDN文章最底下,最底下,也有我的微信公眾號的推廣,點開就可以關注。

在微信公眾號里可以付費下載很多項目的源碼??梢曰貜完P鍵字或者項目的序號都可以了解到項目的源碼。

  • 更多詳細資料請聯(lián)系.docx
    下載

相關推薦