一、项目介绍
该项目主控为树莓派4B开发板,使用 wiringPi 库结合 DHT11 温湿度传感器、火焰传感器、振动传感器、烟雾传感器、蓝牙模块、L298N电机驱动模块、继电器组模块、SU-03T语音模块、CSI 摄像头模块、风扇模块等,可实现语音控制、网络控制、自制蓝牙手机APP或者安卓APP控制继电器状态从而控制灯、风扇、警报器的开关,可以结合 mjpg-streamer 库,CSI 摄像头实现视频监控和通过翔云人工智能开放平台或阿里云进行人脸识别进而通过 PWM 控制舵机旋转模拟开关门状态,当有火花或振动时会触发报警器报警,报警器状态、温湿度采集和通风扇状态可在手机APP上查看。
采用工厂模式,将以上模块分为指令工厂和设备工厂,语音模块通过串口产生的指令和手机 app 通过串口蓝牙或 socket 产生的指令为指令工厂,其余模块为设备工厂,指令工厂和设备工厂分别用单链表进行链接,指令工厂产生指令,树莓派4B收到指令然后通过指令在设备工厂寻找设备从而进行控制。
扩展:后续可以自行增加其他模块和功能,例如红外遥控、人体红外模块、使用OpenCV实现人脸识别、QT上位机控制下位机树莓派、增加MQTT协议等,等暑假有时间我再把扩展功能一起实现呈现给大家。
二、前期准备
1.硬件准备
首先我们需要一块树莓派作为主控,树莓派3B、4B、5B都行,然后需要准备两盒电池和各种各样的模块,下面我列出硬件清单。
硬件清单:
树莓派、CSI 摄像头模块、DHT11 温湿度传感器、火焰传感器、振动传感器、烟雾传感器、蓝牙模块、L298N电机驱动模块、继电器组模块、SU-03T语音模块、风扇模块、sg90舵机、红外遥控、红外模块、oled屏幕、人体红外模块、面包板加电池供电。
2.开发环境
做该项目需要先学习C语言、单片机、linux系统编程、ARM开发、QT等知识。
开发环境主要有:
- ubuntu
- mobaxterm
- 手机APP
- QT上位机(后续扩展)
三、C语言的简单工厂模式
1.工厂模式介绍
工厂模式是最常用的设计模式之一,属于创建型模式,提供一种创建对象的最佳方式。在工厂模式中,创建对象时,不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。即工厂模式把创建对象和使用对象的两个过程分离,对于使用者无需关心对象时如何创建出来的,直接指定一个对象即可使用该对象的方法。
C语言不是一门面向对象的语言,而是一门面向过程的语言,但C语言一样支持面向对象编程,即支持简单工厂模式。
工厂模式就是类的继承,C语言使用函数指针来实现类的继承,工厂中的设备用链表来链接起来。
2.类和对象
- 类:一种用户定义的数据类型,也称类类型,例如结构体。
- 对象:类的一种实例化,例如结构体赋值。
具体介绍可看类和对象详细介绍
3.工厂模式的优缺点
优点
- 在创建对象时,只需要知道对象的名字就行,代码维护性强。
- 需要添加设备时,只需要添加一个对象就行了,代码扩展性。
缺点
- 代码阅读性变复杂。
- 设备增多时会使对象增多,提高了代码复杂度。
四、树莓派的基本使用
1.树莓派刷机和登入
在这里使用的是开发板ssh登入,具体看我之前写过的文章,链接如下:树莓派刷机和登入
2.树莓派WiringPi库介绍
具体看我之前写过的文章,链接如下:树莓派WiringPi库总结
3.树莓派 CSI 摄像头配置
具体看我之前写过的文章,链接如下:树莓派 CSI 摄像头配置
4.树莓派与其他模块接线
下载完 WiringPi 库后输入命令 gpio readall 查看树莓派引脚
具体接线:
- 火焰传感器:GPIO 0
- 烟雾传感器:GPIO 1
- SG90舵机:GPIO 2
- 温湿度传感器:GPIO 7
- OLED模块:SDA连对应SDA、SCL连对应SCL
- 蓝牙模块或者语音模块:Tx连Rx、Rx连Tx
- 继电器组控制四盏灯:GPIO 21-24
- 报警器:GPIO 25
- 风扇模块电机驱动:GPIO 27 28
- 振动传感器:GPIO 29
基于树莓派4B的智能家居系统设计-2
https://developer.aliyun.com/article/1508009?spm=a2c6h.13148508.setting.32.21034f0eZyokqk