閱讀本文大概需要 6.6 分鐘
大家好,我是 devstone,很感謝大家對這個項目的喜愛和關(guān)心,自從該項目公開以來斷斷續(xù)續(xù)有很多人加我好友詢問一些基礎(chǔ)問題,我也回復過很多,當然了以后也可能會有人問到,為了不再重復回復,我今天專門寫一篇文章,詳細介紹下如何使用
本來早就該寫了,一是因為自己平時忙,二是因為太懶惰,一直拖到現(xiàn)在
01 項目介紹
該項目的原型是自己當初的本科畢業(yè)設(shè)計,從零開始做的,其中包括硬件原理圖、PCB,到后面元器件的焊接、下位機程序編寫,上位機程序編寫,ZigBee 無線通訊程序編寫,各個模塊聯(lián)調(diào)測試修改問題
項目其實很簡單,下位機采集各種傳感器數(shù)據(jù),這些數(shù)據(jù)采集后會進行匯總打包,然后通過串口發(fā)送給 ZigBee 終端節(jié)點,終端節(jié)點會發(fā)送給「協(xié)調(diào)器」,協(xié)調(diào)器收到后通過串口發(fā)送給上位機,上位機收到數(shù)據(jù)進行校驗、解包然后根據(jù)不同類型數(shù)據(jù)分發(fā)到各個頁面進行顯示
上位機平臺采用的是 ARM 開發(fā)板,說白了就是一個性能好點的帶屏幕的單片機,支持觸摸交互,上位機程序采用 C/C++/Qt 編寫
下面就是整個小項目交互關(guān)系圖
監(jiān)控是雙向的,數(shù)據(jù)從傳感器發(fā)送到上位機,同時上位機也可以通過控制按鈕下發(fā)對應(yīng)的指令進行控制,比如控制 LED 燈的亮滅,控制傳感器閾值,比如室內(nèi)舒適溫度為 22°,當傳感器采集到的問題超過這個值時,觸發(fā)警報,進行提示
下面是上位機程序部分界面部分截圖
截圖日期還是當時演示時截取的,現(xiàn)在想想好多年了,想起當時整個制作過程還是懷念的
看到這里可能很多人比較迷惑了,為啥會用到這么多 ZigBee節(jié)點和 STM32 啊,完全使用 ZigBee 就足夠了,確實是這樣的,因為采集傳感器數(shù)據(jù)工作量不大使用 CC2530 就夠用了,當時自己這樣做是為了把學到的知識都用起來
詳細說明下面會分為好幾個部分進行介紹
02 上位機介紹
為了照顧到新人,我還是簡單說下什么是上位機吧
上位機:就是可以發(fā)出控制控制命令的計算機。用大白話說就是運行在某個平臺上(Windows,Linux,macOS等)的一個軟件,你通過這個軟件可以進行一些列的操作
當初的設(shè)計,上位機是運行在 ARM 平臺上的,也就是一塊板子上,你可以理解為一個平板電腦
那么有人就要問了,可以運行在其它平臺嗎?當然可以,你可以編譯完直接運行在 windows、Linux 或者 macOS 上。目前代碼中沒有做任何限制
現(xiàn)在都明白了吧,我相信看了我上面的幾幅賣相不好的圖片大家應(yīng)該能大概知道上位機這回事吧
如果你下載我的上位機代碼后編譯發(fā)現(xiàn)出現(xiàn)錯誤,歡迎留言,我再補充哈。正常情況下現(xiàn)在應(yīng)該能正常編譯和運行,不會有錯誤的
03 下位機介紹
明白了上位機,那么理解「下位機」應(yīng)該容易很多。
下位機就是控制設(shè)備狀態(tài)的一種計算機,說白話可以理解為你寫程序控制單片機進行一些列的操作,比如點亮 LED 等,這些一些列的程序代碼可以理解為下位機程序
下位機采用 STM32F103 VBT66 單片機,這是一個ARM? Cortex?-M3版本,ROM 僅有 128KB大小,控制程序全部跑在這塊單片機上
記得當時為了裝B,還移植了一款微型操作系統(tǒng)UCOSII (Micro-Controller Operating Systems),這是一款實時操作系統(tǒng),完全采用 C 語言編寫,基于搶占式優(yōu)先級策略的一種多任務(wù)系統(tǒng),也就意味著我們可以同時運行多個任務(wù)
移植完這款操作系統(tǒng)后,剩下程序編寫就變的非常簡單了,多個傳感器采集數(shù)據(jù)工作可以當做不同的任務(wù)去做,具體如何輪訓你用你操心了
STM32 在這里起到數(shù)據(jù)采集+打包中轉(zhuǎn)的作用,某些傳感器數(shù)據(jù)采集完通過打包流程封裝成一包數(shù)據(jù)發(fā)送給串口,串口的另一端連接的是 ZigBee 終端,終端接收到數(shù)據(jù)后會通過 ZigBee 無線通信協(xié)議發(fā)送給 ZigBee 協(xié)調(diào)器
ZigBee 協(xié)調(diào)器另一端連接的是「上位機」,這樣上位機就可以收到數(shù)據(jù)了
04 ZigBee 無線通訊介紹
ZigBee 是一種短距離無線通信協(xié)議,底層采用的是IEEE 802.15.4標準。主要特點有:低功耗、低成本、低速率、支持大量節(jié)點收發(fā)數(shù)據(jù)
通信的硬件采用的是 CC2530芯片,無線通訊大概可以分為三種:節(jié)點、路由器、協(xié)調(diào)器
其實在這個項目里面,我做了偷懶,并沒有嚴格按照上述模式設(shè)計,在我的這個項目里面,ZigBee 只是起到到數(shù)據(jù)傳輸?shù)淖饔茫床杉降臄?shù)據(jù)由「終端節(jié)點」發(fā)送給「協(xié)調(diào)器」,在實際應(yīng)用中不會這么大材小用的,一般協(xié)調(diào)器不光負責數(shù)據(jù)傳輸,也可以承擔一部分的數(shù)據(jù)采集管理工作
ZigBee 相關(guān)代碼介紹
在我開源分享的代碼當中,zigbee無線傳輸部分是所有 ZigBee 通訊的代碼,包含了終端節(jié)點和協(xié)調(diào)器,注意在下載程序時進行區(qū)分就行了
至于如何下載如何調(diào)試,還請自行百度
05 硬件 PCB 電路介紹
相信大家都看過了板子的外觀了,很簡陋,也沒有任何美感,純粹是為了完成功能的設(shè)計
學習過硬件設(shè)計的朋友這里不用看了,因為太基礎(chǔ)了。如果你對這方面感興趣,那么需要你系統(tǒng)的學習下基礎(chǔ)的知識,學起來也挺快的,就跟搭積木一樣
一塊電路板是 怎么來的呢?
首先需要你自己使用軟件繪制原理圖,需要知道了解一些基礎(chǔ)的電路知識,不過現(xiàn)在現(xiàn)成的東西也很多,網(wǎng)上看看也能抄過來用
其次,根據(jù)原理圖生成 PCB,這一步很重要,生成后就需要自己去布線或者叫連線了,這一步比較繁瑣和重要,很多初學者會偷懶選擇自動布線,墻裂建議不要這樣做,還是老老實實選擇手動布線吧
什么是布線呢?大白話說就是把各個元器件的管腳使用特定的線連接起來,你原理圖中繪制的某個元器件怎么和外部連接的,這里就需要重新用線進行連接,連接的原則是保持每條線間隔均勻、不重合、不繞路等
最后,畫好了 PCB 后就可以導出這個 PCB 打包然后發(fā)送給廠商進行「打樣」,現(xiàn)在越來越便宜了,直接在在某寶上搜評價好點的商家就可以了,還需要注意的是和賣家溝通清楚,自己要打樣的板子要求,比如過孔覆油是否,油墨顏色,過孔大小等
一般一個禮拜左右就可以打樣完成,剩下的時間就是自己買元器件進行焊接,這一步也很累很辛苦,注意別買錯了,要和你當時畫原理圖時候的大小一致,比如 0603、0204 封裝……
最最后就是測試電路板是否有問題,其實在開始焊接的時候,可以先焊接部分電路進行測試,沒有問題再焊接完剩下的
總結(jié)
上面就是關(guān)于這個項目的幾大部分內(nèi)容說明,詳細知識大家看我之前的博客和開源的代碼資料就行了。
整體思路就是單片機采集傳感器數(shù)據(jù),然后通過無線通信發(fā)送給上位機進行顯示,同時上位機還可以進行控制下位機中的硬件設(shè)施,比如點亮 LED燈,當然了這里用 LED 燈模擬顯示環(huán)境中真正的燈光,如果要用在實際環(huán)境中,還需要對應(yīng)的驅(qū)動電路才行
如果看到這里還有疑問,那就再繼續(xù)交流吧,我完了把大家的疑惑都整理下發(fā)表出來,方便更多的初學者學習理解
如果這個小項目能夠幫助到你,麻煩點個贊、在看,也算是對我的一種支持吧
關(guān)于如何學習
最后再給初學者一些個人建議吧,關(guān)于如何學習
大家有沒有發(fā)現(xiàn),初入社會后學習能力是多么的重要。可能你以前上學那會沒有留意,平時上課學習都是老師帶領(lǐng)你們學習,自己只要跟著老師的步伐即可
但是,等畢業(yè)工作后發(fā)現(xiàn)沒有人帶、教自己,全部都得自己去學習、研究、鉆研,很多東西學不會、理解不了。
作為一個技術(shù)人,其實是很殘酷的,技術(shù)變化太快,如果你停止學習可能短期內(nèi)沒有啥變化,但是隨著時間越長越能感覺到自己和別人的差距,這種差距不僅體現(xiàn)在能力上,最直接體現(xiàn)在工資待遇上,你說你學不學?
- 學會使用搜索引擎
我們平時遇到的各種問題,99% 以上網(wǎng)絡(luò)上面都有,所以如何正確搜索很關(guān)鍵。墻裂建議大家有條件一定要使用 Google 搜索,不要使用百度搜索
- 多分享總結(jié)
我們要相信一句話「利他就是利己」,多分享多付出,前期我們給別人創(chuàng)造價值,可能自己得不到回報或者很少,但是從長遠來看,這些付出會成倍的回報給自己
- 學會提問
提問是一門藝術(shù),很多人其實都沒有注意。很多大佬都很忙,我們請教問題盡可能的一步到位描述清楚自己的問題,比如可以按照下面的模板來進行
我想做 xx 功能,遇到了 xxx 問題,我是這樣想的……,自己嘗試了 xxx 步驟后還是沒有解決,您抽時間能幫忙看下嗎
閑聊
當時機緣巧合下分享的這個小項目,沒有想到受到很多朋友的喜歡,能夠幫助到大家我很高興。其實很多人會問一些很基礎(chǔ)的問題,作為過來人我知道剛?cè)腴T確實會有很多疑問,很多問號,只要我有時間,都一一進行了回復
下面順手截取了部分朋友的反饋
最后,如果大家有問題,可以留言,有任何問題可以隨時向我提問,但是,但是,但是,盡量一次性把問題描述清楚,不要問在不在?我可以問你問題嗎?你忙嗎?等等之類的問題,有問題直接問,對就是這么直接
自己平時工作也挺忙的,消息可能不會及時回復,但是我忙完一定第一時間回復你