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