我是靠谱客的博主 复杂麦片,最近开发中收集的这篇文章主要介绍基于树莓派的智能家居开发项目总结一、项目简单总结下二、代码实现1.主函数mainPro.c2.控制设备的头文件inputCommand.h3.外接设备的头文件controlDevices.h4.服务器sockeContrl.c5.语音模块voiceContrl.c6.餐厅灯livingroomLight.c7.二楼灯upstairLight.c8.浴室灯bathroomLight.c9.泳池灯swimmingpoolLight.c10.摄像头camera.c11.门锁lock.c12.火焰传感器,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
目录
- 一、项目简单总结下
- 二、代码实现
- 1.主函数mainPro.c
- 2.控制设备的头文件inputCommand.h
- 3.外接设备的头文件controlDevices.h
- 4.服务器sockeContrl.c
- 5.语音模块voiceContrl.c
- 6.餐厅灯livingroomLight.c
- 7.二楼灯upstairLight.c
- 8.浴室灯bathroomLight.c
- 9.泳池灯swimmingpoolLight.c
- 10.摄像头camera.c
- 11.门锁lock.c
- 12.火焰传感器fire.c
- 13.震动传感器shake.c
- 14.蜂鸣器buzzer.c
- 15.视频监控脚本start_web_video.sh
一、项目简单总结下
1、项目实现的功能:
可以通过手机APP和语音控制家电,支持人脸识别开锁,视频监控防盗,以及内设有防火、防震警报。功能比较简单,因为某些模块的缺失,没有做的那么精致。还一个原因就是因为懒。。。
2、用到的模块:
这是一个简单的智能家居项目,主控芯片是树莓派3B-cortexA53,其它则是一些外设小芯片。有语音识别模块、摄像头、5V低电平触发继电器、继电器组合4只、电磁锁、微型震动传感器、火焰传感器、蜂鸣器、4只小型led灯。。。wemosD1和433M射频和红外编解码模块没用上。
树莓派与wemosD1网络通信参考博文点击这里
433M射频博文参考点击这里
红外编解码模块参考博文点击这里
其他的怎么接线我就不说了,可以自己去查。有实力可以玩玩家里的220V家电,不过要注意用电安全。
3、存在的疑点:
第一个:调用视频监控的时候,网页查看能显示视频监控。但是app的视频监控区显示不出来,说是版本太旧,还要自己去修改一下。
第二个:因为全部都是使用线程,当程序运行启动的时候,所有的线程都会去争夺资源运行。在这里每个线程都可以尝试加一个线程锁。但是当人脸识别线程启动的时候它就会先进行一次拍照然后实现人脸识别开锁功能,感觉这样太浪费了资源了。能不能像在小区门口一样的人脸识别开锁一样,它是人脸识别程序一直在运行,当捕捉到人脸的时候再识别进行开锁。不像自己写的这种还要拍照再进行识别比对开锁功能,有时候拍的照片还识别不出来。
后面有时间再修改下。
二、代码实现
1.主函数mainPro.c
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<fcntl.h>
#include<pthread.h>
#include<unistd.h>
#include <netinet/in.h>
#include"controlDevices.h"
#include"inputCommand.h"
//全局变量,用到线程不要轻易去传参
struct InputCommander *pcommandHead = NULL;
struct Devices *pdeviceHead = NULL;
struct InputCommander *socketHandler = NULL;
int c_fd;
pthread_mutex_t mutex;//定义互斥锁
pthread_t voiceThread;//语音线程
pthread_t socketThread;//服务器线程
pthread_t cameraThread;//人脸识别线程
pthread_t fireThread;//火灾线程
pthread_t shakeThread;//震动线程
pthread_t monitoringThread;//视频监控线程
//摄像头相关,改变返回值命名,因为C语言中没有这样的返回值
#define true 1
#define false 0
typedef unsigned int bool;
char buf[1024] = {'