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