注意!??!【如果第一次了解項(xiàng)目的同學(xué),請(qǐng)認(rèn)真看完第一章,第二章、第三章,文章有目錄??!】
注意?。?!【如果第一次了解項(xiàng)目的同學(xué),請(qǐng)認(rèn)真看完第一章,第二章、第三章,文章有目錄??!】
注意?。?!【如果第一次了解項(xiàng)目的同學(xué),請(qǐng)認(rèn)真看完第一章,第二章、第三章,文章有目錄!!】
項(xiàng)目設(shè)計(jì)里用到的全部工具軟件,Qt安裝包、keil安裝包,各種調(diào)試助手,都可以在這里下載。
https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink
項(xiàng)目源碼可以去這里下載:
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU5Mjg3NTMxOQ==&action=getalbum&album_id=3230261637572755458#wechat_redirect
本文章內(nèi)容會(huì)實(shí)時(shí)更新,常見的問題會(huì)隨時(shí)記錄在冊(cè)。
一、復(fù)刻項(xiàng)目的一般步驟
有2案例視頻,演示了從0開始復(fù)刻項(xiàng)目的過程:
這是案例【1】
STM32項(xiàng)目復(fù)刻實(shí)物的過程演示(從0開始演示組裝過程)
這是案例【2】
【2】STM32項(xiàng)目制作過程演示(環(huán)境檢測(cè)類物聯(lián)網(wǎng)項(xiàng)目)
程序下載過程講解【3】
講解STM32如何通過串口下載程序
下面以 某 個(gè)STM32項(xiàng)目為例。 所有的項(xiàng)目復(fù)刻過程都是以下的流程。
首先說明: 如果是單片機(jī)、STM32的項(xiàng)目。 你想打開項(xiàng)目源碼,編譯,就需要自己要安裝好keil軟件、安裝keil5,如果不會(huì)安裝百度自行找教程安裝。 設(shè)計(jì)文檔里都沒有寫keil軟件的安裝教程,這是單片機(jī)開發(fā)最基礎(chǔ)的工具。
這里是keil的完整安裝包的下載地址:
https://pan.quark.cn/s/4b10a7f126c6
keil軟件的安裝教程
項(xiàng)目設(shè)計(jì)里用到的全部工具軟件,都可以在這里下載。
https://pan.quark.cn/s/145a9b3f7f53
1.1 第1步
照著設(shè)計(jì)文檔,買回來硬件模塊。
每個(gè)項(xiàng)目都設(shè)計(jì)文檔: 打開設(shè)計(jì)文檔的目錄查看,找到硬件選型
章節(jié),買回項(xiàng)目所需要的硬件,每個(gè)模塊的硬件型號(hào),硬件鏈接都貼了的。照著點(diǎn)擊鏈接去買就行了,毫無壓力。
1.2 第2步
硬件買回來之后,然后按照硬件接線
章節(jié)的硬件連線說明,將模塊與STM32開發(fā)板之間連接好線。
每個(gè)項(xiàng)目都設(shè)計(jì)文檔: 打開設(shè)計(jì)文檔的目錄查看,找到STM32設(shè)備端代碼
設(shè)計(jì)章節(jié),找到硬件連線說明。
可能需要注意的一些問題:如果你接線之后,發(fā)現(xiàn)某些模塊無法正常使用。 接線也沒錯(cuò)。 比如: RC522刷卡模塊、步進(jìn)電機(jī)模塊、這些模塊。 注意去對(duì)比下你下載的STM32工程代碼里的接線說明。 每個(gè)工程里每個(gè)模塊都有對(duì)應(yīng)的.h文件,.h文件里有說明當(dāng)前工程里模塊對(duì)應(yīng)的接線。
文檔的內(nèi)容寫完就發(fā)表,而代碼可能會(huì)因?yàn)楹罄m(xù)調(diào)試做一些更改,沒有更新文檔,不過這個(gè)只是少部分項(xiàng)目。 大家復(fù)刻的時(shí)候注意看下工程對(duì)應(yīng)接線就行。 有問題也可以私信問。
下面是接線的過程:
按照設(shè)備文檔的說明,買回來硬件之后,拆開快遞,拿出來的模塊,就是下面這樣的。
然后照著設(shè)計(jì)文檔的說明使用杜邦線進(jìn)行接線就行了。
不知道如何接線? 沒關(guān)系,我下面以DHT11溫濕度傳感器為例,畫圖說明。你看懂了這個(gè)。其他模塊也差不多的。
注意: 如果是 OLED顯示屏,直接插上去就行了,買的開發(fā)板上本身就有排母,照著接,看準(zhǔn)開發(fā)板板子上的 絲印說明,靠左插入,開發(fā)板的排母右邊最終會(huì)空出一個(gè)多余的插孔叫BL
,這個(gè)OLED顯示屏用不到。
如果是LCD顯示屏直接插上去就行。
注意: 開發(fā)板自帶了4個(gè)按鍵,其中第2是個(gè)RST
是復(fù)位鍵、另外3個(gè)按鍵是可編程的獨(dú)立按鍵。
如果硬件接線里有說板載按鍵、板載LED燈
,就是說的板子本身自帶的按鍵和LED,不用接。
如果想固定板子,可以買個(gè)熱熔槍+熱熔膠棒,將模塊固定在板子上。
最終的效果:
1.3 第3步
使用手機(jī)開一個(gè)熱點(diǎn)。
(1)名字設(shè)置為: abc
(2)密碼設(shè)置為:12345678
注意事項(xiàng):
WIFI頻段設(shè)置為:2.4GHZ
千萬注意:熱點(diǎn)的名字,密碼,頻段一點(diǎn)要設(shè)置正確。 否則,到時(shí)候,ESP8266-WIFI連接不上。 ESP8266 只能連接2.4GHZ的WIFI。
一切額外的情況:有些手機(jī)開啟的熱點(diǎn)后設(shè)置為2.4GHZ還是連接不上,這一般是熱點(diǎn)的加密方式ESP8266不支持,可以將你手機(jī)的熱點(diǎn)設(shè)置為開放網(wǎng)絡(luò),也就是不要密碼,任何人可以連接這種,再次測(cè)試。 STM32代碼不用改,只要WIFI的名稱一樣即可
1.4 第4步
如果你的項(xiàng)目用到了云服務(wù)器。也就是物聯(lián)網(wǎng)平臺(tái)。那么就需要修改代碼,設(shè)置連接你自己的設(shè)備。
打STM32的keil工程。
打開之后,先設(shè)置keil的編碼。
然后再看下面的圖片改代碼:
如果你是華為云物聯(lián)網(wǎng)云平臺(tái),還需要改一處地方。
看下面圖片。
還可以看視頻:
講解STM32如何通過串口下載程序
1.5 第5步
打開工程,代碼修改完畢之后,編譯代碼、然后,使用USB線將開發(fā)板的左邊的USB口(串口1)與電腦的USB連接,打開程序下載軟件下載程序。
具體下載過程看下面圖:
打開程序下載軟件:
還可以看視頻:
STM32單片機(jī)程序下載方法講解
1.4 第5步
下載成功之后,串口調(diào)試助手會(huì)打印初始化過程。 比如:ESP8266的初始化過程,以及WIFI熱點(diǎn)的連接過程。
串口調(diào)試助手網(wǎng)上隨便找一個(gè)就行了,任何串口調(diào)試助手都可以的,只是為了看一下打印的信息。
如何提示ESP8266-錯(cuò)誤,那么就認(rèn)真檢查WIFI接線。
如果顯示W(wǎng)IFI連接失敗,請(qǐng)認(rèn)真檢查 第三步。
如果一切正常,就進(jìn)入了程序主界面。
這時(shí)候,打開微信小程序(如果你是微信小程序) 或者 手機(jī)APP(如果你是手機(jī)APP) ,也能看到設(shè)備的最新數(shù)據(jù),點(diǎn)擊控制按鈕,也能控制設(shè)備了。
到此,恭喜你,整個(gè)項(xiàng)目已經(jīng)完成開發(fā)。
注意: 如果你的項(xiàng)目用到了手機(jī)APP 或 Window上位機(jī) ,你可以直接將資料包里的 Android手機(jī)的安裝包(后綴是.apk)的文件拷貝到手機(jī)直接安裝使用。 如果是Window上位機(jī)直接雙擊可執(zhí)行目錄下的exe應(yīng)用程序文件運(yùn)行。
1.5 【對(duì)于使用華為云IOT服務(wù)器的項(xiàng)目復(fù)刻】
關(guān)于帶華為云IOT的項(xiàng)目。 復(fù)刻就是兩種:
【方案1】你不需要自己創(chuàng)建華為云,采用原本代碼里已經(jīng)配置好的華為云服務(wù)器。 你直接安裝編譯好的手機(jī)APP使用,或者 打開電腦的APP使用。
【方案2】你自己創(chuàng)建了華為云服務(wù)器,你要替換你的華為云服務(wù)器。那么就需要改STM32代碼里main.c最前面的MQTT參數(shù),然后改Qt上位機(jī)代碼里widget.h里的服務(wù)器參數(shù)。 然后重新編譯生成APP,就可以了。 QT代碼編譯支持編譯Windows 的APP 和 Android的APP,Windows的編譯教程在設(shè)計(jì)文檔里已經(jīng)展示了。 Android的編譯需要配置Android環(huán)境,這個(gè)需要翻墻才好配置,需要網(wǎng)絡(luò)能夠訪問谷歌。這個(gè)配置過程可以自己搜搜教程解決。只要配置好了Android環(huán)境,能夠建立Android 工程,打開代碼就可以編譯出Android的APP 了。
對(duì)應(yīng)的視頻:
【1】介紹STM32物聯(lián)網(wǎng)項(xiàng)目工程移植需要修改的地方 https://www.bilibili.com/video/BV17t42177WL
【2】Qt上位機(jī)源碼如何打開?編譯?運(yùn)行? https://www.bilibili.com/video/BV1Cz42117Hh
那如何選擇呢? 這個(gè)看你自己的能力。
選擇【方案1】就不用改代碼,下載代碼就可以使用。
選擇【方案2】就需要改代碼,匹配你的華為云服務(wù)器。
不管你選擇【方案1】還是【方案2】對(duì)你看STM32代碼,看Qt代碼,對(duì)代碼學(xué)習(xí),了解代碼如何設(shè)計(jì)的都沒有影響。
很多同學(xué)擔(dān)心華為云IOT服務(wù)器的費(fèi)用,這個(gè)不用擔(dān)心: 遙遙領(lǐng)先的物聯(lián)網(wǎng)服務(wù)器是免費(fèi)使用的??梢悦赓M(fèi)創(chuàng)建1000個(gè)設(shè)備。
二、 復(fù)刻的流程描述
在電腦上解壓已經(jīng)下載好的項(xiàng)目資料包,認(rèn)真看設(shè)計(jì)文檔,買好硬件材料,硬件接線查看文檔STM32設(shè)計(jì)章節(jié)的第1小節(jié),有詳細(xì)描述如何接線,一定要認(rèn)真看著說明接,接好線,下載代碼進(jìn)去就可以了。
只要按照我說的做,只要模塊材料齊全,1天時(shí)間內(nèi)(都用不到一天),就可以完全做出我博客一模一樣,完全一樣的設(shè)計(jì)。
整體步驟復(fù)述:
(1) 下載自己想復(fù)刻的項(xiàng)目資料包
(2) 電腦安裝好keil軟件(我用的keil5)
(3)打開資料包里自帶的PDF設(shè)計(jì)文檔,先將設(shè)計(jì)文檔整體閱讀一遍(不要走馬觀花),先將文檔內(nèi)容閱讀一次之后,對(duì)文檔的內(nèi)容有一個(gè)大致的記憶,一定要記得看目錄,文檔都有目錄。
(4)照著設(shè)計(jì)文檔里第二章,去買好項(xiàng)目所需的全部硬件材料(STM32開發(fā)板不要亂換,換了代碼就得有改動(dòng),除非你有能力改代碼)。
(5)如果你復(fù)刻的項(xiàng)目里涉及到云平臺(tái):比如,OneNet、騰訊云+微信小程序,華為云IOT服務(wù)器,那么就按照文檔的步驟一步一步去完成設(shè)計(jì),完成模擬數(shù)據(jù)上傳以及測(cè)試。
(6)將淘寶買回來的模塊按照設(shè)計(jì)文檔STM32設(shè)計(jì)章節(jié)第1小節(jié)的硬件連線介紹,將模塊與STM32連接好。
項(xiàng)目里唯一需要焊接的地方是,解決電源不夠接擴(kuò)展電源的情況下焊接排針擴(kuò)展電源。
如果你不方便焊接,可以直接在淘寶買電源擴(kuò)展板。
鏈接: https://item.taobao.com/item.htm?id=647681090119&skuId=4672158745999&spm=a1z0d.6639537/tb.1997196601.4.754374841n18eN
買2個(gè)擴(kuò)展板,方便分別擴(kuò)展5v電源 和 3.3V電源。 將開發(fā)板的5V和3.3V電源分別用杜邦線接入到下面的擴(kuò)展板最前面橫著的一排的VCC和GND上。其他模塊就可以將電源接在此擴(kuò)展板上豎著的VCC和GND上了,解決電源不夠接的問題。
(7)打開keil工程(工程文件一般在STM32源碼目錄下的USER目錄下,只要安裝好keil,就會(huì)自動(dòng)識(shí)別工程文件)。如果你的項(xiàng)目涉及到云,比如:OneNet、騰訊云+微信小程序,華為云IOT服務(wù)器,那么需要打開工程里main.c文件,翻到最前面有幾個(gè)宏定義,設(shè)置MQTT服務(wù)器的三元組,設(shè)置ESP8266連接的WIFI名稱和熱點(diǎn)。要根據(jù)自己的實(shí)際情況進(jìn)行修改。 MQTT三元組,訂閱主題、發(fā)布主題等等,根據(jù)自己在步驟(5)里測(cè)試最終得到的結(jié)果如實(shí)填入就行。 如果是用的onenet的HTTP協(xié)議上傳云端數(shù)據(jù),代碼里要修改自己的API KEY ,代碼里都會(huì)有注釋,如果用的SIM800C聯(lián)網(wǎng) 要注意插移動(dòng)卡和聯(lián)通卡。
注意: 如果你的項(xiàng)目用的是華為云IOT物聯(lián)網(wǎng)服務(wù)器,肯定會(huì)用到Qt設(shè)計(jì)的Android手機(jī)APP,如果你簡(jiǎn)單復(fù)刻項(xiàng)目,就不要改STM32代碼里的MQTT任何東西,QT上位機(jī)源碼也不用改,安裝我資料包里提供的手機(jī)APP安裝包或者Windows可執(zhí)行文件打開使用就行了。 如果你確實(shí)要修改或者增加上位機(jī)APP的工程,你下載的資料包里又沒有上位機(jī)源碼,可以單獨(dú)下載,在我的CSDN博客里可以單獨(dú)下載(CSDN里部分涉及華為云的項(xiàng)目資料,QT上位機(jī)源碼和STM32源碼是分開的),如果是在我的微信公眾號(hào)里下載的項(xiàng)目,就不用管,微信公眾號(hào)里下載的資源包都是帶了上位機(jī)源碼的。
(8)打開keil工程編譯,編譯成功之后,將程序下載到STM3開發(fā)板即可。下載方式看自己,串口下載也可以,使用stlink、jlink之類的下載器都可以,自己會(huì)哪種就用哪種,我基本上是采用串口下載HEX文件,這個(gè)在每個(gè)項(xiàng)目的演示視頻里我也演示過,視頻都在我的B站里。
地址在這里:
https://space.bilibili.com/68130189
這里有手把手教學(xué)視頻,如何制作項(xiàng)目: https://www.bilibili.com/video/BV1ar421x7rt
講解如何編譯代碼,下載STM32程序: https://www.bilibili.com/video/BV1Cw4m1e7Yc
演示上位機(jī)源碼如何設(shè)計(jì)如何開發(fā),手機(jī)APP如何開發(fā)出來的: https://www.bilibili.com/video/BV1Cz42117Hh
我的微信公眾號(hào)名稱: 《DS小龍哥嵌入式技術(shù)資訊》 打開微信搜索一下,就可以找到我的微信公眾號(hào)。在我的CSDN文章最底下,最底下,也有我的微信公眾號(hào)的推廣,點(diǎn)開就可以關(guān)注。
三、關(guān)于供電問題(很重要,很重要)
很多設(shè)計(jì)里用到的MQ2、MQ4、MQ3、MQ7、MQ135、MQxxx 系列的模塊,還用到了電機(jī)、風(fēng)扇、充氧泵等一系列電機(jī),還用到了SIM800C這種2G模塊、Air724UG等這種4G模塊,ESP8266這種WIFI模塊。 如果板子只是一根USB線供電,可能會(huì)導(dǎo)致系統(tǒng)供電不足。
出現(xiàn)的現(xiàn)象就是:
(1)板子插電腦上,發(fā)現(xiàn)串口被占用,串口無法使用。
(2)ESP8266硬件初始化錯(cuò)誤,或者WIFI初始化之后卻連接不上網(wǎng)絡(luò),SIM800C初始化不成功,4G模塊無法聯(lián)網(wǎng)等等問題。
那如何解決供電不足的問題?
【1】解決方案1
(1)如果你的設(shè)計(jì)可以用有線電源供電,就買下面推薦的穩(wěn)壓模塊。
那么需要采用外部電源供電,買一個(gè)下面的 可調(diào)電源穩(wěn)壓模塊 ,一個(gè)12V 、2A的電源插頭就可以了。 買回來之后,將模塊的電源都接在這個(gè)電源穩(wěn)壓模塊上,將STM32開發(fā)板上的5V和GND分別用杜邦線接到穩(wěn)壓模塊的5V和GND上即可。
采用外部電源供電,接好線之后的效果如下:
電源模塊的可調(diào)電壓輸出功能演示(調(diào)整輸出的電壓)
穩(wěn)壓模塊購(gòu)買
鏈接:https://item.taobao.com/item.htm?spm=a21n57.1.0.0.2921523cQeodt2&id=16606969730&ns=1&abbucket=7#detail
電源插頭購(gòu)買
鏈接: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
如果你的設(shè)計(jì)不方便有線電源供電,可以買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
在這里插入圖片描述
四、復(fù)刻過程中可能會(huì)出現(xiàn)的各種問題疑問
在復(fù)刻的時(shí)候,很多同學(xué)都會(huì)問,我用C8T6可以嗎?我用ZET6可以嗎?
首先,你要了解STM32F103這個(gè)系列。
STM32F103是一個(gè)系列。 RCT6 C8T6 ZET6 RBT6 這些都是里面表示不同配置的芯片。 就像你買手機(jī),你買iPhone15 有128G配置,有256G配置,有512G配置,有1TB配置 。
這就是 STM32F103后面的 RCT6 C8T6 ZET6 RBT6 區(qū)別。
不是說 ZET6 和 RCT6 是不同的芯片。 他們是一樣的。
區(qū)別就在于:不同的型號(hào)它的引腳數(shù)量不一樣、flash、sram大小不一樣。
如果工程是RCT6的,你想用C8T6?那你要確定目前項(xiàng)目里使用的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顯示硬件初始化錯(cuò)誤或者連接不上熱點(diǎn)怎么辦? 屏幕上一直顯示 WIFI Connect怎么辦??
這些問題都是指向一個(gè)問題: 你的ESP8266 連不上你的熱點(diǎn)。
首先,我得說明一下: 只要你現(xiàn)在做的項(xiàng)目是物聯(lián)網(wǎng)項(xiàng)目,只要里面使用到了WIFI或者2G、4G模塊,支持這種需要聯(lián)網(wǎng)上傳數(shù)據(jù)的功能。 那么,在初始化階段,模塊一定要初始化成功,單片機(jī)才會(huì)運(yùn)行接下來的程序。
就比如,上面提到這些問題,為什么屏幕不顯示?卡???數(shù)據(jù)不動(dòng)? 其實(shí)不是卡住,是現(xiàn)在ESP8266-WiFi正在連接你的WIFI熱點(diǎn)。 (這個(gè)問題在每個(gè)視頻里(我發(fā)布在B站的視頻),也就是項(xiàng)目對(duì)應(yīng)的視頻里,都有講解這個(gè)上電WIFI連接的過程,很多同學(xué)其實(shí)不愛看視頻講解,也不愛看文檔,看了就是簡(jiǎn)單瞟一眼就完了,結(jié)果做的時(shí)候遇到一堆問題,其實(shí)只要認(rèn)真看文檔+視頻,90%的問題都已經(jīng)可以解決了)
那么怎么解決上面說的問題?
(1) 如果是ESP8266-WIFI,就打開工程里main.c文件,翻到最前面有幾個(gè)宏定義,設(shè)置ESP8266連接的WIFI名稱和熱點(diǎn); 上電的時(shí)候,ESP8266必須要連接指定的熱點(diǎn),連接成功之后,才可聯(lián)網(wǎng),才可以繼續(xù)執(zhí)行程序。(你的手機(jī)同時(shí)也要開啟熱點(diǎn),頻段設(shè)置為2.4GHZ)
(2)如果是2G模塊或者4G模塊,就檢查SIM卡是否插入,是否插入正確,2G模塊要插移動(dòng)卡,比如:SIM800C。
(3) ATK-ESP8266的電壓接5V,不要接3.3V,怕你的USB線供電電流不夠?qū)е聼o法正常工作(不要用開發(fā)板自帶的黑色USB線,用單獨(dú)買的質(zhì)量好一點(diǎn)的藍(lán)色USB線)。
那么按照上面的操作之后,發(fā)現(xiàn)你的ESP8266還是連接不上? LCD顯示屏還是卡???
繼續(xù)看下面的第【2】小節(jié)的內(nèi)容。
(2)ESP8266-WIFI初始化不成功、ESP8266-WIFI連接不上熱點(diǎn)怎么辦?
如果你的項(xiàng)目是屬于物聯(lián)網(wǎng)的項(xiàng)目,也就是項(xiàng)目中用到了ESP8266-WiFi,一定要注意: 如果ESP8266無法正常工作,無法正常連接網(wǎng)絡(luò)。整體的程序是無法正常運(yùn)行的。也就造成了,屏幕不顯示任何東西,按鍵無反應(yīng),等等現(xiàn)象。 這里一定要注意看。
第一步,保證你的ESP8266接線正常,一定檢查清楚。
如果還是無法解決,可以看我的B站視頻(講解ESP8266的調(diào)試):
https://www.bilibili.com/video/BV1ku4y1E74M
第二步,自己手機(jī)開熱點(diǎn)的時(shí)候,要配置正確。
第三步,檢查USB供電的線,需要質(zhì)量好一點(diǎn)線,我文中用到的STM32F103RCT這款開發(fā)板本身自帶的黑色USB線,質(zhì)量特別差,所以在項(xiàng)目硬件材料里我都會(huì)讓大家買一條藍(lán)色USB下載線進(jìn)行使用,原因就是這個(gè)。
第四步,打開串口調(diào)試助手,查看程序運(yùn)行的狀態(tài)。 如果WIFI連接不上,或者顯示屏沒什么反應(yīng)。一定要打開串口調(diào)試助手看問題原因。
打?。?strong>WIFI:0 就表示ESP8266已經(jīng)連接到路由器。 如果打印的是 WIFI:6 就表示ESP8266無法連接你的熱點(diǎn),這就要認(rèn)真檢查上面描述的這些問題了。 如果打印 WIFI:8 就表示連接不上MQTT服務(wù)器,要檢查你的WIFI熱點(diǎn)是否連接了互聯(lián)網(wǎng)能不能上網(wǎng)。
第五步,如果不管如何接線,esp8266-WIFI都顯示硬件檢測(cè)錯(cuò)誤,那么:最壞的結(jié)果,你的WIFI壞了,該換新的了。
可以重新買一個(gè),買這一款。
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)繼電器如何接?不會(huì)使用繼電器怎么辦。
看這個(gè)視頻,講解繼電器的。
https://www.bilibili.com/video/BV1FC4y1J7k2/
(4)MQTT協(xié)議看不懂,我想學(xué)習(xí)項(xiàng)目里的MQTT協(xié)議代碼如何編寫的,怎么辦?
看這個(gè)視頻,講解MQTT協(xié)議代碼,如何從0開始一行一行寫出來的。
https://www.bilibili.com/video/BV1BN4y1Y7cf
(5)如果使用SIM800C-GSM模塊無法連接網(wǎng)絡(luò)、無法初始化怎么?
如果你用的項(xiàng)目里使用了SIM800C、SIM900A這種2G的GSM模塊,接線正確,串口調(diào)試助手缺打印初始化失敗。
首先:插入的卡必須是移動(dòng)或者聯(lián)通卡。
然后,檢查你附近是否還有移動(dòng)、聯(lián)通的2G基站。2G已經(jīng)處于淘汰階段,很多地方已經(jīng)關(guān)閉了2G基站,如果已經(jīng)關(guān)閉,就無法使用了。
(6)GPS無法定位成功,定位位置不刷新怎么辦?
如果你的項(xiàng)目里用到了GOS模塊。發(fā)現(xiàn)GPS模塊上傳到云平臺(tái)的GPS定位沒有更新。
解決: GPS模塊必須在空曠地帶使用,GPS模塊定位成功之后,上面有一個(gè)紅色的小燈,會(huì)1秒閃爍一次。 如果燈沒有閃爍,就表示沒有定位成功。 GPS信號(hào)無法穿墻,你在屋里是無法定位成功的。
(7)OneNet 新版界面更新了,不一樣怎么辦? 針對(duì)MQTT協(xié)議接入
講解2024新版本OneNet云平臺(tái)MQTT協(xié)議的使用(講解設(shè)備上云以及可視化頁(yè)面設(shè)計(jì))
如果你看到的項(xiàng)目設(shè)計(jì)文檔里描述的OneNet界面與現(xiàn)在不一樣。
看區(qū)別在下面。
點(diǎn)擊創(chuàng)建產(chǎn)品。
填寫產(chǎn)品信息。
注意,注意,注意,這里填:數(shù)據(jù)流?。?!數(shù)據(jù)流?。?!數(shù)據(jù)流?。?!
創(chuàng)建完成。
接下里與原文檔里教程沒什么區(qū)別,照著做就行了。
如果到了可視化界面設(shè)計(jì)的步驟,發(fā)現(xiàn)綁定數(shù)據(jù)源沒有,怎么辦?
OneNet更新之后,綁定數(shù)據(jù)源發(fā)生了變化,如果要正常找到數(shù)據(jù)流,看下面這樣綁定。
userId在這里看:
accessKey在這里看:
產(chǎn)品ID在這里看:
設(shè)備名稱在這里看:
也可以看下面最新寫的文檔(不過這個(gè)是在專欄里,要訂
閱才可以看):
https://blog.csdn.net/xiaolong1126626497/article/details/133923492
(8)OneNet多協(xié)議入口沒有了怎么辦?
如果你當(dāng)前的項(xiàng)目,采用的HTTP協(xié)議接入OneNet,你現(xiàn)在注冊(cè)的賬號(hào)進(jìn)去卻看不到多協(xié)議接入,沒有HTTP協(xié)議了是什么情況?
這是因?yàn)镺neNet更新之后,關(guān)閉了新用戶多協(xié)議入口 ,老用戶還可以繼續(xù)使用。
那怎么解決? 老用戶都能使用,那說明功能還在,只是屏蔽了新用用戶的入口。
可以這樣解決: 你先正常登錄OneNET,進(jìn)入到控制臺(tái)。然后。
復(fù)制這個(gè)鏈接:https://open.iot.10086.cn/develop/global/product/#/public?protocol=3&other=1 復(fù)制到瀏覽器里打開,就可以進(jìn)入多協(xié)議的界面了。 這就是相當(dāng)于點(diǎn)擊隱藏掉的多協(xié)議按鈕,跳轉(zhuǎn)過去的網(wǎng)頁(yè)地址。
下面是HTTP協(xié)議調(diào)試上傳數(shù)據(jù)的效果視頻:
OneNet-HTTP協(xié)議上傳的模擬測(cè)試(TCP調(diào)試助手)
2024年4月13號(hào)之后,OneNet關(guān)閉了多協(xié)議新建設(shè)備的功能。不管是老用戶,還是新用戶。都無法新建設(shè)備,但是之前新建的項(xiàng)目還是正常可以使用,不受到影響。
如果你復(fù)刻我項(xiàng)目里的多協(xié)議項(xiàng)目,那么你就不用去做onenet的新建設(shè)備的操作。直接使用原來項(xiàng)目里設(shè)計(jì)好的OneNet鏈接就行可以了。按照原項(xiàng)目里的API KEY 上傳數(shù)據(jù),在設(shè)計(jì)好發(fā)布好的可視化頁(yè)面上就可以看。
(9) (RTC時(shí)鐘問題)界面上的時(shí)間,倒計(jì)時(shí),不動(dòng),RTC初始化失敗,如何解決?界面上時(shí)間顯示不對(duì)如何解決?
這是針對(duì)2023年之前的老項(xiàng)目,對(duì)于2024年的項(xiàng)目修改時(shí)間在main函數(shù)里有注釋看注釋就知道了
如果你的項(xiàng)目里用到了RTC時(shí)鐘,也就是界面會(huì)顯示時(shí)間、顯示倒計(jì)時(shí)之類的時(shí)間。 如果發(fā)現(xiàn)初始化一直卡住RTC初始化不動(dòng),或者是 RTC的計(jì)時(shí)時(shí)間不變)(界面上的時(shí)鐘不動(dòng)),一直靜止?fàn)顟B(tài)。
可能板子上的RTC實(shí)時(shí)時(shí)鐘晶振壞了 或者 虛焊了。 也就是芯片旁邊的圓柱體晶振。你如果有電洛鐵,在晶振的兩個(gè)腳上點(diǎn)一下。焊接一下再試試。圓柱體的晶振就是 32.768KHZ,是實(shí)時(shí)時(shí)鐘的晶振。 如果再不行,就換個(gè)板子試試,或者 換一個(gè)晶振焊接上去。
可以動(dòng)手修改下RTC的初始化代碼:
如何修改呢? 將源工程里rtc.c里的RTC_Init
函數(shù)代碼全部刪除。 注意,是RTC_Init
這個(gè)函數(shù)這段代碼刪除。 然后,將下面的代碼貼進(jìn)去。重新編譯工程下載進(jìn)去,測(cè)試倒計(jì)時(shí),時(shí)鐘 這些是否正常(如果還是不正常,就看這段代碼的下面還有一個(gè)單獨(dú)測(cè)試的工程測(cè)試RTC時(shí)鐘,如果還是不行。那就是上面的問題了)。
/**
* @brief RTC寫入后備區(qū)域SRAM
* @param bkrx : 后備區(qū)寄存器編號(hào),范圍:0~41
* @param data : 要寫入的數(shù)據(jù),16位長(zhǎng)度
* @retval 無
*/
void rtc_write_bkr(uint32_t bkrx, uint16_t data)
{
uint32_t temp = 0;
PWR->CR |= 1 << 8; /* 取消備份區(qū)寫保護(hù) */
temp = BKP_BASE + 4 + bkrx * 4;
(*(uint16_t *)temp) = data;
}
/**
* @brief RTC讀取后備區(qū)域SRAM
* @param bkrx : 后備區(qū)寄存器編號(hào),范圍: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
* 默認(rèn)嘗試使用LSE,當(dāng)LSE啟動(dòng)失敗后,切換為L(zhǎng)SI.
* 通過BKP寄存器0的值,可以判斷RTC使用的是LSE/LSI:
* 當(dāng)BKP0==0X5050時(shí),使用的是LSE
* 當(dāng)BKP0==0X5051時(shí),使用的是LSI
* 注意:切換LSI/LSE將導(dǎo)致時(shí)間/日期丟失,切換后需重新設(shè)置.
*
* @param 無
* @retval 0,成功
* 1,進(jìn)入初始化模式失敗
*/
u8 RTC_Init(void)
{
/* 檢查是不是第一次配置時(shí)鐘 */
uint16_t bkpflag = 0;
uint16_t retry = 200;
uint32_t tempreg = 0;
uint32_t clockfreq = 0;
RCC->APB1ENR |= 1 << 28; /* 使能電源時(shí)鐘 */
RCC->APB1ENR |= 1 << 27; /* 使能備份時(shí)鐘 */
PWR->CR |= 1 << 8; /* 取消備份區(qū)寫保護(hù) */
bkpflag = rtc_read_bkr(0); /* 讀取BKP0的值 */
if (bkpflag != 0X5050) /* 之前使用的不是LSE */
{
RCC->BDCR |= 1 << 0; /* 開啟外部低速振蕩器 */
while (retry && ((RCC->BDCR & 0X02) == 0)) /* 等待LSE準(zhǔn)備好 */
{
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開啟失敗,啟動(dòng)LSI. */
clockfreq = 40000 - 1; /* LSI頻率約40Khz(參考F103數(shù)據(jù)手冊(cè)說明) */
rtc_write_bkr(0, 0X5051); /* 標(biāo)記已經(jīng)初始化過了,使用LSI */
}
else
{
tempreg |= 1 << 8; /* 選擇LSE,作為RTC時(shí)鐘 */
clockfreq = 32768 - 1; /* LSE頻率為32.769Khz */
rtc_write_bkr(0, 0X5050); /* 標(biāo)記已經(jīng)初始化過了,使用LSE */
}
tempreg |= 1 << 15; /* 使能RTC時(shí)鐘 */
RCC->BDCR = tempreg; /* 重新設(shè)置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; /* 時(shí)鐘周期設(shè)置(有待觀察,看是否跑慢了?)理論值:32767 */
RTC->CRL &= ~(1 << 4); /* 配置更新 */
while (!(RTC->CRL & (1 << 5))); /* 等待RTC寄存器操作完成 */
if (bkpflag != 0X5051) /* BKP0的內(nèi)容既不是0X5050,也不是0X5051,說明是第一次配置,需要設(shè)置時(shí)間日期. */
{
SetRtcTime(2024, 4, 29, 6, 59, 55); /* 設(shè)置時(shí)間 */
}
}
else /* 系統(tǒng)繼續(xù)計(jì)時(shí) */
{
retry = 30; /* 避免卡死 */
while ((!(RTC->CRL & (1 << 3)) && retry)) /* 等待RTC寄存器同步 */
{
delay_ms(5);
retry--;
}
retry = 100; /* 檢測(cè)LSI/LSE是否正常工作 */
tempreg = RTC->DIVL; /* 讀取DIVL寄存器的值 */
while (retry)
{
delay_ms(5);
retry--;
if (tempreg != RTC->DIVL) /* 對(duì)比DIVL和tempreg, 如果有差異, 則退出 */
{
break; /* DIVL != tempreg, 說明RTC在計(jì)數(shù), 說明晶振沒問題 */
}
}
if (retry == 0)
{
rtc_write_bkr(0, 0XFFFF); /* 標(biāo)記錯(cuò)誤的值 */
RCC->BDCR = 1 << 16; /* 復(fù)位BDCR */
delay_ms(10);
RCC->BDCR = 0; /* 結(jié)束復(fù)位 */
return 1; /* 初始化失敗 */
}
else
{
RTC->CRH |= 0X01; /* 允許秒中斷 */
while (!(RTC->CRL & (1 << 5))); /* 等待RTC寄存器操作完成 */
}
}
STM32_SetPriority(RTC_IRQn,2,1);//設(shè)置RTC中斷優(yōu)先級(jí) /* 優(yōu)先級(jí)設(shè)置 */
return 0;
}
或者 下載這個(gè)工程測(cè)試一下RTC時(shí)鐘: r如果這個(gè)工程測(cè)試也不行,那么就實(shí)錘了上面的問題
https://download.csdn.net/download/xiaolong1126626497/89225596
如何你的LCD界面上的時(shí)間顯示的不是當(dāng)前的時(shí)間,如何更改?
一些設(shè)計(jì)項(xiàng)目中時(shí)間并不是與網(wǎng)絡(luò)同步的,如果時(shí)間不正確,需要自己更改。
在哪里更改?
設(shè)置之后編譯代碼下載進(jìn)去,然后,板子斷電,再重新上電就更新時(shí)間了。 (需要斷電一次才會(huì)更新時(shí)間)
【10】騰訊云IOT的MQTT三元組,需要python環(huán)境,我沒有怎么辦?
如果你的項(xiàng)目用到騰訊云IOT服務(wù)器,那么在MQTT三元組秘鑰生成章節(jié),會(huì)用到一段python代碼運(yùn)行,如果你的電腦沒有python環(huán)境,照著下面文章教程去搭建即可。
看這篇文章: Python入門開發(fā): windows下搭建python開發(fā)環(huán)境(vscode)
https://blog.csdn.net/xiaolong1126626497/article/details/118497618
視頻看這個(gè):
騰訊云IOT平臺(tái)生成MQTT三元組的過程(運(yùn)行python)
【11】Qt工程源碼打不開,編譯報(bào)錯(cuò)怎么辦?
如果你的設(shè)計(jì)里用到了上位機(jī),需要自己開發(fā)上位機(jī)或者Android手機(jī)APP。
當(dāng)你打開資料包里的Qt工程時(shí),發(fā)現(xiàn)報(bào)錯(cuò),無法編譯,一堆紅色。
如何解決?
(1) 照著文檔里上位機(jī)章節(jié)說明,先把Qt環(huán)境安裝好
(2)將資料包里的Qt工程拷貝出來,放在你電腦的英文路徑下,再打開工程即可(工程文件的后綴就是.pro
)。
【12】 Android開發(fā)環(huán)境如何搭建?
如果你的設(shè)計(jì)里用到了上位機(jī),并且你需要自己編譯出Android手機(jī)的APP。
這就需要搭建Anroid開發(fā)環(huán)境。 如果你只需要在電腦上編譯運(yùn)行,就不用這么麻煩。
如何搭建Android開發(fā)環(huán)境??
看這里: https://blog.csdn.net/xiaolong1126626497/article/details/117254453
【13】開發(fā)板的電源不夠接?如何擴(kuò)展?
當(dāng)你的模塊都買回來時(shí),接線發(fā)現(xiàn),板子的電源口太少了,模塊很多,電源不夠接,怎么解決?
有兩種辦法:
第一種: 需要焊接排針。 淘寶購(gòu)買兩排單排排針。 然后在PCB洞洞板上焊接兩排排針擴(kuò)展電源。
看下面的圖片: 兩排排針底部 是聯(lián)通的。 焊接好之后,分別用兩根杜邦線,將排針分別插在開發(fā)板的5V和GND電源口上,這樣就可以將板子的5V和GND擴(kuò)展出多個(gè),你的模塊就可以正常接了。
如果你不會(huì)焊接怎么辦? 但是又想焊接,你可以去外面 修手機(jī)修電腦的店鋪,讓他們幫忙給你焊接一下排針即可。
第二種辦法: 直接淘寶買電源擴(kuò)展板。
鏈接: https://item.taobao.com/item.htm?id=647681090119&skuId=4672158745999&spm=a1z0d.6639537/tb.1997196601.4.754374841n18eN
買2個(gè)擴(kuò)展板,方便分別擴(kuò)展5v電源 和 3.3V電源。 將開發(fā)板的5V和3.3V電源分別用杜邦線接入到下面的擴(kuò)展板最前面橫著的一排的VCC和GND上。其他模塊就可以將電源接在此擴(kuò)展板上豎著的VCC和GND上了,解決電源不夠接的問題。
【14】 電機(jī)怎么接?加熱棒怎么接? 與繼電器如何接?
在很多項(xiàng)目設(shè)計(jì)里,都用到了 抽水電機(jī)、散熱風(fēng)扇、充氧電機(jī)、加熱模塊,等等。
比如:智能魚缸、智慧農(nóng)業(yè)、智能花盆、盆栽種植 、大棚種植 這些項(xiàng)目里基本上都要 進(jìn)行灌溉,抽水、加熱,通風(fēng)。 那如何接呢?
首先: 上面提到的這些模塊,不能直接與單片機(jī)也就是STM32連接,需要通過繼電器進(jìn)行控制。 STM32控制繼電器,繼電器再去控制這些電機(jī),實(shí)現(xiàn)最終的控制。
如果買回來的電機(jī)、加熱棒有USB口怎么接? 要么買USB母頭底座在板子上焊接一個(gè)轉(zhuǎn)接口,要么直接把電機(jī)的USB接頭剪掉,剝出里面的銅絲,連繼電器即可。 那么,繼電器如何接? 看上面的(3)小節(jié)的講解。
【15】MQTT調(diào)試助手去哪里下載?
在物聯(lián)網(wǎng)相關(guān)的項(xiàng)目里,會(huì)看到我的項(xiàng)目文檔里用到MQTT調(diào)試助手進(jìn)行與物聯(lián)網(wǎng)平臺(tái)互發(fā)數(shù)據(jù)進(jìn)行測(cè)試,這個(gè)工具去哪里下載? 一般在資料包的工具目錄下都會(huì)自帶,如何沒有也可以去下載。
下載地址: https://download.csdn.net/download/xiaolong1126626497/18784012
【16】 如何下載程序?STM32應(yīng)該如何下載程序?
STM32可以支持兩種方式下載:
(1) 串口下載。 串口下載HEX文件。
(2) 下載器下載。 通過ST-LINK、J-LINK 之類的下載器,點(diǎn)擊keil軟件里的下載按鈕下載程序。
串口下載: 我項(xiàng)目里用到的最多的板子都是STM32F103RCT6這一款,這款板子本身自帶了CH340芯片,也就是USB-TTL芯片,直接可以接電腦。 通過電腦打開串口,就可以下載程序。
這種下載方式不需要下載器,你只需要接一根USB線就可以下載。
接線圖如下圖:
打開程序下載工具: 看序號(hào)點(diǎn)擊,下載即可。
具體下載也可以看視頻:
講解STM32如何通過串口下載程序
【17】LCD顯示屏上半部分有雪花,有白色,顯示不全如何解決?
我的很多項(xiàng)目里用到了1.44寸SPI接口的LCD顯示屏,在我視頻里和文檔里看到,我當(dāng)初做出的實(shí)物,顯示一切正常;而你照著設(shè)計(jì)文檔買好硬件,練好線,下載進(jìn)去發(fā)現(xiàn),LCD顯示屏上半部分顯示的不正確。
比如,錯(cuò)誤效果如下:
問題原因:
因?yàn)檫@個(gè)顯示屏的驅(qū)動(dòng)IC芯片有更換,雖然照著鏈接買的看起來和我當(dāng)初買的長(zhǎng)的一樣。顯示屏本身的驅(qū)動(dòng)IC有變化,導(dǎo)致驅(qū)動(dòng)代碼有變化。
解決辦法:
打開STM32工程,找到lcd.c 或者 oled.c 源文件。
找到Lcd_SetRegion
函數(shù)。
照著下面代碼修改就行。
/*************************************************
函數(shù)名:LCD_Set_Region
功能:設(shè)置lcd顯示區(qū)域,在此區(qū)域?qū)扅c(diǎn)數(shù)據(jù)自動(dòng)換行
入口參數(shù):xy起點(diǎn)和終點(diǎn)
返回值:無
*************************************************/
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ū)動(dòng)IC問題。
解決辦法也很簡(jiǎn)單的。
只要你先找到代碼里L(fēng)CD顯示屏的繪制函數(shù)。
比如:
LCD_ShowChineseFont(0,16*1+2,16,HZ_FONT_16[20],RED,0);
此函數(shù):
第一個(gè)參數(shù)是設(shè)置顯示的內(nèi)容 橫坐標(biāo)(X)的位置。
第二個(gè)參數(shù)是設(shè)置顯示的內(nèi)容 縱坐標(biāo)(Y)的位置。
第三個(gè)參數(shù)是設(shè)置顯示的內(nèi)容 字體大小。
第四個(gè)參數(shù)是設(shè)置顯示的內(nèi)容字模在數(shù)組里的下標(biāo)。
第五個(gè)參數(shù)是設(shè)置顯示的內(nèi)容字體的顏色。
第六個(gè)參數(shù)是設(shè)置顯示的內(nèi)容背景的顏色。
只要搞清楚函數(shù)每個(gè)參數(shù)的含義,自己調(diào)整一下X、Y 的位置,就可以解決問題。
【19】騰訊云IOT平臺(tái)更新了,界面與文檔不一樣怎么辦?。?/h3>
如果你的項(xiàng)目用到了微信小程序、用到了騰訊云IOT平臺(tái),但是發(fā)現(xiàn)文檔里的截圖與你現(xiàn)在登錄進(jìn)去看到的界面長(zhǎng)的不一樣,這可怎么辦?。?/p>
問題原因,2024年3月份 騰訊云更新了物聯(lián)網(wǎng)平臺(tái)的界面展示,去掉了項(xiàng)目創(chuàng)建功能,進(jìn)去就直接可以進(jìn)行產(chǎn)品開
發(fā)了省去了前面創(chuàng)建項(xiàng)目的y頁(yè)面。 但是: 這并不影響使用。
看下圖:
到了這一步,接著看文檔的產(chǎn)品開發(fā)
章節(jié)繼續(xù)就行了,大同小異。
【20】 OneNet平臺(tái)設(shè)計(jì)的可視化頁(yè)面,點(diǎn)擊按鈕無法使用怎么辦?
OneNet 在2023年4月份之后更新了平臺(tái),也就是現(xiàn)在看到的新版,物聯(lián)網(wǎng)開發(fā)平臺(tái)。
更新之后,我也寫了教程,介紹新版物聯(lián)網(wǎng)平臺(tái)的使用辦法,其實(shí)與原來的也差別不大,只是界面上改了樣式,改了流程,核心是沒變的。功能也是可以正常使用。
結(jié)果 后面OneNet內(nèi)部數(shù)據(jù)遷移,改出了BUG,新版本平臺(tái)可視化頁(yè)面的全部輸入控件都無法下發(fā)命令了。 不僅僅是按鈕,是全部,所有的 輸入類型的設(shè)備都無法發(fā)送,不管你是免費(fèi)版,還是29塊錢的企業(yè)版,還幾大千專業(yè)版 統(tǒng)統(tǒng)無法使用了。 目前只能等待OneNet工程師給點(diǎn)力,進(jìn)行修復(fù)。才可以繼續(xù)使用。
如果想繼續(xù)發(fā)送命令控制STM32,那怎么辦?
在設(shè)備后臺(tái)輸入命令發(fā)送就行了。 其實(shí)就是和在可視化頁(yè)面點(diǎn)擊按鈕一樣的。在可視化頁(yè)面點(diǎn)擊按鈕也是和這里手動(dòng)輸入命令發(fā)現(xiàn)沒區(qū)別的。就是多了一個(gè)界面。
可能就有同學(xué)問,我發(fā)送什么命令,這里我填什么?
這個(gè)很好理解的。 你是不是在可視化頁(yè)面配過按鈕下:如果你是這樣配置的: led_sw:{V} 這個(gè)就是命令格式。 {V} 需要替換成具體的值。 比如: led_sw:1 led_sw:0 發(fā)送出去。這就是命令
這里發(fā)送與你按下按鈕發(fā)送沒有區(qū)別。 這里是手動(dòng)編輯命令下發(fā)。
你點(diǎn)擊按鈕,按下開就是發(fā)送: led_sw:1 ,按下關(guān)就是發(fā)送: led_sw:0
當(dāng)前,你千萬別認(rèn)為只能發(fā)送: led_sw:1 和 led_sw:0 我只是舉例子。 你的按鈕當(dāng)初怎么配置的,就填什么命令。
【21】接電機(jī),水泵,加熱泵,充氧泵等等電機(jī)之后,整個(gè)設(shè)備就工作不正常了? 這個(gè)怎么解決?
在很多項(xiàng)目里,比如:水產(chǎn)養(yǎng)殖、智能魚缸、智能飲水機(jī)等等項(xiàng)目里,都會(huì)用到電機(jī)、加熱模塊等等。
如果你的整個(gè)項(xiàng)目設(shè)備是采用USB線供電,整個(gè)設(shè)備模塊的電源都從開發(fā)板上取電,這樣是不行。 電機(jī)一轉(zhuǎn)動(dòng),整個(gè)系統(tǒng)就會(huì)工作異常,比如: 溫度讀取不出來了,光敏讀取也是錯(cuò)誤。 特別是: 會(huì)導(dǎo)致ESP8266-WIFI斷網(wǎng),掉線,如果正在使用手機(jī)APP遠(yuǎn)程操作,微信小程序遠(yuǎn)程操作,電機(jī)一轉(zhuǎn)動(dòng),你就發(fā)現(xiàn)無法控制了。
這個(gè)要怎么解決? 如果你的實(shí)物上確實(shí)需要接電機(jī)演示。
那么需要采用外部電源供電,買一個(gè)下面的 可調(diào)電源穩(wěn)壓模塊 ,一個(gè)12V 、2A的電源插頭就可以了。 買回來之后,將模塊的電源都接在這個(gè)電源穩(wěn)壓模塊上,將STM32開發(fā)板上的5V和GND分別用杜邦線接到穩(wěn)壓模塊的5V和GND上即可。
采用外部電源供電,接好線之后的效果如下:
如果買的水泵是帶USB接口的。可以買一個(gè)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
(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
【22】電容觸摸鍵盤無法使用如何解決?
之前很多項(xiàng)目里用到了電容觸摸按鍵,原來的店鋪里觸摸按鍵升級(jí)了。原本項(xiàng)目代碼無法使用。
新版的按鍵鍵盤驅(qū)動(dòng)芯片換了,原來代碼無法兼容。
可以在這里買項(xiàng)目里一樣的之前的電容矩陣鍵盤:
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
看準(zhǔn)這里。
【23】 物聯(lián)網(wǎng)服務(wù)器的域名如果變成IP地址?
比如: 以華為云物聯(lián)網(wǎng)服務(wù)器為例。
如何得到IP地址?如何域名轉(zhuǎn)IP? 打開Windows的命令行輸入以下命令。
ping 65b0f8a974.st1.iotda-device.cn-north-4.myhuaweicloud.com
得到下面的IP地址信息: 如果設(shè)備支持填寫域名可以直接填域名,不支持就直接填寫IP地址。 (IP地址就是域名解析得到的)
華為云的MQTT服務(wù)器地址:117.78.5.125
華為云的MQTT端口號(hào):1883
【24】 華為云IOT平臺(tái)更新之后如何生成MQTT密碼?
華為云提供了一個(gè)在線工具,用來生成MQTT鑒權(quán)三元組: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
打開這個(gè)工具,填入設(shè)備的信息(也就是創(chuàng)建完設(shè)備之后保存的信息),點(diǎn)擊生成,就可以得到MQTT的登錄信息了。
這樣填:
填入設(shè)備的信息: (上面兩行就是設(shè)備創(chuàng)建完成之后保存得到的)
直接得到三元組信息。
得到三元組之后,設(shè)備端通過MQTT協(xié)議登錄鑒權(quán)的時(shí)候,填入?yún)?shù)即可。
ClientId 662a2c5971d845632a06f9fb_dev1_0_0_2024042510
Username 662a2c5971d845632a06f9fb_dev1
Password 5bcc5df45ce9e8bfe40c20408de495304a80bca79bf9e64e41f536b40723f177
【25】有人4G模塊模塊的項(xiàng)目(可能的問題)
如果你復(fù)刻的項(xiàng)目路用到了有人科技的4G模塊
。
比如:
154 基于STM32的森林火災(zāi)監(jiān)控系統(tǒng)設(shè)計(jì)
149 基于STM32設(shè)計(jì)的溫室大棚種植監(jiān)測(cè)系統(tǒng)(onenet+GPRS通信)
100 基于STM32+OneNet設(shè)計(jì)的物聯(lián)網(wǎng)智慧路燈
這些項(xiàng)目就用到了有人科技的4G
模塊。
一定要看下面圖片的說明。
看下面,將接收4G模塊里代碼部分的printf
打印刪除或者注釋掉。 簡(jiǎn)單來說,就是 將下面圖片里的全部printf
代碼行刪除或者注釋掉。
【26】樹莓派系統(tǒng)鏡像下載
鏈接:https://pan.baidu.com/s/1vYamLV9CPDbUF2wQMcbtPA?pwd=9ubq
提取碼:9ubq
–來自百度網(wǎng)盤超級(jí)會(huì)員V8的分享
自己也可以問樹莓派的商家要鏡像資料下載。
【27】RC522刷卡模塊無反應(yīng)?或者同一張卡的卡號(hào)刷出來可能不一致?
如果你的項(xiàng)目里使用的RC522模塊刷卡沒有反應(yīng)。
(1)檢查接線是否正確
(2)RC522模塊要焊接排針,焊接之后才可以使用
(3)RC522供電必須接3.3V
(4)使用的杜邦線檢查是否有松動(dòng)接觸不良的情況。
如果以上檢查了,你的刷卡模塊還是無法正確刷卡。
那么,可以修改代碼再測(cè)試下。 (防止可能不同版本的keil軟件本身的優(yōu)化機(jī)制,優(yōu)化了 __nop();)
修改之后,再下載進(jìn)去測(cè)試。
如果以上測(cè)試之后,發(fā)現(xiàn)RC522模塊還是無法正常刷卡使用?
那么可能就是模塊本身壞了??梢钥紤]更換模塊再測(cè)試。
STM32+RFID-RC522模塊刷卡效果
【28】SIM800C模塊無法上傳數(shù)據(jù)到OneNet云平臺(tái)?
之前文章里的SIM800C模塊商家的鏈接過期了。
下面這個(gè)商家的SIM800C可以使用。
鏈接:https://item.taobao.com/item.htm?abbucket=5&id=595955619423&ns=1&priceTId=2150407917166339557863879e961b&skuId=5521873678704&spm=a21n57.1.item.28.4de2523cMXukmD
本項(xiàng)目有好幾個(gè)OneNet的項(xiàng)目是采用的SIM800C模塊鏈接,通過SIM800C連接OneNet上傳數(shù)據(jù),通過HTTP協(xié)議上數(shù)據(jù)到云平臺(tái)。
因?yàn)镾IM800C是2G模塊(支持聯(lián)通和移動(dòng)的2G),隨著時(shí)代的發(fā)展,現(xiàn)在的2G基站已經(jīng)慢慢的淘汰了。 SIM800C使用起來信號(hào)就不會(huì)很好,如果你使用的SIM800C的位置距離2G的基站很遠(yuǎn),可能聯(lián)網(wǎng)的速度就很慢。
將項(xiàng)目代碼下載進(jìn)去之后,如果你接好了SIM800C,串口打印出來看到初始化也成功了,但是運(yùn)行時(shí),串口打印是發(fā)送數(shù)據(jù)失敗,OneNet無法接收數(shù)據(jù)。
那么這個(gè)問題可能是SIM800C信號(hào)比較弱,連接服務(wù)器的時(shí)間太長(zhǎng),導(dǎo)致代碼里原來的等待時(shí)間超時(shí)。
可以在以下的位置增加延時(shí)函數(shù)測(cè)試問題。
看下面的截圖: 增加延時(shí)等待網(wǎng)絡(luò)連接成功。
代碼中:
printf("連接服務(wù)器的狀態(tài):%drn",SIM800C_Connect_TCP_Server("183.230.40.33","80"));
這函數(shù)就是配置SIM800C去鏈接服務(wù)器的。 如果服務(wù)器連接成功,會(huì)返回CONNECT OK
如果上面的延時(shí)可以解決問題,為了更加方便等待SIM800C網(wǎng)絡(luò)連接成功。
可以增加一個(gè)函數(shù),用來等待CONNECT OK
返回。
注意:當(dāng)前的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++) //等待的時(shí)間(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); //一次的時(shí)間
}
return 1;
}
然后,在發(fā)送數(shù)據(jù)的函數(shù)的這個(gè)位置增加函數(shù)的調(diào)用。
printf("GPRS服務(wù)建立狀態(tài):%drn",WaitConnect_ok());
函數(shù)在連接服務(wù)器的代碼下面調(diào)用。 具體看下面圖片的標(biāo)識(shí)。 (注意:我這只是以某個(gè)項(xiàng)目為例的,你自己復(fù)刻的項(xiàng)目里如果用到了SIM800C上傳數(shù)據(jù)到OneNet,你的函數(shù)名字不一定于我截圖長(zhǎng)的一樣,但是你只需要知道,增加的這個(gè)函數(shù)的目的是: 為了等待SIM800C鏈接你附近的基站成功,并且通過基站鏈接服務(wù)器成功; 所以,將增加的這個(gè)等待放在你的sim800.c里鏈接服務(wù)器的函數(shù)下面調(diào)即可。)
或者看這個(gè)截圖。
【29】OneNet(MQTT)協(xié)議生成的密碼無法登陸?
et 時(shí)間填大一點(diǎn)。 這個(gè)軟件win11上無法生成正確的密碼。在win10上運(yùn)行,無法在win11運(yùn)行。
【30】嬰兒床的播放器模塊與喇叭接線
在嬰兒床的項(xiàng)目中,用到了音樂播放器播放安撫音樂。很多同學(xué)不知道這個(gè) 音樂播放器與繼電器,喇叭與播放器之間如何接線,這里就畫了一個(gè)圖。 其中,音樂播放器上有兩個(gè)紅色圈圈的位置,需要焊接2個(gè)針出來,就可以單獨(dú)接杜邦線了。
五、關(guān)于Qt上位機(jī)的源碼編譯問題
如果你的項(xiàng)目用到了Qt上位機(jī),一定要看下本小節(jié)的內(nèi)容。
注意!注意! 你的Qt環(huán)境必須要是QT5.12.6 ,我的版本是QT5.12.6。 一定要安裝這個(gè)版本。
QT5.12.6 的安裝包網(wǎng)盤下載地址: 也就去Qt官網(wǎng)下載。
https://pan.quark.cn/s/f40557068445
Qt上位機(jī)源碼如何打開?編譯?運(yùn)行?
【1】QT工程如何打開和使用?
(1)在你的項(xiàng)目源碼路徑下可以看到上位機(jī)源碼工程。
(2)一定要將上位機(jī)源碼目錄拷貝到你電腦上純英文路徑(別放桌面)。最好在你D盤新建一個(gè)純英文目錄,將此源碼拷貝過去。路徑中一定不能有中文。
(3)如果你源碼目錄有一個(gè)后綴是.pro.user的文件,要先刪除,再打開工程。
(4)如果你已經(jīng)安裝好了Qt環(huán)境,然后雙擊工程文件就可以打開項(xiàng)目。
【2】用到了第三方庫(kù)?比如:OpenCV、ffmpeg怎么運(yùn)行?
如果你的Qt上位機(jī)項(xiàng)目用到OpenCV、ffmpeg等等第三方庫(kù)。 打開工程之后,編譯運(yùn)行,程序會(huì)提示異常結(jié)束,無法正常運(yùn)行。怎么辦?
這個(gè)是因?yàn)?,你Qt程序運(yùn)行之后無法找到你的第三庫(kù)的DLL文件,就無法正常運(yùn)行。
最簡(jiǎn)單的操作,你將我的資料包《可執(zhí)行程序》目錄里全部文件(除了應(yīng)用程序EXE文件可以不拷貝),拷貝到 你自己Qt編譯生成的exe應(yīng)用程序路徑下即可。
如果你找不到你的工程生成的EXE文件在哪里? 你Qt工程編譯成功之后,在下面都會(huì)有提示的。
看下面的截圖。
【3】你自己 編譯的Qt程序,獲取Token失敗怎么辦? (華為云IOT項(xiàng)目的上位機(jī))
首先你觀察,你的Qt控制臺(tái)輸出的信息是不是提示一堆SSL相關(guān)的警告?
如果是,就是說明: 你的Qt環(huán)境缺少了SSL協(xié)議,也就是openSSL的庫(kù)。 導(dǎo)致Qt無法使用https的API鏈接。故而無法正常獲取token,也無法正常使用其他功能。
如何解決?
最簡(jiǎn)單的操作,從這里下載需要的SSL庫(kù)文件。 https://download.csdn.net/download/xiaolong1126626497/89309957
將這2個(gè)文件拷貝到你程序編譯后生成的 應(yīng)用程序 相同目錄下即可,重新在Qt軟件里編譯運(yùn)行,測(cè)試即可。
或者 你打開我的資料包里《windows可執(zhí)行程序》目錄里找到這兩個(gè)庫(kù),拷貝到 你自己Qt編譯生成的exe應(yīng)用程序路徑下,重新在Qt軟件里編譯運(yùn)行,測(cè)試即可。
如果你找不到你的工程生成的EXE文件在哪里? 你Qt工程編譯成功之后,在下面都會(huì)有提示的。
看下面的截圖。
【4】如何搭建Qt的Android環(huán)境?
Qt可以編譯Android的APP,但是編譯Android的APP需要自己搭建Android環(huán)境。
我提供了搭建環(huán)境的教程。在我的博客里,不過要花費(fèi)29.9訂閱Qt的技術(shù)文章專欄才可以看。這個(gè)文章在Qt的技術(shù)文章專欄里。 你也可以百度搜索教程自己搭建。
付費(fèi)教程鏈接:https://blog.csdn.net/xiaolong1126626497/article/details/117254453
【5】Qt上位機(jī)的源碼修改問題? 華為云IOT上位機(jī)項(xiàng)目
如果使用的是華為云的IOT項(xiàng)目,想要自己修改上位機(jī)的源碼,改成自己的設(shè)備那么看下面圖片說明。
工程樣式:1:
工程樣式:2:
但是注意了,如果你的項(xiàng)目工程用的華為云IOT平臺(tái)是基礎(chǔ)版(現(xiàn)在新用戶沒有基礎(chǔ)版,都是標(biāo)準(zhǔn)版的)
如果你要改成標(biāo)準(zhǔn)版使用,要修改的地方就多一些。
看下圖。
這個(gè)鏈接要改成自己設(shè)備的。這個(gè)鏈接如何獲取? 你在看文檔的時(shí)候應(yīng)該看到我講解了在線調(diào)試設(shè)備,在線修改設(shè)備屬性。在調(diào)試頁(yè)面右上角調(diào)試成功,就會(huì)有一個(gè)鏈接,貼過來替換下面的的鏈接即可。
這個(gè)鏈接要改成自己設(shè)備的。這個(gè)鏈接如何獲??? 你在看文檔的時(shí)候應(yīng)該看到我講解了在線調(diào)試設(shè)備,在線獲取影子數(shù)據(jù)。在調(diào)試頁(yè)面右上角調(diào)試成功,就會(huì)有一個(gè)鏈接,貼過來替換下面的的鏈接即可。
這個(gè)鏈接就是在這里獲?。聪聢D)。
還有一點(diǎn)要注意: 華為云基礎(chǔ)版 和標(biāo)準(zhǔn)版 修改設(shè)備屬性時(shí),下發(fā)的屬性格式不一樣。
標(biāo)準(zhǔn)版的格式是這樣的: 就是下發(fā)的命令屬性的JSON格式。 如果你原來是基礎(chǔ)版,要換標(biāo)準(zhǔn)版,修改Qt上位機(jī)的時(shí)候要注意這個(gè)問題,不然無法下發(fā),會(huì)報(bào)錯(cuò)。
{"services":{"motor":1}}
也可以看視頻:
介紹STM32物聯(lián)網(wǎng)項(xiàng)目工程移植需要修改的地方
我這里再重新敘述一遍: (這里是以 105 基于STM32設(shè)計(jì)的汽車修理廠環(huán)境檢測(cè)系統(tǒng)為例,介紹QT上位機(jī)源碼如何修改 ) 這個(gè)項(xiàng)目就是基礎(chǔ)版的華為云設(shè)計(jì)的,而現(xiàn)在的新建的華為云是默認(rèn)為標(biāo)準(zhǔn)版,怎么改? 看下面截圖。
這是設(shè)備的賬號(hào)信息
。 根據(jù)自己的實(shí)際情況替換。
這是查詢?cè)O(shè)備屬性
。 也就是獲取影子數(shù)據(jù)的API接口。
這是修改設(shè)備屬性
。 也就是給設(shè)備下發(fā)控制命令的API接口。
就完成了。
六、 關(guān)于上位機(jī)源碼問題
如果是從我的微信公眾號(hào)里下載的項(xiàng)目資料包,這里不用看,直接忽略。
如果項(xiàng)目用的是OneNet云平臺(tái)、阿里云云平臺(tái)、騰訊云微信小程序,這里也不用看,直接忽略。
我做的STM32項(xiàng)目里,有很多涉及到需要自己開發(fā)上位機(jī)APP,也就是手機(jī)APP 的項(xiàng)目,部分項(xiàng)目源碼在CSDN上,STM32源碼和上位機(jī)源碼是分開的,是兩個(gè)資源包。如果不修上位機(jī)源碼,不自定義更改,就不需要單獨(dú)去下載上位機(jī)的源碼。 在設(shè)計(jì)文檔里的上位機(jī)設(shè)計(jì)章節(jié),已經(jīng)詳細(xì)講解如何設(shè)計(jì)上位機(jī),設(shè)計(jì)過程,拿去寫文檔,貼圖,都完全夠了。 這就是復(fù)刻項(xiàng)目的最簡(jiǎn)單,最容易的步驟。
如果確實(shí)需要修改或增加上位機(jī)的功能,要修改Qt源碼,可以參考文檔自己設(shè)計(jì),也可以去單獨(dú)下載。
下面是CSDN博客里部分,獨(dú)立的上位機(jī)源碼下載鏈接,根據(jù)自己的項(xiàng)目找到對(duì)應(yīng)的上位機(jī)即可,如果找不到也可以私信問我。
【1】基于樹莓派+華為云設(shè)計(jì)的智能家居系統(tǒng)-Qt上位機(jī)源碼.zip
https://download.csdn.net/download/xiaolong1126626497/88798014
【2】基于STM32+華為云設(shè)計(jì)的智慧農(nóng)業(yè)灌溉系統(tǒng)【華為云IOT】-Qt上位機(jī)源碼.zip
https://download.csdn.net/download/xiaolong1126626497/88561390
【3】基于STM32+華為云設(shè)計(jì)的智慧農(nóng)業(yè)灌溉系統(tǒng)(升級(jí)版)項(xiàng)目的Qt上位機(jī)源碼.zip
https://download.csdn.net/download/xiaolong1126626497/88561385
【4】基于STM32設(shè)計(jì)的智能嬰兒床控制系統(tǒng)-Qt上位機(jī)源碼.zip
https://download.csdn.net/download/xiaolong1126626497/88842288
【5】基于STM32+華為云設(shè)計(jì)的智能魚缸-Qt上位機(jī)源碼.zip
https://download.csdn.net/download/xiaolong1126626497/88539687
【6】基于STM32設(shè)計(jì)的智能教室管理系統(tǒng)-Qt上位機(jī)源碼(智慧大屏).zip
https://download.csdn.net/download/xiaolong1126626497/88541655
【7】114 基于STM32的熏艾式空氣消毒裝置設(shè)計(jì)與實(shí)現(xiàn)【Qt上位機(jī)源碼】.zip
https://download.csdn.net/download/xiaolong1126626497/90035427
【8】基于STM32設(shè)計(jì)的人體健康監(jiān)護(hù)系統(tǒng)(Qt上位機(jī)源碼包)
https://download.csdn.net/download/xiaolong1126626497/88462877
【9】基于STM32的智能花盆系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)(Qt上位機(jī)源碼包)
https://download.csdn.net/download/xiaolong1126626497/88439627
【10】 基于STM32設(shè)計(jì)的小龍蝦養(yǎng)殖系統(tǒng)【Qt上位機(jī)源碼】
https://download.csdn.net/download/xiaolong1126626497/88917639
【11】106 基于STM32設(shè)計(jì)的城市綠化云端監(jiān)控系統(tǒng)【Qt上位機(jī)源碼】
https://download.csdn.net/download/xiaolong1126626497/88921525
【12】132 基于STM32設(shè)計(jì)的口罩識(shí)別和無線測(cè)溫系統(tǒng)【Qt上位機(jī)源碼】
https://download.csdn.net/download/xiaolong1126626497/88968240
【13】123 基于物聯(lián)網(wǎng)的智能澆水系統(tǒng)(STM32+華為云IOT)-上位機(jī)源碼.zip
https://download.csdn.net/download/xiaolong1126626497/89165977
【14】105 基于STM32的汽車修理廠環(huán)境監(jiān)測(cè)-Qt上位機(jī)源碼.7z
https://download.csdn.net/download/xiaolong1126626497/89221595
【15】基于STM32+華為云IOT設(shè)計(jì)的智能澆花系統(tǒng)-序號(hào)112.zip
https://download.csdn.net/download/xiaolong1126626497/87853772
七、OneNet替換騰訊云IOT平臺(tái)
7.1 前言
從2024年06月20日起, 新注冊(cè)騰訊云物聯(lián)網(wǎng)開發(fā)平臺(tái)的用戶需購(gòu)買公共實(shí)例激活碼才可使用公共實(shí)例,在此時(shí)間之前注冊(cè)的用戶并已開通公共實(shí)例的用戶則不受影響。
目前大部分主流平臺(tái)都已經(jīng)進(jìn)入收費(fèi)階段,只有華為云目前完全免費(fèi),OneNet免費(fèi)(可視化界面設(shè)計(jì)部分功能收費(fèi),29一個(gè)月)。 騰訊云、阿里云都已經(jīng)進(jìn)入了收費(fèi)模式。
下面是官網(wǎng)的公告。
現(xiàn)在登錄騰訊云物聯(lián)網(wǎng)開發(fā)平臺(tái)
已經(jīng)沒有免費(fèi)的公共實(shí)例可以使用,需要購(gòu)買激活碼才可繼續(xù)使用。
7.2 OneNet替換騰訊云IOT
之前做的很多項(xiàng)目是基于騰訊云物聯(lián)網(wǎng)開發(fā)平臺(tái)
設(shè)計(jì)的,如果購(gòu)買的基于騰訊云物聯(lián)網(wǎng)開發(fā)平臺(tái)
設(shè)計(jì)的項(xiàng)目源碼,因?yàn)?code>騰訊云物聯(lián)網(wǎng)開發(fā)平臺(tái)更新的問題無法再繼續(xù)使用免費(fèi)的公共實(shí)例,需要購(gòu)買才可以使用;如果不想花錢購(gòu)買騰訊云的物聯(lián)網(wǎng)平臺(tái),可以采用中國(guó)移動(dòng)的OneNet物聯(lián)網(wǎng)開發(fā)平臺(tái)
替換。
因?yàn)轵v訊云物聯(lián)網(wǎng)平臺(tái)替換為OneNet平臺(tái)最簡(jiǎn)單。 而且OneNet平臺(tái)設(shè)計(jì)的界面比微信小程序更加漂亮。
目前中國(guó)移動(dòng)的OneNet物聯(lián)網(wǎng)開發(fā)平臺(tái)
還是可以繼續(xù)免費(fèi)使用。
對(duì)于【OneNet】平臺(tái)不了解的同學(xué),要認(rèn)真看一下這個(gè)視頻,是一個(gè)手把手的保姆級(jí)教學(xué)視頻,教導(dǎo)OneNet如何使用。不懂的地方也可以隨時(shí)問我。
關(guān)于中國(guó)移動(dòng)的OneNet物聯(lián)網(wǎng)開發(fā)平臺(tái)
的使用可以看視頻教程:https://www.bilibili.com/video/BV12m421u7A5
也可以看文檔(如果訂閱了CSDN的物聯(lián)網(wǎng)專欄 或者 微信公眾號(hào)里的物聯(lián)網(wǎng)項(xiàng)目合集),分享的項(xiàng)目里有很多采用OneNet做的項(xiàng)目,也可以通過這些項(xiàng)目文章了解中國(guó)移動(dòng)的OneNet物聯(lián)網(wǎng)開發(fā)平臺(tái)
的使用辦法。
那么很多同學(xué)可能會(huì)問: 我現(xiàn)在的項(xiàng)目是采用騰訊云物聯(lián)網(wǎng)開發(fā)平臺(tái)
做的,如果我換成中國(guó)移動(dòng)的OneNet物聯(lián)網(wǎng)開發(fā)平臺(tái)
,整個(gè)項(xiàng)目改動(dòng)的地方多嗎? 如果沒有基礎(chǔ)第一次復(fù)刻開發(fā)項(xiàng)目能不能自己替換修改?
答案: 修改的地方不多,可以自己替換完成修改。
為什么說,修改的地方不多?
比: 我們做的物聯(lián)網(wǎng)項(xiàng)目可能是:基于STM32+XXX物聯(lián)網(wǎng)平臺(tái)設(shè)計(jì)的XXX項(xiàng)目。
這些項(xiàng)目里面的STM32硬件端
與XXX物聯(lián)網(wǎng)平臺(tái)
通信都是采用的MQTT協(xié)議。(可能很多同學(xué)暫時(shí)還不懂什么是MQTT協(xié)議,但是這不重要)
我們使用的騰訊云IOT物聯(lián)網(wǎng)平臺(tái)
、中國(guó)移動(dòng)OneNet物聯(lián)網(wǎng)平臺(tái)
、華為云物聯(lián)網(wǎng)平臺(tái)
、阿里云物聯(lián)網(wǎng)平臺(tái)
等等,這些物聯(lián)網(wǎng)平臺(tái)都是一個(gè)服務(wù)器,準(zhǔn)確說是MQTT物聯(lián)網(wǎng)服務(wù)器,都是支持MQTT協(xié)議接入。
我們的項(xiàng)目可以接入騰訊云物聯(lián)網(wǎng)平臺(tái),也是采用的MQTT協(xié)議接入。 如果想替換成其他的云,代碼改動(dòng)的地方多嗎? 并不多的,因?yàn)槠渌脚_(tái)也是支持MQTT協(xié)議接入。 這就是標(biāo)準(zhǔn)協(xié)議的好處。 替換物聯(lián)網(wǎng)平臺(tái),代碼改動(dòng)的地方很少(下面會(huì)單獨(dú)說明)。
7.3 修改說明:STM32代碼
7.3.1 OneNet如何得到MQTT三元組?
關(guān)于OneNet的使用,可以看這篇文章學(xué)習(xí)(免費(fèi)的)。
https://blog.csdn.net/xiaolong1126626497/article/details/144806792
7.3.2 替換MQTT三元組(常規(guī)操作)
需要修改的地方: MQTT三元組。 (這個(gè)是替換你自己物聯(lián)網(wǎng)服務(wù)器的MQTT信息)
在你的項(xiàng)目代碼里,main.c最前面可以看到關(guān)于物聯(lián)網(wǎng)服務(wù)器的信息定義,具體看下圖。 將此處的信息替換成你自己MQTT服務(wù)器的信息就可以了。
7.3.3 修改上傳的數(shù)據(jù)格式。
每個(gè)項(xiàng)目里在main.c文件里main函數(shù)中的while(1)循環(huán)里面都可以看到下面截圖類似的代碼。 這個(gè)就是組合將要上傳的數(shù)據(jù),準(zhǔn)備下一步上傳到物聯(lián)網(wǎng)開發(fā)平臺(tái)。
每個(gè)物聯(lián)網(wǎng)開發(fā)平臺(tái)的數(shù)據(jù)格式都不一樣,OneNet有自己格式,騰訊云也有自己的格式,大同小異。
注意: 上面截圖里的代碼,只是一個(gè)很普通的字符串拼接,大家不要看的太神秘,很高級(jí)。 只要你懂得C語(yǔ)言的字符串,慢慢看一下就知道這份代碼的含義。
我舉個(gè)例子【1】: 【192 獨(dú)居老人居家監(jiān)護(hù)系統(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);
我舉個(gè)例子【2】: 【227 基于單片機(jī)的人體健康監(jiān)測(cè)設(shè)計(jì)】
這是騰訊云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);
我舉個(gè)例子【3】: 【187 基于STM32設(shè)計(jì)的物聯(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);
我舉個(gè)例子【4】: 【236 基于STM32+4G通信技術(shù)設(shè)計(jì)遠(yuǎn)程農(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);
我舉個(gè)例子【5】: 【163 基于STM32+微信小程序設(shè)計(jì)的智能門鎖】
這是騰訊云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");
我舉個(gè)例子【6】: 【175 基于STM32設(shè)計(jì)的牛羊喂養(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);
我舉個(gè)例子【7】: 【171 基于STM32+微信小程序設(shè)計(jì)的智能寵物喂養(yǎng)系統(tǒng)_標(biāo)準(zhǔn)版】
這是騰訊云IOT需要的數(shù)據(jù)格式。
//上報(bào)數(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);
其他的平臺(tái)就按自己平臺(tái)規(guī)定的格式上傳數(shù)據(jù)即可。
不要被一大串?dāng)?shù)據(jù)迷惑了,這就是一個(gè)字符串拼接
,里面的這種是轉(zhuǎn)義符。
STM32代碼端,只需要改這2個(gè)地方,其他依舊如原本項(xiàng)目一樣使用即可,具體使用可以看原本項(xiàng)目對(duì)應(yīng)的視頻。
7.4 修改說明:服務(wù)器配置(手把手教程)
如果你的項(xiàng)目原本是騰訊云IOT平臺(tái),現(xiàn)在想替換成OneNet平臺(tái),那么應(yīng)該如何去創(chuàng)建實(shí)現(xiàn)?
基本上這些物聯(lián)網(wǎng)平臺(tái)使用都有5個(gè)步驟:
(1)創(chuàng)建產(chǎn)品
(2)創(chuàng)建數(shù)據(jù)流(有些平臺(tái)叫創(chuàng)建屬性、或者 物模型 這些都只是一個(gè)名字)
(3)創(chuàng)建設(shè)備
(4)得到MQTT三元組
(5)得到訂閱主題格式、發(fā)布主題格式,發(fā)布的數(shù)據(jù)組合格式
主要關(guān)注的是 (2)創(chuàng)建數(shù)據(jù)流物模型
的名字。
如果你的項(xiàng)目是騰訊云IOT平臺(tái),你在你項(xiàng)目文檔里可以看到原本項(xiàng)目開發(fā)的時(shí)候創(chuàng)建了物模型
也就是填寫了每個(gè)物模型的名字。
如果你現(xiàn)在采用onenet替換實(shí)現(xiàn)原本的項(xiàng)目,你在onenet創(chuàng)建的時(shí)候也會(huì)有一個(gè)步驟是創(chuàng)建數(shù)據(jù)流
,你只需要照著原來文檔里的騰訊云創(chuàng)建物模型的名字挨個(gè)去創(chuàng)建你onenet的數(shù)據(jù)流就行了。創(chuàng)建完就完成。
其他的步驟,具體可以直接看 OneNet的視頻: https://www.bilibili.com/video/BV12m421u7A5
7.5 OneNet生成密碼
很多同學(xué)反饋,使用OneNet提供的token.exe
生成密碼,不正常,無法登陸,導(dǎo)致斷開連接。
此軟件win11運(yùn)行生成的密碼可能不正確 或者 你自己填寫的超時(shí)時(shí)間不對(duì) 。導(dǎo)致無法登陸。
為此,我提供了一份Python代碼,實(shí)現(xiàn)此密碼生成的算法。
建議大家,用我提供的代碼,使用Python生成密碼。解決此問題。
還不用考慮過期時(shí)間問題。非常的方便。你只需要安裝好Python環(huán)境就可以了。
完整的代碼如下。`
import base64
import hmac
from urllib.parse import quote
import time
# 中國(guó)移動(dòng)官方文檔給出的核心秘鑰計(jì)算算法
def token(id,access_key):
version = '2018-10-31'
res = 'products/%s' % id # 通過產(chǎn)品ID訪問產(chǎn)品API
# 用戶自定義token過期時(shí)間
et = str(int(time.time()) + 63072000) # 設(shè)置為2年有效時(shí)間
# 簽名方法,支持md5、sha1、sha256
method = 'sha1'
# 對(duì)access_key進(jìn)行decode
key = base64.b64decode(access_key)
# 計(jì)算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 部分進(jìn)行url編碼,method/res/version值較為簡(jiǎn)單無需編碼
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)
八、源碼、文檔下載
我的微信公眾號(hào)名稱: 《DS小龍哥嵌入式技術(shù)資訊》 打開微信搜索一下,就可以找到我的微信公眾號(hào)。在我的CSDN文章最底下,最底下,也有我的微信公眾號(hào)的推廣,點(diǎn)開就可以關(guān)注。
在微信公眾號(hào)里可以付費(fèi)下載很多項(xiàng)目的源碼??梢曰貜?fù)關(guān)鍵字或者項(xiàng)目的序號(hào)都可以了解到項(xiàng)目的源碼。