1.实现功能介绍

语音灯控、远程灯控的实现(LD3320、APP远程控制)

火灾报警功能实现(火灾传感器模块、蜂鸣器实现)

人脸识别开锁

温湿度采集(未实现)

2.设计模式------------工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

在C语言中,因为没有接口、类这一说法,所以这里采用了结构体来“等效替换”。有四个灯控,所以我创建了四个灯控.c程序。每一个程序文件中,都有一个Devices结构体,每个程序文件的函数实现方法不同.当有新设备进入只需要在创建一个.c文件,改变函数实现方法即可。

程序中,通过链表将各个模块连接起来(头插法)。在要使用某个模块时,只需要使用链表遍历,找到所需即可.

struct Devices corridorLight={.deviceName="C",.pinNumber=26,.open=corridorLightopen,.close=corridorLightclose,.deviceInit =corridorLightCloseinit,.changeStatus=corridorLightCloseStatus,.status = 0
};
struct Devices *corridorLightinlink(struct Devices *phead)
{if(phead==NULL){phead=&corridorLight;return phead;}else{corridorLight.next=phead;phead=&corridorLight;return phead;}
}

3.火灾报警功能

模块在环境火焰光谱或者光源达不到设定值时,D0口输出高电平,当外界环境火焰光谱或者光源超过设定值时,模块D0出低电平;

所以我们只需要在程序中开一个线程循环检测传感器模块的输出是否变低即可。再去控制有源蜂鸣器的鸣叫即可。

void *Firewaring(void *arg)/*火灾报警扫描处理函数*/
{struct Devices *firedevices = (struct Devices *)arg;//printf("%s\n",firedevices->deviceName);//******蜂鸣器初始化******//pinMode(Buzzer,OUTPUT);digitalWrite(Buzzer,HIGH);while(1){if(firedevices->readStatus(firedevices->pinNumber)== LOW && firedevices->status== 1){delay(10);if(firedevices->readStatus(firedevices->pinNumber)== LOW && firedevices->status== 1){digitalWrite(Buzzer,LOW);/*printf("yes\n");*/delay(500);}}else{digitalWrite(Buzzer,HIGH);/*printf("no\n");*/delay(500);}}
}

4.人脸识别实现

这个涉及到图像处理,但自己又未涉及过,所以这里直接调用祥云平台的功能进行处理。

根据祥云平台提供的API文档,进行开发。因为用的时C语言所以我们只能选择图片为base64流,根据文档要求只需将接口所需参数通过POST发送给接口地址即可.具体开发可参考这个(19条消息) C语言人脸识别——翔云平台调用(含wget安装)_YOULD YGL的博客-CSDN博客

5.关于socket与串口接收到数据后的处理

基于我最初的想法,我的手机APP端需要在我连接后知道我的房子的灯控、安全等信息,所以我们的服务器需要在接收的同时去接收消息。并且还支持同时接纳多个客户端的连接。所以我选择在连接一个客户端时同时开辟两个线程。在接受到数据后,按照我自己规定的协议,将数据提取出来,找到对应需要控制的设备,以及接下来的操作指令。

在创建收发线程时,需要将我们连接的客户端的对应套接字传入线程,不然,当有另外客户端接入时,会改变之前套接字的值,以至于线程不知道套接字改变,依然在进行“收”和“发”.

客户端接入后:

 sfinder->Init(sfinder,NULL,NULL);//printf("find %s\n",sfinder->commandName);while(1)    {c_sockfd=accept(sfinder->fd,(struct sockaddr *)&client_addr, &clen);printf("client's c_socked=%d\n",c_sockfd);if(c_sockfd==-1){perror("accept");}printf("Connection successful!\n");printf("from:%s\n",inet_ntoa(client_addr.sin_addr));pthread_create(&readid,NULL,read_pthread,&c_sockfd);pthread_create(&sendid,NULL,send_pthread,&c_sockfd);}

socket服务器处理数据(串口于此类似处理)

