# 搭载Linux Buildroot Qt与FreeRTOS的智能家居与机器狗管家 **Repository Path**: LM_WJ/Linux ## Basic Information - **Project Name**: 搭载Linux Buildroot Qt与FreeRTOS的智能家居与机器狗管家 - **Description**: 1.主控STM32MP157AAA3搭载Linux_Buildroot_Qt系统,作为TCP服务器。 2.在Ubuntu 20.04中使用Qt编写应用程序,经SDK交叉编译后,通过SCP传输至主控运行,驱动外围设备启停。 3.下位机STM32F407IGH6搭载FreeRTOS,采用时间片轮转调度四个任务。 4.双方通过TCP协议进行实时数据交互与控制指令传输,构成完整的嵌入式主从控制架构。 - **Primary Language**: C++ - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 2 - **Created**: 2025-09-07 - **Last Updated**: 2026-06-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: Qt ## README # 搭载Linux Buildroot Qt与FreeRTOS的智能家居与机器狗管家 ## 介绍 ### **一、主控:STM32MP157AAA3** 系统级芯片**SOC**,搭载**Linux_Buildroot_Qt**系统,进行实时操作和交互界面。 ### **二、ubuntu20.04** 使用**Linux Qt**编写十个Qt应用程序,**SDK 交叉编译工具**编译过后,通过**SCP**发送给**Linux_Buildroot_Qt**系统,驱动外围设备启停。 ### **三、下位机:STM32F407IGH6** 搭载**FreeRTOS**实时操作系统,采用**时间片轮转**调度四个任务。 ### **四、TCP通讯协议** 主控作为服务器,下位机作为客户端,实现实时数据交互与控制指令传输,构成完整的嵌入式主从控制架构。 ### 整体实物图 ![输入图片说明](img/%E6%95%B4%E4%BD%93%E5%9B%BE.jpg) ![输入图片说明](img/%E6%9C%BA%E5%99%A8%E7%8B%97-%E5%B7%A6%E4%BE%A7.jpg) ### 设计构思 ![输入图片说明](img/%E6%90%AD%E8%BD%BDLinux_Buildroot_Qt%E4%B8%8EFreeRTOS%EF%BC%9A%E6%99%BA%E8%83%BD%E5%AE%B6%E5%B1%85%E4%B8%8E%E6%9C%BA%E5%99%A8%E7%8B%97%E7%AE%A1%E5%AE%B6%E7%B3%BB%E7%BB%9F.png) ## 开发环境 ### 主控 1. VMware Workstation Pro 2. STM32CubeProgrammer 3. Linux_Buildroot_Qt 4. ubuntu20.04 5. Linux Qt Creator 5.14 6. Postman 7. ScreenToGif 8. SecureCRT 9.0 9. FileZilla Client 10. Samba 11. SCP 12. iconfont-阿里巴巴矢量图标库 ### 下位机 1. Keil uVision5 MDK 536 2. Visual Studio Code 3. AiThinker Serial Tool 4. PCtoLCD2002 5. ATK-Logic 6. 天问Block 7. vofa+ 8. NetAssist ## 硬件架构 1. ### 主控板 | STM32MP157AAA3 | 芯片 | **I2C2** | **5寸LCD显示屏** | | :----------------: | :-------------: | :---------: | :--------------------: | | **NRST** | **复位按键** | **I2C5** | **摄像头** | | **LED1** | **LED灯1** | **USART4** | **系统调试窗口** | | **LED2** | **LED灯2** | **RMII** | **以太网** | | **LED3** | **LED灯3** | **eMMC** | **Linux_Buildroot_Qt** | | **DC-044B-3A-2R5** | **5V-2A供电口** | **USB OTG** | **系统下载接口** | ![输入图片说明](img/IMG_20250908_163619.jpg) 2. ### 主控-扩展板 | KEY1 | 按键1 | Beep | 蜂鸣器 | | :-------: | :--------: | :-------: | :----------------: | | **KEY2** | **按键2** | **FAN** | **风扇** | | **KEY3** | **按键3** | **Moto** | **马达** | | **LED1** | **LED灯1** | **Fire** | **火焰传感器** | | **LED2** | **LED灯2** | **ITR** | **光电传感器** | | **LED3** | **LED灯3** | **PIR** | **人体红外传感器** | | **Nixie** | **数码管** | **SHT20** | **温湿度传感器** | ![输入图片说明](img/%E6%89%A9%E5%B1%95%E6%9D%BF.jpg) 3. ### 主控-外设 1. 摄像头模块 ![输入图片说明](img/%E6%91%84%E5%83%8F%E5%A4%B4.jpg) 2. 5 寸LCD显示屏 ![输入图片说明](img/5%E5%AF%B8%E5%B1%8F%E5%B9%95-%E4%B8%BB%E9%A1%B5%E9%9D%A2.jpg) 4. ### 下位机核心板 | STM32F407IGH6 | 芯片 | | :-----------: | :--------------: | | **KEY_REST** | **复位按键** | | **LED_D2** | **用户灯** | | **KEY_USER** | **用户按键** | | **ESP8266** | **WIFI** | | **USART6** | **下载调试串口** | | **USB** | **供电口** | ![输入图片说明](img/%E6%9C%BA%E5%99%A8%E7%8B%97-%E5%8F%B3%E4%BE%A7.jpg) 5. ### 语音模块(ASRPRO) | USB | **供电口** | | :--------: | :---------------: | | **USART1** | **核心板-USART1** | | **SPK** | **喇叭** | ![输入图片说明](img/%E8%AF%AD%E9%9F%B3%E6%A8%A1%E5%9D%97.jpg) ![输入图片说明](img/%E5%96%87%E5%8F%AD.jpg) 6. ### OLED | VCC | **正极** | | :--: | :------------: | | GND | **负极** | | SCL | **核心板-PA4** | | SDA | **核心板-PA5** | ![输入图片说明](img/%E6%9C%BA%E5%99%A8%E7%8B%97-%E5%89%8D%E9%9D%A21.jpg) 7. ### 运动系统 | 型号 | 数量 | 驱动方式 | | :--: | :--: | :------: | | SG90 | 4 | PWM | | GPIO | 定时器 | **通道** | | :--: | :----: | :------: | | PA6 | TIM3 | CH1 | | PA7 | TIM3 | CH2 | | PA2 | TIM2 | CH3 | | PA3 | TIM2 | CH4 | ![输入图片说明](img/SG90%E8%88%B5%E6%9C%BA.jpg) ## 项目框架 ### 在 **Linux_Buildroot_Qt** 图形化文件系统中,建立了十个应用程序。 1. ### 智能家居(Smart_Home) 2. ### 智能AI(Smart_AI) 3. ### 系统信息(System info) 4. ### 水表电表(Meter) 5. ### 音乐播放器(Music_player) 6. ### 视频播放器(Video_player) 7. ### TCP服务端(Master) 8. ### 智能猫眼(Camera) 9. ### 天气预报(Weather_Forecast) 10. ### 日历(Calendar) ## 主要功能 1. ### 智能家居(Smart_Home) #### 主窗口 在 QWidget 里面使用 QStackedWidget 窗口容器 创建 QWidget 四个窗口,运行时会默认显示第一个窗口。 通过点击 LED 按钮,切换到 LED 窗口。 通过点击 家电控制 按钮,切换到 家电控制 窗口。 通过点击 家电状态 按钮,切换到 家电状态 窗口。 通过点击 温度湿度 按钮,切换到 温度湿度 窗口。 #### LED | 位置 | 主控板 | 主控-扩展板 | 下位机核心板 | | :--: | :----: | :---------: | :----------: | | 数量 | 2 | 3 | 1 | 在窗口中点击对应的LED按钮,可以控制LED的开启和关闭。 右侧第一排第一个为 开启全部LED灯按钮,右侧第二排第一个为 关闭全部LED灯按钮。 下位机核心板的 **LED_D2**,是服务器通过TCP发送数据给客户端,控制**LED_D2**灯的开启和关闭。 ![输入图片说明](img/%E6%99%BA%E8%83%BD%E5%AE%B6%E5%B1%85-LED%E7%81%AF.jpg) #### 家电控制 | 设备 | 档位 | 驱动方式 | | :--------: | :-----: | :------: | | **风扇** | 3个档位 | PWM | | **蜂鸣器** | 3个档位 | PWM | | **马达** | 3个档位 | PWM | 初始化为关闭状态。 一档:点击一次,设置固定低档的PWM值 二档:点击二次,设置固定中档的PWM值 三档:点击三次,设置固定高档的PWM值 关闭:点击四次,关闭设备 ![输入图片说明](img/%E6%99%BA%E8%83%BD%E5%AE%B6%E5%B1%85-%E5%AE%B6%E7%94%B5%E6%8E%A7%E5%88%B6.jpg) #### 家电状态 | 设备\位置 | 主控-扩展板 | 下位机核心板 | | :----------: | :----------------: | :-----------: | | **KEY1** | **按键1** | | | **KEY2** | **按键2** | | | **KEY3** | **按键3** | | | **Fire** | **火焰传感器** | | | **ITR** | **光电传感器** | | | **PIR** | **人体红外传感器** | | | **KEY_USER** | | **用户按键** | | **机械狗** | | **TCP客户端** | 实时检测按键按下和松开状态。 实时显示火焰、光电、人体红外设备的感知状态。 下位机核心板的 **KEY_USER和机械狗** ,是客户端通过TCP发送数据给服务器,告知服务器**KEY_USER和机械狗**的实时状态。 ![输入图片说明](img/%E6%99%BA%E8%83%BD%E5%AE%B6%E5%B1%85-%E5%AE%B6%E7%94%B5%E7%8A%B6%E6%80%81.jpg) #### 温度湿度 | 温湿度传感器 | 温度/°C | 湿度/% | | :----------: | :-----: | :----: | 使用 **QChart** 类,构建图表,显示温湿度折线图,红线为 温度 ,青线为 湿度 。 使用定时器,500ms 刷新一次数据。 ![输入图片说明](img/%E6%99%BA%E8%83%BD%E5%AE%B6%E5%B1%85-%E6%B8%A9%E6%B9%BF%E5%BA%A6.jpg) #### TCP 在TCP.cpp中使用 获取单例实例的静态方法,把 TCP 实列成一个单例模式。 在其他使用TCP的窗口中,使用单例模式获取TCP实例,可以实现发送和接收的为同一个实例对象。 主窗口的左下角,主控台为服务器状态,机械狗为客户端状态。 2. ### 智能AI(Smart_AI) AI 对话部署了 Deepseek AI,使用 DeepSeek Chat 接口的完整 URL,并使用 API Key 的访问密钥,实时与Deepseek AI 进行智能对话。 发送消息使用 json封装消息发送给Deepseek AI;接收到消息 解 json 得到需要的信息。 对话窗口使用 QScrollArea ,当消息过多时,自动滚动显示最新消息,也可手动调节。 左侧是 Deepseek AI 发送给我的消息,右侧是我发送给 Deepseek AI 的消息。 下方发送框使用 QTextEdit 点击发送,会发送给 Deepseek AI,并刷新对话窗口的消息。 ![输入图片说明](img/%E6%99%BA%E8%83%BDAI-deepseek.jpg) 3. ### 系统信息(System info) 内核版本号,CPU利用率 网络接收速度,网络发送速度 IP地址 ![输入图片说明](img/%E7%B3%BB%E7%BB%9F%E4%BF%A1%E6%81%AF.png) 4. ### 水表电表(Meter) 使用 QPainter、QConicalGradient、QtMath、QPainter构建水电表控件类。 在主窗口直接调用水电表控件类,留出了数据接入接口,水电表下方有手动校准的拖动条。 ![输入图片说明](img/%E6%B0%B4%E8%A1%A8%E7%94%B5%E8%A1%A8.jpg) 5. ### 音乐播放器(Music_player) 使用 QMediaPlaylist 创建音乐列表,QMediaPlayer创建音乐播放器,QMovie创建动图播放。 通过网络获取音乐,歌词需要 解 json 后,经过与音乐时间匹配,才会显示歌词、歌名、歌手。 使用 QTimer 定时器1秒钟与音乐播放进度对比,相匹配时,显示当前歌词,并加大加亮。 #### 整体布局 左侧为动图播放,随着音乐播放、暂停、停止。 右侧为歌曲名、歌手、实时更新的歌词,7句歌词,当前歌词,总是在第4句,并加大加亮。 下方为播放进度条,上一首、播放\暂停、下一首,音乐列表。 ![输入图片说明](img/%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE%E5%99%A8.jpg) 6. ### 视频播放器(Video_player) 使用 QMediaPlayer 创建媒体播放器对象,QVideoWidget 创建视频显示部件。 对于嵌入式视频播放器来说,只使用上面两个,视频画面会显示不出来,有声音,无画面。 使用 QGraphicsScene、QGraphicsVideoItem 创建图形场景和视图,才能正常显示视频画面和声音。 #### 整体布局 视频播放在中间,显示视频画面和播放声音。 暂停按钮,开始按钮,在暂停后,点击开始按钮会在暂停的位置继续播放。 ![输入图片说明](img/%E8%A7%86%E9%A2%91%E6%92%AD%E6%94%BE%E5%99%A8.jpg) 7. ### TCP服务端(Master) 使用 QTcpServer 创建TCP服务器对象,QTcpSocket 当前连接的客户端socket,QList 所有连接的客户端列表。 当服务器接收到客户端发送的数据,先使用 QTextCodec GBK编码解码数据。 点击对应的功能按钮,服务器将数据发送给客户端,客户端立即执行。 #### 整体布局 ##### 上方: 发送消息输入消息框,接收消息显示框 端口号修改,服务器状态 #### 左侧: 启动\停止服务器,发送,起立\停止,趴下 前进,后退,左移,右移 握手,跳舞,LED_D2,备用 #### 右侧: 服务器、客户端、接收、发送的消息显示。 ![输入图片说明](img/TCP-%E6%9C%BA%E5%99%A8%E7%8B%97%E6%8E%A7%E5%88%B6.jpg) 8. ### 智能猫眼(Camera) QCamera 导入摄像头类,QCameraInfo 摄像头信息类,QCameraViewfinder 取景器类,QCameraImageCapture 捕获类,QCameraViewfinderSettings 摄像头设置类 创建完摄像头,使用 QTimer 定时刷新摄像头画面。 点击按钮,可以打开摄像头和关闭摄像头。 ![输入图片说明](img/IMG_20250905_101421.jpg) 9. ### 天气预报(Weather_Forecast) 通过输入的地区,与地区编码匹配后,将通过 网址+地区编码 的方式向互联网请求,地区7天的天气预报,得到的数据是 json ,专门写一个 解 天气预报的json 类,获取需要的数据。 使用QJsonObject、QJsonArray、QJsonDocument 解 json 类。 绘制7天高温曲线图类,使用 QPainterPath、QPen、QRect、QRegExp、QPainter 绘制。 绘制7天低温曲线图类,基本调用 绘制7天高温曲线图类,修改成低温。 ![输入图片说明](img/%E5%A4%A9%E6%B0%94%E9%A2%84%E6%8A%A5.jpg) 10. ### 日历(Calendar) 使用 QTimer 定时刷新时间,并显示在左侧的时间框。 使用自带的日历控件,修改样式表,显示在右侧。 ![输入图片说明](img/%E6%97%A5%E5%8E%86.jpg)