基于树莓派开发板的智能家居系统的设计和实现

news2024/11/19 17:41:55

目 录
摘 要 I
Abstract II
前 言 1

  1. 开发工具和技术简介 1
    1.1 硬件工具简介 1
    1.1.1树莓派2代B板简介 1
    1.1.2 其他硬件模块 1
    1.2 软件工具介绍 3
    1.2.1 Qt 3
    1.2.2 Espeak TTS 3
    1.2.3 WiringPi 3
    1.2.4 PuTTY 5
    1.2.5 Win32 Disk Imager 5
    1.2.6 SDFormatter4exe 5
    1.3 系统环境设置 5
    1.3.1 系统的下载和烧写 5
    1.3.2 系统的启动与连接 5
    1.3.3 树莓派的基本配置 7
    1.3.4 树莓派的网络配置 7
    1.4 系统硬件连接图 8
    2.系统可行性分析 9
    2.1 市场可行性分析 9
    2.2 技术可行性分析 10
    2.3 经济可行性分析 10
  2. 系统的概要设计 11
    3.1 系统总体设计 11
    3.1.1 总体设计要求 11
    3.1.2 系统的构成与功能 11
    3.2 客户端设计 11
    3.3 服务器设计 12
  3. 系统功能模块的实现 14
    4.1客户端控制器模块 14
    4.1.1用户主控界面设计 14
    4.1.2主控界面主要代码 14
    4.1.3登录界面设计 18
    4.1.4登录模块主要代码 18
    4.2服务器总控模块设计 21
    4.2.1 总控线程模块 21
    4.2.2 温度检测模块 27
    4.2.3 入侵检测模块 30
    4.2.4 土壤湿度检测模块 31
    4.2.5 降雨检测模块 34
    4.2.6 光控开关模块 35
    4.2.7 Makefile 文件的编写 36
  4. 系统整体环境的搭建 38
    结束语 39
    参考文献 40
    致 谢 41
    3.系统的概要设计
    3.1 系统总体设计
    3.1.1 总体设计要求
    本系统采用的是传统的C/S结构,在个人PC上安装客户端,然后完成注册,每次输入密码登陆完成对树莓派服务器各个功能模块的开启/关闭。整个系统以家庭路由器作为网络传输点,在相同网段内实现TCP通信传输机制,然后在服务器根据客户端的不同指令,完成各个独立模块相应的线程控制,独立线程控制独立的模块,开关灵活方便,而且,还可以根据PC或者红外遥控等不同的信号机制作出灵活的控制端的变换。
    3.1.2 系统的构成与功能
    客户端:Qt编写的界面,用户名、密码登陆,利用QTCP的网络通信方式,根据按钮的事件对服务端发送相应的编码指令。
    服务器:利用Linux下的TCP通信技术,接收客户端的指令,然后开启/关闭相应的功能线程函数完成相应的控制。还根据传感器采集的数据,对各个功能模块作出相应的反馈。完成比较有趣的功能。
    3.2客户端设计
    客户端在此处相当于一个网络遥控器,控制服务器的模块功能。
    客户端的业务结构图:
    在这里插入图片描述
