0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于QT的智慧家庭控制中心

ElfBoard 2024-02-21 13:42 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

今天非常荣幸地向各位小伙伴展示并分享共创社中一位成员精心完成的项目成果,该项目依托ElfBoard开发板为核心硬件平台,采用Qt框架构建了一套全面的智慧家庭控制中心系统。该系统由四大核心功能模块整合而成:网络通信接口、气象信息展示、室内环境监控及家居智能管理。

网络连接模块负责自动扫描并接入周边可用的Wi-Fi网络,确保系统与外部数据源的稳定互联。

天气预报模块在成功建立网络连接后,能够实时获取并显示指定地理位置的天气状况信息,为用户提供便捷的气象服务。

室内环境监测模块借助集成的温湿度传感器设备,实现对居住空间内部环境参数的实时监测和精准记录,以维护理想的居住环境条件。

家居控制中心作为系统的核心交互部分,具备对诸如LED照明设备以及蜂鸣器等家居设施的智能化管控能力,用户可通过该中心轻松实现远程操控与自动化场景设定。

项目软硬件需求

1、ELF 1开发板

2、4.3英寸电容

3、QT

4、实况天气接口API开发指南 未来一天天气预报api - 天气API

5、Wi-Fi(RTL8723DU)

项目功能

1、网络连接

网络连接部分的UI如图所示:

wKgaomXViFaAZQUlAABK7lvD7xM572.png

本项目使用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()setVisible(true); ui->Wlan1->setText(str); break; case 2:ui->Wlan2->setVisible(true); ui->Wlan2->setText(str); break; case 3:ui->Wlan3->setVisible(true); ui->Wlan3->setText(str); break; case 4:ui->Wlan4->setVisible(true); ui->Wlan4->setText(str); break; case 5:ui->Wlan5->setVisible(true); ui->Wlan5->setText(str); break; case 6:ui->Wlan6->setVisible(true); ui->Wlan6->setText(str); break; case 7:ui->Wlan7->setVisible(true); ui->Wlan7->setText(str); break; case 8:ui->Wlan8->setVisible(true); ui->Wlan8->setText(str); break; case 9:ui->Wlan9->setVisible(true); ui->Wlan9->setText(str); break; case 10:ui->Wlan10->setVisible(true); ui->Wlan10->setText(str); break; case 11:ui->Wlan11->setVisible(true); ui->Wlan11->setText(str); break; case 12:ui->Wlan12->setVisible(true); ui->Wlan12->setText(str); break; default:break; } }

该部分代码的作用是在用户选择好连接的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如图所示:

wKgaomXViQ6AOsgJAAC72x-iRUk902.png

准备工作

在实况天气接口API开发指南 未来一天天气预报api - 天气API网站注册,注册好后可以看到如下信息,每个邮箱号有3000次的免费的请求机会。

wKgZomXViSKAZ--WAABlr88huvM037.png

这里使用的是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:" setText(weather_type); ui->label_temperature_2->setText(wendu); ui->label_wind_2->setText(fengli); ui->label_kongqizhiliang->setText(kongqizhiliang); ui->label_uv->setText(ziwaixian); ui->label_recommend_2->setText(tuijian); }

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3、室内环境监测

该部分的UI如图所示:

wKgZomXVi7-AS8T5AAC-Mb3rGhE287.png

该部分的代码比较简单,主要是新建立一个线程,然后不停的读取传感器的信息,然后将相关的信息展示即可。核心代码如下:

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如图所示:

wKgaomXVi-qAfLNGAAB0ULNczjE805.png

该部分主要是利用为了充分的展示开发板上的硬件而制作,我们假设3个lLED灯就是我们家里的灯,蜂鸣器可以假设为报警器。本身而言没什么。

软件编译

在ElfBoard的官方教程中有详细介绍如何在ELF 1开发板上编译QT程序。在这里需要强调一点的是,在使用arm-gcc编译完成后的可执行文件是不能在X86的电脑上运行的,需要先在电脑上调试软件,成功之后,再使用arm-gcc编译,然后移植到ELF 1开发板上。

项目总结