memset(sfinder->command,0,32*sizeof(char));int n_read=read(fd,sfinder->command,sizeof(sfinder->command));if(n_read==0){printf("The client disconnects!\n");close(fd);pthread_exit (NULL);}else if(n_read>0){printf("socket get nuread:%d\ncontext:%s\n",n_read,sfinder->command);devices = strtok(sfinder->command,",");//printf("after(devices):%s\n",devices);order   = strtok(NULL,"\0");//printf("after2(order):%s\n",order);struct Devices *opDevices = finduserwantinlink(devices,front);if(strcmp(devices,"lock")==0){postUrl("/tmp/post.html");}else if(strcmp(devices,"all")== 0){front_socket=front;if(strcmp(order,"O")== 0){while(front_socket!=NULL){front_socket->open(front_socket->pinNumber);front_socket->status=1;front_socket=front_socket->next;}}else if(strcmp(order,"C")== 0){while(front_socket!=NULL){front_socket->close(front_socket->pinNumber);front_socket->status=0;front_socket=front_socket->next;}}}else if(opDevices!=NULL){//printf("operate %s\n",opDevices->deviceName);if(strcmp(order,"O")== 0){opDevices->open(opDevices->pinNumber);opDevices->status = 1;//printf("open %s\n",opDevices->deviceName);}else if(strcmp(order,"C")== 0){opDevices->close(opDevices->pinNumber);opDevices->status = 0;//printf("close %s\n",opDevices->deviceName);}}}

6.关于客户端APP的编写

最开始是用的eclipse进行编写,但是由于遇到问题后,我将工程转移到Android Studio进行编写。APP端最重要的也就是与服务器端的连接,以及服务器端的异常关闭等的处理。因为只是现学现用,所以对此也只是在百度进行了有关异常处理代码的参考。

在对socket的编写完后,记得给APP添加网络权限。

7.总结

后面会考虑加入红外模块的来达到控制家中空调等设备。

温湿度数据采集未实现是因为,用的模块树莓派只有一个串口且已被占用。所以暂未了解怎么去处理接收模块采集的信息。

此次项目涉及到 JAVA APP编写、网络编程、串口通信和C语言的链表、结构体。新学习的知识:curl、openssl、https、http;post请求、get请求。

写此博客仅供参考,若所说有错,还望指正。

基于树莓派实现简易-智能家居相关推荐

  1. 基于51单片机简易智能家居

    基于51单片机的智能家居的设计 前言 一.项目简介 二.开发环境/工具: 1.Keil 5/Keil 4 2.STC-ISP 3.蓝牙串口助手 4.手机app 三.硬件设计: 1.单片机与蓝牙模块连接 ...

  2. 基于树莓派开发的智能家居控制系统

    一.功能介绍 1.通过手机端网络调试助手,语音识别,对灯光,风扇,等电器进行远程控制. 2.通过火焰报警,震动报警,视频监控等功能保证家庭的安全. 3.实时将环境温湿度数据,各种安防信息发送到客户端进 ...

  3. 基于Wio Terminal的简易智能家居中控系统(初代版本)

    经过不断地踩坑(学习),初代的简易智能家居中控系统已经做好了,在申请项目时填写的功能都做出来了,但是有些功能不是用Wio Terminal实现的(一方面是因为代码量太大,会给Wio Terminal的 ...

  4. 基于STM32单片机的智能家居测量系统设计

    当今的家庭生活面临着各种环境和健康问题,周围的生活参数存在潜在的隐患,包括室温.气体中有害物质的浓度等.在新时代,人们越来越关注健康及其相关因素.随着微电子技术的应用,电器的普及,以及单片机和传感器性 ...

  5. ansole终端链接linux,基于Linux系统的智能家居远程控制系统设计论文.doc

    基于Linux系统的智能家居远程控制系统设计论文 学科分类号 0801 北京邮电大学毕业论文 题目 (中文):基于Linux系统的智能家居远程控制系统设计 (英文):The smart home re ...

  6. 基于python的智能安防系统_基于Python语言的智能家居系统研究

    龙源期刊网 http://www.qikan.com.cn 基于 Python 语言的智能家居系统研究 作者:张微微

  7. 基于物联网的新型智能家居控制系统设计

    来自http://www.tiaozhanbei.net/project/8633/ 简介: 本系统是基于物联网的新型智能家居控制系统,系统以提升家居的安全性.便利性.舒适性.艺术性为目的,以智能化. ...

  8. 基于ZigBee技术的智能家居系统实施方案

    智能家居:通常意义上的智能家居是指使用计算机技术.网络技术.综合布线技术.传感器技术和设备自动控制技术建立家庭或楼宇智能化管理平台,通过信息管理平台将与家居生活相关的各种设施管理起来.智能家居信息系统 ...

  9. 基于语音控制的智能家居实现

    前言:因为大三的时候需要交一个物联网通信以及Zigbee的俩门课设,所以花了半天的时间做了一个基于语音控制的智能家居,在这里记录一下以及分享给一些在校学生作为分享,因为那段时间忙着比赛所以花了很短的时 ...

  10. 一、基于wifi控制的智能家居系统之项目简介和设计方案(硬件基于arduino+esp8266,软件Android+Web端+scoket服务器,实现语音控制)

    由于是物联网工程的学生,会一点硬件,会一点Android开发,会一点Web开发,于是乎决定毕设的时候做一个简单一点的毕设,但是能够把所有的知识都应用,串联起来,将所学的知识实践. 一.项目功能介绍 项 ...

最新文章

  1. java中synchronized介绍和用法
  2. Keystone v3 domains 应用场景
  3. zabbix服务器性能监控工具的安装一
  4. [Android工具]更新音乐下载软件,MP3音乐无损音乐下载器
  5. 基于Erlang的并发程序简要
  6. 2020idea创建web项目_Spring Boot + Mybatis 多模块(module)项目的完整搭建教程
  7. failover.mysql_mysqlfailover测试
  8. Android之系统服务-WindowManager
  9. oracle标量子查询的优势,标量子查询
  10. 如何在C++中集成LUA脚本(LuaWrapper For C++篇)
  11. linux下c++版本线程池的实现
  12. matlab两矩阵乘除,MATLAB矩阵乘法
  13. 微信公众号怎么把网页链接地址添加
  14. kali渗透之取得DC-9的root权限
  15. SolveigMM Video Splitter绿色中文版
  16. Chrome调试工具调试CSS
  17. jnz和djnz_【HC89S003F4开发板】 10汇编指令
  18. 论文必备-五大学术文献资料推荐网站+免费下载知网、万方的论文资料
  19. 网易员工入职必学excel课程,妈妈再也不懂担心我做表哥/表姐了!
  20. 打造至臻拍摄体验 vivo X60 Pro+专业影像旗舰发布

热门文章

  1. 天牛群,天牛须结合粒子群算法BAS-PSO。研究生阶段毕生所 学,低价出售!可定制pid参数整定。
  2. 高等数学学习笔记——第八十九讲——高斯公式
  3. H5小游戏开发多少钱
  4. 2022年羊城杯wp
  5. 爬虫--电影天堂案例(二级页面抓取)
  6. 算法分析——算法的渐进效率分析 和 渐进符号大O、大Ω、大θ、小o、小ω
  7. SIM800C EAT开发
  8. Python 把月销售目标按天数分解成日销售目标
  9. 30岁前不必在乎的30件事
  10. php 表情,php emoji表情处理