?
今天非常榮幸地向各位小伙伴展示并分享共創社中一位成員精心完成的項目成果,該項目依托ElfBoard開發板為核心硬件平臺,采用Qt框架構建了一套全面的智慧家庭控制中心系統。該系統由四大核心功能模塊整合而成:網絡通信接口、氣象信息展示、室內環境監控及家居智能管理。
網絡連接模塊負責自動掃描并接入周邊可用的Wi-Fi網絡,確保系統與外部數據源的穩定互聯。
天氣預報模塊在成功建立網絡連接后,能夠實時獲取并顯示指定地理位置的天氣狀況信息,為用戶提供便捷的氣象服務。
室內環境監測模塊借助集成的溫濕度傳感器設備,實現對居住空間內部環境參數的實時監測和精準記錄,以維護理想的居住環境條件。
家居控制中心作為系統的核心交互部分,具備對諸如LED照明設備以及蜂鳴器等家居設施的智能化管控能力,用戶可通過該中心輕松實現遠程操控與自動化場景設定。
項目軟硬件需求
1、ELF 1開發板
2、4.3英寸電容屏
3、QT
4、實況天氣接口API開發指南 未來一天天氣預報api - 天氣API
5、Wi-Fi(RTL8723DU)
項目功能
1、網絡連接
網絡連接部分的UI如圖所示:
本項目使用wpa_supplicant工具連接Wi-Fi,該工具是ElfBorad開發板的操作系統自帶的。掃描附近的Wi-Fi,然后將數據存儲到wifiname.txt文件中,核心代碼如下:
? system("killall wpa_suppicant"); qDebug()<<"killall wpa_suppicant"; system("rm -rf /var/run/wpa_supplicant"); qDebug() << "rm /var/run/wpa_supplicant"; QThread::msleep(1000); system("killall udhcpc"); qDebug() << "killall udhcpc"; QThread::msleep(1000); system("wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B"); qDebug() << "wpa_supplicant"; QThread::msleep(1000); system("killall wpa_cli"); QThread::msleep(1000); system("wpa_cli -i wlan0 scan"); QThread::msleep(1000); system("wpa_cli -i wlan0 scan_results > ./wifilist"); QThread::msleep(1000); system("cat wifilist |awk -F'\t' '{print $5}'> wifiname.txt");
該部分的代碼的作用是讀取wifiname.txt文件,然后將信息更新到UI中。
while (j<=12) { j++; str = in.readLine(); qDebug()
該部分代碼的作用是在用戶選擇好連接的wifi并輸入密碼后連接Wi-Fi。
char set_ssid[64]; char set_password[64]; char select_wlan[64]; if (ui->wifimima->text().isEmpty()) { QMessageBox::warning(this,tr("Connect information"), tr("密碼不能為空")); } else { int i =get_i(); sprintf(set_ssid,"wpa_cli -i wlan0 set_network %d ssid '"%s"'",i,wifiName.toLatin1().data()); sprintf(set_password, "wpa_cli -i wlan0 set_network %d psk '"%s"' ",i,ui->wifimima->text().toLatin1().data()); qDebug() << set_password; sprintf(select_wlan, "wpa_cli -i wlan0 select_network %d ",i); system(set_ssid); system(set_password); system("wpa_cli -i wlan0 list_network"); system(select_wlan); system("udhcpc -i wlan0 -B");
?
2、天氣預報
該頁面的UI如圖所示:
準備工作
在實況天氣接口API開發指南 未來一天天氣預報api - 天氣API網站注冊,注冊好后可以看到如下信息,每個郵箱號有3000次的免費的請求機會。
這里使用的是V61接口,https://tianqiapi.com/index/doc?version=v61,該接口下的天氣信息的JSON格式如下所示:
?{ "cityid":"101271201", #城市編號 "date":"2020-07-15", "week":"星期三", "update_time":"10:15", #更新時間 "city":"內江", #城市名稱 "cityEn":"neijiang", "country":"中國", "countryEn":"China", "wea":"陰", #實時天氣情況 "wea_img":"yin", "tem":"25", #實時溫度 "tem1":"29", #高溫 "tem2":"23", #低溫 "win":"西風", #風向 "win_speed":"2級", #風力等級 "win_meter":"小于12km/h", #風速 "humidity":"97%", #濕度 "visibility":"24.22km", #能見度 "pressure":"961", #氣壓 "uvIndex":"3", #紫外線等級 "uvDescription": "中等",#紫外線描述 "air":"15", #空氣質量 "air_pm25":"8", #pm2.5 "air_level":"優", "air_tips":"空氣很好,可以外出活動,呼吸新鮮空氣,擁抱大自然!", "rain_pcpn":"2.5",#降雨量2.5mm "alarm":{ "alarm_type":"暴雨", #預警類型 "alarm_level":"橙色", #預警等級 "alarm_content":"內江市氣象臺7月15日5時23分發布第16號暴雨橙色預警信號: 預計我市市中區部分地方3小時降雨量將達50毫米以上,并伴有雷電和陣性大風,請加強防范強降水、雷電和大風等帶來的危害。 (預警信息來源:國家預警信息發布中心)" #預警描述 }, "aqi":{ #空氣質量指數詳情 "air":"15", "air_level":"優", "air_tips":"空氣很好,可以外出活動,呼吸新鮮空氣,擁抱大自然!", "pm25":"8", "pm25_desc":"優", "pm10":"10", "pm10_desc":"優", "o3":"47", "o3_desc":"優", "no2":"12", "no2_desc":"優", "so2":"8", "so2_desc":"優", "co": "1", "co_desc": "優", "kouzhao":"無需戴口罩", "waichu":"適宜外出", "yundong":"適宜運動", "kaichuang":"適宜開窗", "jinghuaqi":"關閉凈化器", "cityid":"101271201", "city":"內江", "cityEn":"neijiang", "country":"中國", "countryEn":"China" } }
?
請求數據
請求天氣數據的代碼如下所示,appid后面的數字和appsecret是在注冊時網站給的密匙。
char quest_array[256] = "http://v1.yiketianqi.com/api?unescape=1&version=v61&appid=19311841&appsecret=nAGo24xi&city="; QNetworkRequest quest; sprintf(quest_array, "%s%s", quest_array, cityStr.toUtf8().data()); quest.setUrl(QUrl(quest_array)); quest.setHeader(QNetworkRequest::UserAgentHeader, "RT-Thread ART"); manager->get(quest); /*發送get網絡請求*/
我們在發送完請求信息后,會獲得回復信息,信息是json格式,我們只需要解析該json數據就行。主要代碼如下所示。
QJsonDocument json_recv = QJsonDocument::fromJson(all.toUtf8(), &err);//解析json對象 if (!json_recv.isNull() && err.error == QJsonParseError::NoError) { QJsonObject object = json_recv.object(); QStringList keys = object.keys(); foreach (const QString& key,keys){ qDebug() << "Key:"
3、室內環境監測
該部分的UI如圖所示:
?
該部分的代碼比較簡單,主要是新建立一個線程,然后不停的讀取傳感器的信息,然后將相關的信息展示即可。核心代碼如下:
void CollentdataThread::run() { int fd = aht20_init(); emit send(temp,hum); while (1) { /*read temp data*/ aht20_read(fd); emit send(temp,hum); sleep(2); } }
4、家居控制中心
該部分的UI如圖所示:
該部分主要是利用為了充分的展示開發板上的硬件而制作,我們假設3個lLED燈就是我們家里的燈,蜂鳴器可以假設為報警器。本身而言沒什么。
軟件編譯
在ElfBoard的官方教程中有詳細介紹如何在ELF 1開發板上編譯QT程序。在這里需要強調一點的是,在使用arm-gcc編譯完成后的可執行文件是不能在X86的電腦上運行的,需要先在電腦上調試軟件,成功之后,再使用arm-gcc編譯,然后移植到ELF 1開發板上。
項目總結
這款智慧家庭的APP深度整合了ELF 1開發板硬件資源,包括Wi-Fi模塊、LED照明系統、溫濕度傳感器以及蜂鳴器等組件。項目構建過程中巧妙的利用了Wi-Fi,特別定制了一個功能完備的天氣預報界面,用戶通過該界面能夠輕松獲取不同地區的實時天氣信息,從而將智慧佳通控制范圍拓展至環境監測及在線信息服務領域。
-
嵌入式
+關注
關注
5082文章
19104瀏覽量
304809 -
開發板
+關注
關注
25文章
5032瀏覽量
97372 -
Qt
+關注
關注
1文章
302瀏覽量
37899
發布評論請先 登錄
相關推薦
評論