基于OrangePi Zero2 的智能家居的项目

一、项目简介:

基于OrangePi Zero2的智能家居项目是一个集成了多种智能技术和自动化控制的系统,旨在提升家居生活的便利性、舒适性和安全性。

二、项目整体框架:

整个项目开启4个监听线程, 分别是:

语音监听线程:用于监听语音指令, 当有语音指令过来后, 通过消息队列的方式给消息处理线程发
送指令
网络监听线程:用于监听网络指令,当有网络指令过来后, 通过消息队列的方式给消息处理线程发
送指令
火灾检测线程:当存在煤气泄漏或者火灾闲情时, 发送警报指令给消息处理线程
消息监听线程: 用于处理以上3个线程发过来的指令,并根据指令要求配置GPIO引脚状态,OLED
屏显示、语音播报,还有人脸识别开门
上述四个线程采用统一个对外接口接口,同时添加到监听链表中。

统一的监听接口:

统一的设备接口:

二、项目代码如下:

control.h(监听接口)头文件如下:

control.c(监听接口)

 gdevice.h(设备节点) 头文件如下:

gdevice.c(设备节点)       

uartTool.h文件:

uartTool.h文件:

myoled.h文件:

myoled.c文件:

Makefile:定义了如何编译和链接智能家居项目的源代码,以及如何清理构建过程中产生的文件。通过在命令行中运行make命令,可以自动执行这些定义好的规则和命令。

注释如下:

  1. CC:定义了编译器,这里使用的是aarch64-linux-gnu-gcc,这是一个用于ARM 64位架构的交叉编译器。

  2. SRC:使用find命令查找src目录下所有的.c源文件。

  3. INC:定义了包含头文件(.h)的目录列表,这些目录会在编译时被搜索以找到所需的头文件。

  4. OBJ:将源文件转换为对象文件(.o),并将其放置在obj目录下。

  5. TARGET:定义了最终生成的目标文件的名称和位置,这里是obj/smarthome

  6. CFLAGS:编译器标志,包括了所有包含目录的路径,用于在编译时指定头文件的搜索路径。

  7. LIBS_PATH:定义了库文件的搜索路径,这些路径会在链接时被搜索以找到所需的库文件。

  8. LDFLAGS:链接器标志,包括了所有库文件路径的列表。

  9. LIBS:定义了在链接时需要链接的库文件列表,例如wiringPipython3.10等。

  10. obj/%.o: src/%.c:这是一个模式规则,用于编译单个源文件并生成对应的对象文件。

  11. $(TARGET) : $(OBJ):这是一个规则,用于将所有的对象文件链接成最终的可执行文件。

  12. compile:一个伪目标,依赖于$(TARGET),用于触发编译和链接过程。

  13. clean:一个伪目标,用于清理构建过程中生成的所有文件,包括目标文件、对象文件和obj目录。

  14. debug:一个伪目标,用于打印出Makefile中定义的各种变量的值,以便于调试。

  15. .PHONY:声明了cleancompile为伪目标,即使在存在同名文件的情况下,这些目标也会被执行。

msg_queque.h头文件如下:

msg_queque.c(消息队列接口)

 global.h 头文件如下:


voice_interface.h(语音监听接口)

voice_interface.c(语音监听接口)

socket.h (网络监听接口)代码如下

socket_interface.c(网络监听接口)代码如下:

smoke_interface.h (火灾监听接口)代码如下

smoke_interface.c (火灾监听接口)代码如下

lrled_gdevice.h(卧室灯) 代码如下:

lrled_gdevice.c(客厅灯)代码如下:

bled_gdevice.h (客厅灯)代码如下:

bled_gdevice.c(卧室灯)代码如下:

fs_gdevice.h(风扇)代码如下:

fs_gdevice.c(风扇)代码如下:

beep_gdevice.h (蜂鸣器)代码如下:

beep_gdevice.c (蜂鸣器)代码如下:

receive_interface.h(接收消息处理接口)代码

receive_interface.c(接收消息处理接口)代码

face.h文件

face.c文件

face.py文件

main.c

三、项目功能总结:

功能实现:

语音控制:利用SU-03T语音模块获取到UART数据对家庭电器设备进行语音控制,通过系统的TCP服务端监听远程TCP客户端指令控制各类设备。
消息队列: :指令可以通过TCP网络模块的客户端或语音对话发送到消息队列,队列根据指令控制不同设备的开关。
语音监听线程:用于监听语音指令,当有语音指令过来后,通过消息队列的方式给消息处理线程发送指令,消息处理线程接收带指令通过配置GPIO完成各设备的开关动作。
网络监听线程:用于监听网络指令,当有TCP客户端指令过来后, TCP服务端接收接着通过消息队列的方式给消息处理线程发送指令 ,并根据指令要求配置GPIO引脚状态。
火灾监测线程:当存在火灾险情时,发送警报指令给消息处理线程,控制单元会发送一个电信号给蜂鸣器,蜂鸣器工作。
消息监听线程:用于处理以上3个线程发过来的指令,并根据指令要求配置GPIO引脚状态,OLED 屏显示、语音播报,还有人脸识别开门。

人脸识别:后台运行mjpg-streamer应用,通过系统调用命令运行wget命令访问mjpg-streamer的http获取指定路径下图片数据 ,通过文件io获得该图像文件buffer 传入阿里云ocr-python接口 进行人脸识别后返回json数据结果,并格式解析,返回给c程序,通过串口传给语音模块播报人脸识别结果。

用户界面: 通过I2C协议控制OLED屏幕实时显示各设备的状态和信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值