一、项目简介:
基于OrangePi Zero2的智能家居项目是一个集成了多种智能技术和自动化控制的系统,旨在提升家居生活的便利性、舒适性和安全性。
二、项目整体框架:
整个项目开启4个监听线程, 分别是:
语音监听线程:用于监听语音指令, 当有语音指令过来后, 通过消息队列的方式给消息处理线程发
送指令
网络监听线程:用于监听网络指令,当有网络指令过来后, 通过消息队列的方式给消息处理线程发
送指令
火灾检测线程:当存在煤气泄漏或者火灾闲情时, 发送警报指令给消息处理线程
消息监听线程: 用于处理以上3个线程发过来的指令,并根据指令要求配置GPIO引脚状态,OLED
屏显示、语音播报,还有人脸识别开门
上述四个线程采用统一个对外接口接口,同时添加到监听链表中。
统一的监听接口:
统一的设备接口:
二、项目代码如下:
control.h(监听接口)头文件如下:
control.c(监听接口)
gdevice.h(设备节点) 头文件如下:
gdevice.c(设备节点)
uartTool.h文件:
uartTool.h文件:
myoled.h文件:
myoled.c文件:
Makefile:定义了如何编译和链接智能家居项目的源代码,以及如何清理构建过程中产生的文件。通过在命令行中运行make
命令,可以自动执行这些定义好的规则和命令。:
注释如下:
-
CC
:定义了编译器,这里使用的是aarch64-linux-gnu-gcc
,这是一个用于ARM 64位架构的交叉编译器。 -
SRC
:使用find
命令查找src
目录下所有的.c
源文件。 -
INC
:定义了包含头文件(.h)的目录列表,这些目录会在编译时被搜索以找到所需的头文件。 -
OBJ
:将源文件转换为对象文件(.o
),并将其放置在obj
目录下。 -
TARGET
:定义了最终生成的目标文件的名称和位置,这里是obj/smarthome
。 -
CFLAGS
:编译器标志,包括了所有包含目录的路径,用于在编译时指定头文件的搜索路径。 -
LIBS_PATH
:定义了库文件的搜索路径,这些路径会在链接时被搜索以找到所需的库文件。 -
LDFLAGS
:链接器标志,包括了所有库文件路径的列表。 -
LIBS
:定义了在链接时需要链接的库文件列表,例如wiringPi
、python3.10
等。 -
obj/%.o: src/%.c
:这是一个模式规则,用于编译单个源文件并生成对应的对象文件。 -
$(TARGET) : $(OBJ)
:这是一个规则,用于将所有的对象文件链接成最终的可执行文件。 -
compile
:一个伪目标,依赖于$(TARGET)
,用于触发编译和链接过程。 -
clean
:一个伪目标,用于清理构建过程中生成的所有文件,包括目标文件、对象文件和obj
目录。 -
debug
:一个伪目标,用于打印出Makefile中定义的各种变量的值,以便于调试。 -
.PHONY
:声明了clean
和compile
为伪目标,即使在存在同名文件的情况下,这些目标也会被执行。
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屏幕实时显示各设备的状态和信息。