/* 各个模块线程函数的接口 */
void *temperature_thread(){
	voice_deal();
}
void *invade_thread(){
	invade_deal();
}
void *soil_thread(){
	soil_deal();
}
void *light_thread(){
	light_deal();
}
void *rain_thread(){
	rain_deal();
}
void process_info(int s)
{
    int recv_num;
    int send_num;
    char recv_buf[5];
    char send_buf[5];
/* 各个模块的线程ID */
	pthread_t temperature_pid;
	pthread_t soil_pid;
	pthread_t invade_pid;
	pthread_t light_pid;
	pthread_t rain_pid;
	int temperature_ret;
	int soil_ret;
	int invade_ret;
	int light_ret;
	int rain_ret;
	int *thread_ret = NULL;
	/* 主线程接收网络指令模块 */
    while(1){
         printf("begin recv:\n");
         recv_num = recv(s,recv_buf,sizeof(recv_buf),0);
         if(recv_num <0){
            perror("recv");
            exit(1);
         } else {
            recv_buf[recv_num] = '\0';
            printf("recv sucessful:%s\n",recv_buf);
         }
		if(!strcmp(recv_buf, temperatureOn)){ 	//温度相关模块操作
			temperature_ret = pthread_create(&temperature_pid, 
NULL, (void*)temperature_thread, NULL);   
			if(temperature_ret != 0){
				printf("tempetature create pthread error\n");
				return ;
			}
			printf("temperature pthread success\n");
		}else if(!strcmp(recv_buf, temperatureOff)){
			printf("temperature end work!\n");
			if(0 != pthread_cancel(temperature_pid)){
				printf("temperature cancel failed!\n");
			}
		}else if(!strcmp(recv_buf, invadeOn)){			//入侵检测模块操作
			printf("invade on!\n");
			invade_ret = pthread_create(&invade_pid, NULL,
 (void *)invade_thread, NULL);
			if(invade_ret != 0){
				printf("create invade pthread error\n");
				return ;
			}
			printf("invade pthread success\n");
		}else if(!strcmp(recv_buf, invadeOff)){
			printf("invade off!\n");
			if(0 != pthread_cancel(invade_pid)){
				printf("invade cancel failed!\n");
			}
			printf("invade cancel success!\n");
		}else if(!strcmp(recv_buf, soilOn)){			//土壤湿度检测模块操作
			printf("soil on!\n");
			soil_ret = pthread_create(&soil_pid, NULL, (void *)soil_thread, NULL);
			if(soil_ret != 0){
				printf("create soil pthread error!\n");
				return ;
			}
			printf("soil pthread success!\n");
		}else if(!strcmp(recv_buf, soilOff)){
			printf("soil off!\n");
			if(0 != pthread_cancel(soil_pid)){
				printf("soil canael failed!");
			}
			printf("soil cancel success!\n");
		}else if(!strcmp(recv_buf, rainOn)){				//降雨检测模块操作
			printf("rain on!\n");
			rain_ret = pthread_create(&rain_pid, NULL, (void *)rain_thread, NULL);
			if(rain_ret != 0){
				printf("create rain pthread error\n");
				return ;
			}
			printf("rain pthread success\n");
		}else if(!strcmp(recv_buf, rainOff)){
			printf("rain off!\n");
			if(0 != pthread_cancel(rain_pid)){
				printf("rain cancel failed\n");
				return ;
			}
			printf("rain cancel success\n");
		}else if(!strcmp(recv_buf, lightVoiceOn)){			//光控开关模块操作
			printf("light vodice on!\n");
			light_ret = pthread_create(&light_pid, NULL, 
(void *)light_thread, NULL);
			if(light_ret != 0){
				printf("create light pthread error\n");
				return ;
			}
			printf("light pthread success\n");
			}else if(!strcmp(recv_buf, lightVoiceOff)){
			printf("light voice off!\n");
			if(0 != pthread_cancel(light_pid)){
				printf("light cancel failed\n");
				return ;
			}
			printf("light cancel success\n");
		}else{	
			continue;
		}
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深度梯度投影网络:遥感图像】

Deep Gradient Projection Networks for Pan-sharpening &#xff08;用于全色锐化的深度梯度投影网络&#xff09; 全色锐化是遥感成像系统获取高分辨率多光谱图像的重要技术。最近&#xff0c;深度学习已经成为最流行的泛锐化工具。提出了一种基于模型的深度全色锐化方法。…

【电动车优化调度】基于模型预测控制(MPC)的凸优化算法的电动车优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f4dd;目前更新&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;电力系统相关知识&#xff0c;期刊论文&…

【WLAN】Android 13 WiFi Display 介绍和常规问题分析

Miracast依赖的Wi-Fi技术项有: Wi-Fi Direct:也就是Wi-Fi P2P。它支持在没有AP(Access Point)的情况下,两个Wi-Fi设备直连并通信。 Wi-Fi Protected Setup:用于帮助用户自动配置Wi-Fi网络、添加Wi-Fi设备等。 11n/WMM/WPA2:其中,11n就是802.11n协议,它将11a和11g提供…

python3通过winrm远程执行windows服务器dos命令

Background 在实际项目中&#xff0c;一般使用Linux作为生产服务器&#xff0c;但有时就会出现一些特殊情况&#xff0c;你只能使用windows作为作为服务器&#xff0c;比如说一个用fortran编写的仿真程序&#xff0c;编译环境用的intel的oneAPI&#xff0c;按理说这个编译器是是…

C/C++ 课程设计 | 银行管理系统

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

DP83TG720SWRHARQ1 IC TRANSCEIVER 接口芯片、TCAN1051VDRBTQ1

1、TCAN1051VDRBTQ1 具有 CAN FD 和故障保护功能的汽车类 CAN 收发器。 详细参数 类型&#xff1a;收发器 协议&#xff1a;CANbus 驱动器/接收器数&#xff1a;1/1 双工&#xff1a;半 接收器滞后&#xff1a;120 mV 数据速率&#xff1a;2Mbps 电压 - 供电&#xff1a;4.5V ~…

黄菊华老师,Java Servlet毕业设计毕设辅导课(5):Servlet配置虚拟路径映射

Servlet配置虚拟路径映射 在 web.xml 文件中&#xff0c;一个 <servlert-mapping> 元素用于映射一个 Servlet 的对外访问路径&#xff0c;该路径也称为虚拟路径。例如&#xff0c;在《第一个Servlet程序》教程中&#xff0c;hello 所映射的虚拟路径为“/hi”。 创建好的…

数据结构—平衡二叉树

文章目录查询数据的时间复杂度平衡二叉树旋转策略1、LL型旋转&#xff1a;2、RR型旋转&#xff1a;3、LR型旋转&#xff1a;4、RL型旋转&#xff1a;补充&#xff1a;————————————————————————————————查询数据的时间复杂度 首先&#xff0c;…

MySQL学习笔记(十二)锁

1.锁的类型 InnoDB实现了如下两种标准的行级锁&#xff1a; 共享锁&#xff08;S Lock&#xff09;&#xff1a;允许事务对一条行数据进行读取 排他锁&#xff08;X Lock&#xff09;&#xff1a;允许事务对一条行数据进行删除或更新 如果一个事务T1已经获得了行r的共享锁&…

委派设计模式

一、委派模式 1、定义 委派模式&#xff08;Delegate Pattern&#xff09;又称作委托模式&#xff0c;是一种面相对性的设计模式&#xff0c;允许对象组合实现与继承相同的代码重用&#xff0c;属于行为型设计模式&#xff0c;不属于GoF的23种设计模式。 委派模式的基本作用是…

Unity与IOS⭐一、百度语音IOS版Demo调试方法

文章目录 🟥 SDK下载与配置官网包名1️⃣ SDK下载地址2️⃣ 配置官网的包名3️⃣ 百度语音IOS版教程地址🟧 配置SDK Demo1️⃣ 配置License2️⃣ 配置唤醒词文件3️⃣ 打包🟨 Demo测试🟥 SDK下载与配置官网包名 1️⃣ SDK下载地址 SDK下载地址:https://ai.baidu.com…

JAVA中如何精确取到时间间隔

文章目录0 写在前面1 使用方法2 举例3 写在最后0 写在前面 做业务的时候&#xff0c;总要统计数据&#xff0c;几月份到几月份的全部数据。这个时候就要找到起始月份的具体时间和终止月份的具体时间。 此时我们用原始的Date类去处理就比较麻烦&#xff0c;可以自己写一个工具类…

jsp网络申报审批系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 网络申报审批系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql&#xff0c;使用…

[矩阵论] Unit 1. 线性空间与线性变换 - 知识点整理

注: 以下内容均由个人整理, 不保证完全准确, 如有纰漏, 欢迎交流讨论参考: 杨明, 刘先忠. 矩阵论(第二版)[M]. 武汉: 华中科技大学出版社, 2005 1 线性空间与线性变换 1.1 线性空间 线性空间 Def 1.1: 设 VVV 是一个非空集合(V≠∅V\neq \varnothingV​∅)&#xff0c;FF…

Unity与IOS⭐最基础的交互演示

文章目录 🟥 本章的交互效果🟧 创建IOS代码1️⃣ 创建代码文件2️⃣ 代码文件🚩 Interaction.h🚩 Interaction.m🟨 测试试试吧🟥 本章的交互效果 本章演示unity调用IOS代码,IOS并返回值。 🟧 创建IOS代码 我们的Unity代码一个脚本就好了,而IOS代码需要两个脚…

【AI】Python 实现 KNN 手写数字识别

KNN 算法 1. 题目介绍 K近邻&#xff08;K-Nearest Neighbor, KNN&#xff09;是一种最经典和最简单的有监督学习方法之一。K-近邻算法是最简单的分类器&#xff0c;没有显式的学习过程或训练过程&#xff0c;是懒惰学习&#xff08;Lazy Learning&#xff09;。当对数据的分…

如何搭建一个自己的音乐服务器 审核中

点赞再看&#xff0c;动力无限。 微信搜「 程序猿阿朗 」。 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录&#xff0c;有很多知识点和系列文章。 最近发现&#xff0c;经常用的网易云音乐&#xff0c;有很多歌曲下架了&#xff0c;能听的越来越少了&#xff1b;…

设计模式之中介者模式(十五)

目录 1. 背景 1.1 智能家庭管理项目 1.2 中介者模式概述 2. 中介者模式 2.1 中介者模式解决上述问题 1. 背景 1.1 智能家庭管理项目 智能家庭项目&#xff1a; 智能家庭包括各种设备&#xff0c;闹钟、咖啡机、电视机、窗帘 等。主人要看电视时&#xff0c;各个设备可以协…

7 支持向量机

支持向量机 支持向量机(SVM)是在统计学习理论基础上发展起来的一种数据挖掘方法&#xff0c;1992 年由Boser, Guyon和Vapnik提出&#xff0c;在解决小样本、非线性、高维的回归和分类问题上&#xff0c; 有许多优势。 1 支持向量分类概述 支持向量分类以训练样本集为数据对象…

支持向量机核技巧:10个常用的核函数总结

支持向量机是一种监督学习技术&#xff0c;主要用于分类&#xff0c;也可用于回归。它的关键概念是算法搜索最佳的可用于基于标记数据(训练数据)对新数据点进行分类的超平面。 一般情况下算法试图学习一个类的最常见特征(区分一个类与另一个类的特征)&#xff0c;分类是基于学…