这款智慧家庭的APP深度整合了ELF 1开发板硬件资源,包括Wi-Fi模块、LED照明系统、温湿度传感器以及蜂鸣器等组件。项目构建过程中巧妙的利用了Wi-Fi,特别定制了一个功能完备的天气预报界面,用户通过该界面能够轻松获取不同地区的实时天气信息,从而将智慧佳通控制范围拓展至环境监测及在线信息服务领域。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5186

    文章

    20151

    浏览量

    328917
  • 开发板
    +关注

    关注

    25

    文章

    6125

    浏览量

    113387
  • Qt
    Qt
    +关注

    关注

    2

    文章

    318

    浏览量

    40306
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LVGL近期很多人问,那它和Qt哪个好?

    最近拜访做工业控制、智能家居的客户时,常被问到同一个问题:嵌入式产品,GUI选LVGL还是Qt? 其实工具选择没有绝对的“好”与“坏”,但选对适配场景的GUI图形用户界面工具,能直接让产品开发效率
    的头像 发表于 09-23 15:54 830次阅读
    LVGL近期很多人问,那它和<b class='flag-5'>Qt</b>哪个好?

    雷曼光电COB超高清显示屏亮相第35届青岛国际啤酒节

    近日,雷曼光电在青岛啤酒厂百年历史的智能化转型征程中,以雷曼COB超高清解决方案重塑工业控制中心的“智慧大脑”,助力打造“酿造过程实时数字孪生”的智能控制中心。这一里程碑式项目,恰逢第35届青岛国际啤酒节开幕,雷曼光电以科技之光
    的头像 发表于 08-12 09:36 737次阅读

    CX3无法将固件加载到SPI闪存如何解决?

    我无法将固件加载到 SPI 闪存。 步骤如下: 1. 开机,运行 USB 控制中心, 2.点击boot loader,点击FX3,然后选择“SPI flash”。然后USB控制中心显示“未找到
    发表于 07-16 07:37

    在win10系统上,通过控制中心下载MDK编译的.hex后,硬件能被识别,但读写无反应,usb不能工作,是什么原因?

    在win10系统上,通过控制中心下载MDK编译的.hex后,硬件能被识别,但读写无反应,usb不能工作;win7上操作正常,请问这是什么问题呢?
    发表于 05-30 07:15

    使用USB控制中心下载固件遇到的问题怎么解决?

    我使用 USB 控制中心下载了固件,program-fx3-iic-eeprom。但是当我需要重置新下载固件时,出现了请重置你的设备来下载固件。我不知道怎么解决?求解答
    发表于 05-27 06:35

    使用USB控制中心通过FX3将数据传输到DSP,数据字丢失怎么解决?

    我们正试图使用 USB 控制中心通过 FX3 将数据传输到 DSP。 硬件 数字信号处理器:与 Fx3S 连接的 TMS320C28346ZFE 按键连接到地 这是一个定制板 问题: 使用 SDK
    发表于 05-21 07:31

    求助,关于CX3 USB控制中心和调试问题求解

    CreateProcess error=2,系统无法找到指定文件 有办法解决这个问题吗? 我不知道这是否与此有关,但当我打开 USB 控制中心时,没有设备树,因此没有描述符信息,但电路板已插入并接通电源,而且无法编程,FX2、FX3 菜单项被禁用。
    发表于 05-20 06:37

    [Actor] 通过actor创建控制中心与数据采集工作站来看操作者架构

    :自动生产了“发送该消息”的VI, (注:这个vi中包含方法中对外连接的端子) 3、至此 actor对象的方法和消息都已创建,可以编程使用了 二、具体到控制中心和数据采集工作站的讲解 1、首先创建了一个定时
    发表于 05-14 18:44

    控制中心开机后无法识别CYUSB3014,除非重新插入USB线,这是怎么回事?

    正如标题所述,我使用 PC 上的控制中心识别 PCBA 上的 CYUSB3014-BZXI 设备,这是没问题的。 这里的控制中心位于CYPRESS™的 FX3 设备套件中。 但是,当我关闭 PCBA
    发表于 05-12 06:40

    为什么无法在USB控制中心选择固件映像文件?

    到 SPI Flash。 但是,在某个时间点之后,我无法再使用 USB 控制中心将新的固件映像文件下载到 SPI Flash 或 EEPROM。 当我从程序选项卡单击 SPI Flash 或
    发表于 05-07 06:14

    EtherCAT运动控制器实时数据的Qt示波器

    基于QT开发调用正运动函数接口实现控制器数据实时监测的示波器效果
    的头像 发表于 04-17 17:12 574次阅读
    EtherCAT运动<b class='flag-5'>控制</b>器实时数据的<b class='flag-5'>Qt</b>示波器

    【技术案例】Qt 环境部署 - Ubuntu 篇

    什么是QtQt是一个跨平台C++图形用户界面应用程序开发框架,可构建高性能的桌面、移动及Web应用程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特
    的头像 发表于 04-16 17:17 1449次阅读
    【技术案例】<b class='flag-5'>Qt</b> 环境部署 - Ubuntu 篇

    星闪破壁,鸿蒙筑家:智慧家庭聚变2025

    鸿蒙+星闪,共绘万物协同的智慧家庭图景
    的头像 发表于 04-03 09:51 1069次阅读
    星闪破壁,鸿蒙筑家:<b class='flag-5'>智慧</b><b class='flag-5'>家庭</b>聚变2025

    上海海思鸿蒙星闪技术引领智慧家庭新体验

    智慧家庭承载着人们对便捷、舒适生活的无限憧憬。智慧家庭蓬勃发展的同时,消费者往往遇到家居设备连不上连不稳、生态割裂需要安装一堆APP、大屏娱乐内容不够丰富等问题。
    的头像 发表于 03-31 10:29 1160次阅读

    Qt Group发布Qt Accelerate,加速数字产品开发进程

    Qt Group近日正式推出了Qt Accelerate,这是一款专为快速构建数字应用而设计的解决方案,旨在满足工业制造、移动出行、消费类电子等多个领域的需求。 Qt Accelerate基于
    的头像 发表于 01-13 11:19 930次阅读