智慧家居助手是“平頭哥RVB2601開源應(yīng)用創(chuàng)意征集”活動中的一等獎獲獎作品,由開發(fā)者碼農(nóng)愛學(xué)習(xí)開發(fā),主要是為了實現(xiàn)家庭智能設(shè)備的控制。在完成全部的功能開發(fā)后,碼農(nóng)愛學(xué)習(xí)也分享了他在本次活動中的體驗與感想。
“從3個月前拿到板子,逐步熟悉CDK環(huán)境的開發(fā)與RISC-V的開發(fā)體驗,在使用過程中,不斷分享使用筆記,并學(xué)習(xí)其它網(wǎng)友積極分享的筆記,最后將所有使用過的功能,整合為一個綜合的小項目,就實現(xiàn)了這個智慧家居助手?!?/p>
接下來,讓我們一起來拆解智慧家居助手的內(nèi)部功能與結(jié)構(gòu)吧。
01項目背景
當今時代,已進入萬物互聯(lián)的時代,各種嵌入式硬件產(chǎn)品,通過網(wǎng)絡(luò)連接互聯(lián)網(wǎng),實現(xiàn)萬物互聯(lián)。對于我們的家庭生活來說,能夠有一款服務(wù)于家庭的智能控制設(shè)備,實現(xiàn)諸如這些功能:家中的各種生活電器,通過連接網(wǎng)絡(luò),可以進行更方便的遠程控制;家中的溫度、濕度、空氣質(zhì)量等環(huán)境指標,通過連網(wǎng),也可以方便地為我們展示;最近的天氣情況,在出門前方便的為我們提醒;家中休息時,營造娛樂的氛圍……
02作品簡介
基于上述的設(shè)想,本項目嘗試使用平頭哥的RVB2601開發(fā)板,設(shè)計一款智能家居助手,從而使我們更好的享用家中生活。
本項目利用RVB2601的WiFi功能,通過連接互聯(lián)網(wǎng)可以獲取近期天氣信息,在板載屏幕上顯示,提示我們天氣變化;利用RTC功能,顯示當前的網(wǎng)絡(luò)時間;外接溫、濕度傳感器,可以為我們展示室內(nèi)真實的溫濕度;通過WiFi與其它電器的控制器通信,這里使用ESP8266作為被控節(jié)點,實現(xiàn)對其它電器的無線開關(guān)控制;利用板子自帶的喇叭和連網(wǎng)功能,可以播放網(wǎng)絡(luò)音樂和視頻用來進行娛樂;使用OTA功能,還可以不斷對功能進行迭代更新,實現(xiàn)軟件功能的空中升級。
本項目最終實現(xiàn)的實物照片如下,通過ESP8266板載的一個LED和外接的LED模擬家中的兩個不同的燈,外接的小風(fēng)扇模擬家中的風(fēng)扇:
03系統(tǒng)框圖
本項目的整體硬件結(jié)構(gòu)如下:主體為RVB2601主控制器,通過路由器與家中其它電器進行無線連接,實現(xiàn)家中電器的開關(guān)控制,并可通過連接互聯(lián)網(wǎng),實現(xiàn)互聯(lián)網(wǎng)信息(網(wǎng)絡(luò)天氣、網(wǎng)絡(luò)時間、網(wǎng)絡(luò)音樂的獲?。?。
為了實現(xiàn)各個功能的選擇調(diào)用,本項目利用多級菜單的結(jié)構(gòu),實現(xiàn)各個功能間的跳轉(zhuǎn),具體的結(jié)構(gòu)如下:
關(guān)于多級菜單的具體實現(xiàn)細節(jié),在下面的“各部分功能說明和解析”中將詳細介紹。
軟件部分,本項目使用平頭哥的CDK集成開發(fā)環(huán)境進行代碼編寫與調(diào)試,使用YoC軟件平臺框架以及AOS API實現(xiàn)程序設(shè)計:
使用任務(wù)創(chuàng)建功能,實現(xiàn)各個模塊功能的獨立設(shè)計與維護;
使用信號量機制,實現(xiàn)不同任務(wù)間的信息同步;
使用消息隊列,實現(xiàn)不同任務(wù)間的消息傳遞;
使用訂閱發(fā)布機制,實現(xiàn)任務(wù)間的解耦;
使用RTC功能,實現(xiàn)時間的獲取;
使用SPI功能,實現(xiàn)屏幕的驅(qū)動與顯示;
使用日志組件,實現(xiàn)代碼的調(diào)試與信息輸出;
04各部分功能說明和解析
4.1 城市天氣顯示
RVB2601具有連網(wǎng)功能,可以連接互聯(lián)網(wǎng)來實現(xiàn)對網(wǎng)絡(luò)天氣信息的獲取。
這里使用高德平臺的天氣獲取接口,通過http協(xié)議獲取指定城市的天氣數(shù)據(jù)。原始數(shù)據(jù)是json格式的,需要從json數(shù)據(jù)中解析出天氣、溫度等信息,然后將這些信息顯示到屏幕中。
這里使用U8g2庫來進行天氣信息的顯示,U8g2庫自帶了一些天氣圖標,可以將對應(yīng)的天氣信息轉(zhuǎn)換為對應(yīng)的天氣圖標顯示出來。
另外,天氣的顯示包括主頁常駐地的天氣顯示,可以在菜單頁中顯示不同城市的天氣,通過在菜單頁中查看對應(yīng)城市的天氣后,主頁的常駐地也會跟著變?yōu)椴藛沃胁榭吹哪莻€城市,從而實現(xiàn)主頁常駐地的切換。
關(guān)于U8g2庫在RVB2601上的具體移植過程,可參考前期的試用報告:【平頭哥RVB2601創(chuàng)意應(yīng)用開發(fā)】實踐2-移植U8g2圖形庫
4.2 當前時間顯示
RVB2601具備RTC(Real_Time Clock)功能,可以實現(xiàn)時間的顯示,雖然RVB2601的RTC沒有配置電池,掉電后時間就沒了,但RVB2601的連網(wǎng)功能,可以在每次開機時,通過獲取網(wǎng)絡(luò)時間,來為RTC重新校準時間。參考YOC文檔,可以學(xué)習(xí)RTC功能的基本用法。
網(wǎng)絡(luò)天氣與時間的具體實現(xiàn)細節(jié),可參考之前的試用報告:【平頭哥RVB2601創(chuàng)意應(yīng)用開發(fā)】實踐7-U8g2庫顯示網(wǎng)絡(luò)天氣和時間
4.3 室內(nèi)溫濕度顯示
除了顯示不同城市的天氣數(shù)據(jù),家庭環(huán)境中的溫濕度也值得我們關(guān)注,這里就通過RVB2601外接一個溫濕度傳感器(DHT11)來實現(xiàn)室內(nèi)溫濕度數(shù)據(jù)的采集與顯示。
DHT11數(shù)字溫濕度傳感器是一款含有已校準數(shù)字信號輸出的溫濕度復(fù)合傳感器,微控制器與 DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,這里將DHT11的數(shù)據(jù)線接至DHT11的PA10引腳上。再過按鍵切換功能,實現(xiàn)屏幕上主頁界面與室內(nèi)溫濕度頁面的切換顯示。
DHT11數(shù)據(jù)讀取與顯示程序如下:
DHT11的更多實現(xiàn)細節(jié),可參考前期的使用報告:【平頭哥RVB2601創(chuàng)意應(yīng)用開發(fā)】實踐3-外接DHT11顯示溫濕度
4.4 多級菜單
為了實現(xiàn)更多的功能操作,引入了多級菜單的功能,通過板子上兩個按鍵的配合,實現(xiàn)不同功能的選擇與觸發(fā)。
這里使用數(shù)組查表法的方式,實現(xiàn)了一個三級菜單的功能:
第一級和第二級是功能選項
第三級是要實現(xiàn)的具體功能
通過左邊按鍵實現(xiàn)上下項目的切換
通過右邊按鍵實現(xiàn)各級菜單間的跳轉(zhuǎn)
數(shù)組查表法的基本原理是通過一個結(jié)構(gòu)體數(shù)組,實現(xiàn)各個菜單頁面的跳轉(zhuǎn):
結(jié)構(gòu)體中4個成員的含義為:
current:當前頁面的索引號
down:按下“向下翻“按鈕后要跳轉(zhuǎn)到的頁面索引號
enter:按下“確認“按鈕后要跳轉(zhuǎn)到的頁面索引號
current_operation:當前頁面的索引號要執(zhí)行的顯示函數(shù)
這里的顯示函數(shù),加了兩個參數(shù):
第一個參數(shù)用來表示該界面是否是第一次進入,如果是,則按需做一些初始化處理,比如查詢不同程序的天氣時,第一次進入某個城市的天氣界面,需要先獲取一次網(wǎng)絡(luò)天氣;
第二個參數(shù)用來表示該界面是否需要在本界面內(nèi)實現(xiàn)某些功能切換,比如家中電器控制的界面中,控制電器開和關(guān)時,就要用到這個參數(shù),以用來顯示不同開關(guān)狀態(tài)的界面。
本項目中,多級菜單的前兩級的展示示例如下:
多級菜單的更多實現(xiàn)細節(jié),可參考前期的使用報告:【平頭哥RVB2601創(chuàng)意應(yīng)用開發(fā)】實踐6-多級菜單顯示測試
4.5音樂&視頻娛樂
RVB2601具有連網(wǎng)功能,并且板載了一個喇叭,可以通過網(wǎng)絡(luò)獲取一些音樂或視頻資源,實現(xiàn)家居娛樂功能。首先介紹網(wǎng)絡(luò)音樂播放功能。
4.5.1音樂播放功能
音樂播放參考了官方的webplayer例程,在此基礎(chǔ)上,實現(xiàn)按鍵控制不同音樂的播放開始與停止,以及播放時的屏幕顯示功能。
為了配合其它功能對按鍵與屏幕的使用,這里創(chuàng)建了一個音樂播放任務(wù),來控制音樂的播放:
音樂播放的菜單進入界面與音樂播放界面如下圖所示,在音樂播放時,設(shè)計了兩個位置交錯的音樂圖標循環(huán)顯示,實現(xiàn)一種正在播放的畫面效果。
網(wǎng)絡(luò)音樂播放的更多實現(xiàn)細節(jié),可參考前期的使用報告:【平頭哥RVB2601創(chuàng)意應(yīng)用開發(fā)】實踐4-按鍵控制網(wǎng)絡(luò)音樂播放
下面再來介紹視頻播放功能。
4.5.2視頻播放功能
本項目中視頻播放的基本原理是:利用TCP連網(wǎng)功能,使RVB2601作為客戶端,筆記本電腦作為服務(wù)器端,使RVB2601與ESP8266板子在同一局域網(wǎng)下無線通信,RVB2601獲取服務(wù)器端的視頻幀數(shù)據(jù),再借助U8g2圖形庫,將每一幀的圖形顯示出來。
電腦端通過Python程序,作為TCP服務(wù)器,其主要功能為:
利用OpenCV讀取視頻文件
對視頻幀的圖像,進行尺寸修改
對圖像進行二值化處理
將二值圖像轉(zhuǎn)換為數(shù)組
將數(shù)組通過socket發(fā)送出去
電腦端的主體代碼如下:
RVB2601端,通過連接對應(yīng)的服務(wù)器,在接收到圖像數(shù)據(jù)后,顯示出來即可:
視頻播放的截圖效果如下,實際播放效果請看演示視頻。
視頻播放的更多實現(xiàn)細節(jié),可參考前期的試用報告:【平頭哥RVB2601創(chuàng)意應(yīng)用開發(fā)】實踐9-板載屏幕播放BadApple視頻,需注意的是,前期這篇試用報告,是在TCP數(shù)據(jù)接收回調(diào)函數(shù)中,直接進行圖像的顯示的,而在此次結(jié)項綜合例程中,為了配合各個功能對屏幕的使用,在回調(diào)函數(shù)中收到視頻數(shù)據(jù)后,采用消息隊列的方式,將數(shù)據(jù)再轉(zhuǎn)發(fā)出去,由屏幕顯示程序來處理何時要在屏幕上顯示視頻。
4.6 家居電器控制
家居電器的控制功能,通過RVB2601與ESP8266無線TCP通信實現(xiàn),ESP8266作為被控制電器的無線控制器,與主控RVB2601通信。ESP8266作為TCP服務(wù)器端,RVB2601作為TCP客戶端,通過指定的IP與端口號進行連接。
4.6.1燈的開關(guān)控制
ESP8266使用Arduino IDE進行開發(fā)與程序編寫,主程序邏輯為:等待客戶端連接,并接收客戶端的指令,接收到后,對指令進行解析,執(zhí)行對應(yīng)的LED亮滅操作。
這里是以字符串的形式進行數(shù)據(jù)傳送,比如“l(fā)ed on”就是開燈,“l(fā)ed off”就是關(guān)燈。
4.6.2風(fēng)扇的開關(guān)控制
風(fēng)扇的控制與燈的控制邏輯一樣,只需再定義“fan on"和“fan off”這樣的指令用來進行風(fēng)扇的控制。硬件方面,由于這個小風(fēng)扇的相比較LED來說,需要的電流較大,這里使用一個繼電器來間接控制風(fēng)扇電源的通斷。
4.7 RGB呼吸燈
RGB呼吸燈是本項目的一個附件功能,通過一個獨立的RGB_LED任務(wù),實現(xiàn)3種顏色的LED呼吸亮滅。它也可以在調(diào)試程序中,作為程序是否正常運行的判斷標志。
05作品源碼
https://gitee.com/xxpcb/rbv2601-test/tree/master/RVB2601_2022
06視頻演示
簡介
平頭哥RVB2601創(chuàng)意應(yīng)用開發(fā)——智慧家居助手,主要展示的功能包括:
城市天氣顯示(主頁常駐地天氣與菜單頁不同城市天氣,連網(wǎng)獲取網(wǎng)絡(luò)天氣)
當前時間顯示(日期、時、分、秒、星期,連網(wǎng)獲取網(wǎng)絡(luò)時間)
室內(nèi)溫濕度顯示(DHT11溫濕度傳感器)
多級菜單(三級菜單實現(xiàn)各功能界面的跳轉(zhuǎn))
音樂播放功能(網(wǎng)絡(luò)音樂播放)
視頻播放功能(連接電腦端TCP服務(wù)器獲取視頻幀數(shù)據(jù))
家居電器控制(燈的控制、風(fēng)扇的控制)
RGB呼吸燈
07項目總結(jié)
本項目基于平頭哥的RVB2601,設(shè)計了一款智慧家居助手,實現(xiàn)了網(wǎng)絡(luò)天氣、時間的獲取與顯示、室內(nèi)溫濕度的獲取與顯示、家中電器的無線控制,音樂與視頻娛樂功能等,幫助我們更好的體驗家中環(huán)境。
從3個月前拿到板子,逐步熟悉CDK環(huán)境的開發(fā)與RISC-V的開發(fā)體驗,在使用過程中,不斷分享使用筆記,并學(xué)習(xí)其它網(wǎng)友積極分享的筆記,最后將所有使用過的功能,整合為一個綜合的小項目,就實現(xiàn)了這個智慧家居助手。
審核編輯:湯梓紅
-
開發(fā)板
+關(guān)注
關(guān)注
25文章
4895瀏覽量
97057 -
智慧家居
+關(guān)注
關(guān)注
1文章
83瀏覽量
16271 -
RISC-V
+關(guān)注
關(guān)注
44文章
2204瀏覽量
45958 -
平頭哥
+關(guān)注
關(guān)注
0文章
64瀏覽量
9025
原文標題:通用型MCU的創(chuàng)意應(yīng)用——3個月實現(xiàn)智慧家居助手快捷開發(fā)
文章出處:【微信號:芯片開放社區(qū),微信公眾號:芯片開放社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論