当前位置:   article > 正文

基于树莓派实现 --- 智能家居_基于树莓派的智能家居设计

基于树莓派的智能家居设计

最效果展示

演示视频链接:基于树莓派实现的智能家居_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1Tr421n7BM/?spm_id_from=333.999.0.0

PS:房屋模型的搭建是靠纸板箱和淘宝买的家居模型,户型参考了留学时短租的公寓~) 

前言

到目前为止,对于linux的嵌入式软件开发,从底层到上层都有了一定的认识。这个项目的初衷就是整合知识并以工厂模式的架构开发项目。

功能实现

  1. 实现了socket服务器远程控制卧室,餐厅,厕所,客厅4盏灯的开启和关闭
  2. 实现了语音控制卧室,餐厅,厕所,客厅4盏灯的开启和关闭
  3. 实现了当温度超过阈值的时候进行火灾报警,并且可以语音关闭警报
  4. 实现了进门前结合语音,OLED和摄像头的人脸识别
  5. 实现了实时的远程视频监控
  6. 实现OLED屏幕的实时温湿度显示

开发环境 & 实现思路

  • 开发板:树莓派3B+
  • 开发语言:C
  • 编程工具:Source Insight 3

工厂设计

对于这个项目的实现,采用上节学到的工厂模式来设计,从而提升整体代码的稳定性和可拓展性。

软件设计模式 --- 类,对象和工厂模式的引入-CSDN博客

 阅读功能需求后,结合工厂模式的思路可以先设计两个工厂:指令工厂设备工厂

  • 指令工厂:存储需要使用到的指令
  • 设备工厂:存储需要使用到的设备

工厂模式的主要的考量有两点:

1. 工厂的类
  1. struct device //设备工厂
  2. {
  3. char device_name[64]; //设备名称
  4. int status;
  5. int (*init)(); //初始化函数
  6. int (*open)(); //打开设备的函数
  7. int (*close)(); //关闭设备的函数
  8. int (*read_status)(); //查看设备状态的函数
  9. struct device *next;
  10. };
  11. struct cmd //指令工厂
  12. {
  13. char cmd_name[64]; //指令名称
  14. //char cmd_log[1024]; //指令日志
  15. int (*init)(int port, char *IP, char *UART, int BAUD); //初始化函数
  16. int (*accept)(int fd); //接受函数
  17. int (*cmd_handler)(struct device *phead, int fd); //处理指令的函数
  18. struct cmd *next;
  19. };
2. 工厂的对象

实现思路Q&A

Q:如何实现socket服务器的远程控制?

A:使用之前学习的socket知识,创建一个服务端一个客户端,服务端负责创建套接字并绑定,然后阻塞监听;客户端负责建立连接后发送指令。指令在服务端通过指令工厂中socket对象的cmd_handler函数进行分析并作出相关动作。最后在main函数中使用一个线程不断阻塞等待新客户端的加入;使用另一个线程不断阻塞接受客户端传来的指令并分析。

参考我之前的博文:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/466582
推荐阅读
相关标签