一、硬件选型

1、硬件清单

序号名称型号/作用数量
1STM32单片机正点原子精英板(STM32F103ZET6)1
2温湿度传感器DHT111
3光敏传感器3针制光敏传感器模块1
4空气质量传感器MQ1351
5人体红外传感器微型人体红外感应模块1
6语音识别模块/播报模块LD3320/JQ8900 MP3(可插SD/TF卡)1
7喇叭3W/4Ω1
8继电器1路5V1
9风扇5V供电1
10舵机SG90 9g舵机 90度1
11步进电机28BYJ-481
12电机驱动板ULN20031
13板载LED2
14触摸/显示屏2.8寸 TFT液晶屏LCD(与正点原子精英版匹配)1/1
15WiFi模块esp8266/esp32 nodemcu1/1
16短信模块SIM900A1
17人脸识别模块SIPEED的Maxipy Bit(K210模块,不建议用这个做,性价比不高)1
18杜邦线母对母/公对公/公对母若干
19电源适配器12V 1A1
20USB数据线/STLink/供电/烧录程序/仿真用1

注:以上的硬件选型并不都是最优选,都是笔者根据自己现有的资源和后续购买的硬件配合使用的,读者可根据自己的情况选购。

2、硬件展示(部分)

在这里插入图片描述

注:上图展示的是项目中使用到的部分器件,如TFTLCD、esp32和风扇等是后续添加的,上图并没有显示,并且最后的功能中已不再使用红外遥控还有LCD1602的功能,还有就是上图中的“人体红外传感器”和“光照传感器”的位置弄反了,大家知道就行,哈哈。

二、效果展示

1、整体效果展示

视频效果看这里 :
第一版视频效果展示
第二版视频效果展示
在这里插入图片描述
在这里插入图片描述

2、显示屏(触摸)效果展示

在这里插入图片描述
在这里插入图片描述
本设计中的触摸屏的功能都是笔者完全从0开发的,没有使用lvgl,都是简单的页面切换,图案所有都是通过在阿里巴巴矢量图标库找到适合的图标然后再转化为bmp图片让触摸屏显示的。

三、功能分析

1、系统总体结构框图

系统主要由主控制器、人机交互、设备控制、客户端和各终端节点组成。其中设备控制包括电机控制和触摸屏控制等,客户端为移动手机端,实现系统的远程控制功能。
系统总体结构框图

2、主要包含的功能

本设计主要实现以下功能:
(1)传感器数据采集及显示。
(2)微信小程序远程监测及控制。
(3)TFTLCD触摸屏多功能(七大功能)页面显示及触摸控制。
(4)人脸识别开门,离家模式下人体红外检测及报警。
(5)语音控制及播报、音乐播放、天气预报播报。
(6)根据设定阈值自动报警以及根据光照度自动开关窗帘。
(7)短信警报/语音拨打特定电话
(8)重要变量的掉电保存

四、怎么做?

1、STM32单片机部分

主要使用到了GPIO的输入输出、定时器、PWM、RTC、ADC、IIC、串口通信(中断)等功能。这部分主要使用的是正点原子的例程模板。
STM32负责处理的内容有很多,如传感器数据的采集、家电硬件的控制、触摸屏的控制、与语音(播报)模块/短信模块/esp32/esp8266等的串口通信等,其中触摸屏显示部分又有闹钟、音乐(乞丐版)、设置、家电控制、模式选择、环境数据采集、天气预报等七大功能模块,而音乐播放其实只有播放/暂停/上下首/增减音量的功能,且只能播放SD卡里面指定的歌曲,没有文件读写功能,其实超级垃圾😄,大家看看就好,哈哈~
其中,天气时钟是参考的以下资料:
1、基于STM32的ESP8266天气时钟
2、C语言 | JSON格式天气数据的解析(附详细代码)
3、使用cJSON解析JSON字符串

2、语音识别与播报部分

(1)实现流程简介
语音识别模块使用的是LD3320,例程资料可以去某宝上买该模块的店铺下面找网盘链接进行下载。播报模块使用的是JQ8900(可以插TF卡的那款,这个没有要求,根据自己情况买就行),笔者开发的方法是通过STM32的串口与两个模块进行连接(如使用串口2的RX端连接LD3320的TX,TX端连接JQ8900的RX),LD3320识别语音指令后,通过TX端发送对应的指令给STM32的RX端,然后STM32再根据接收到的指令执行对应的控制,并且通过串口的TX端发送特定的指令控制JQ8900播放已存在TF卡(SD卡)里面对应的语音曲目,这样便实现了语音交互的功能。 详细通信格式可看JQ8900的通信手册(某宝有)。
(2)部分命令展示

LD3320识别指令JQ8900播放的语音
xiao ai(小爱)我在
da kai ke ting deng(打开客厅灯)客厅灯已打开
guan bi ke ting deng(关闭客厅灯)客厅灯已关闭
zhi ma kai men(芝麻开门)门已打开
kai chuang(开窗)窗已打开
jie shao yi xia ni zi ji(介绍一下你自己)你好,我叫小爱,…
da dian hua gei***(打电话给***)好的

需要注意的是,这些指令都是需要提前设置好的,并不是真正的AI识别,并且播放的语音要通过语音合成器提前转换好并存入SD卡中(要插入JQ8900)。

3、微信小程序开发部分

小程序开发可以看这个B站UP主的视频学习哦,参考学习资料:stm32+esp8266+小程序智能家居毕设
下面这个是有大佬学习之后做的笔记,大家可以参考一下,应该可以少走很多弯路,这也是笔者做完之后才发现的:
大佬整理的stm32+esp8266+小程序智能家居毕设笔记
本设计是经过扩展了的哦,除了小程序是参考的视频,其他很多设计都是自己开发的哦。
小程序的设计主要由3部分组成,分别为天气显示、环境监测、命令下发。天气数据主要通过调用知心天气的API接口获取;环境监测部分显示的数据主要由STM32单片机通过MQTT协议上传;命令下发由小程序通过MQTT协议下发给STM32单片机,单片机再根据接收到的命令控制执行对应的操作。

在这里插入图片描述
可能需要用到的网站:
1、阿里巴巴矢量图标库
2、vue安装网站
3、阿里云镜像
4、mpvue安装

4、人脸识别开发部分

人脸识别使用的是Maix Bit开发板(K210模块),这个模块功能很强大,可以跑机器视觉和神经网络等算法,因为笔者想要实现一个人脸识别开关门的功能,所以就随便买了这个模块,但只是会用一点,主要是通过修改和烧录官网的人脸识别程序即可,通过串口与STM32通信,若人脸识别成功则通过K210的串口TX引脚发送指定命令给单片机,从而让单片机控制舵机(模拟窗户)的开关。但不推荐大家使用这个模块来实现人脸识别的功能,因为性价比不高,这里推荐大家使用esp32 cam来实现,该模块性价比更高,使用Arduino环境开发,会更加的简单(虽然我没做)😄。
但如果你想玩k210的人脸识别的话,可以参考这个网站Maxipy人脸识别文档

下面是人脸识别成功的情况,识别成功后绿灯会亮,并且显示已录入的人脸信息,如果识别失败则红灯亮,且显示“X”(未知人脸)
在这里插入图片描述
内容大概就是这几大方面,因为项目比较大,所以只能简略的介绍一下,大家可以参考一下,目前项目还有不少的BUG,但笔者不打算完善了,因为有更重要的事做~

五、还可以怎么完善?

1、增加视频监控功能,推荐使用esp32 cam。
2、语音播报可以把JQ8900改为SYN6288(这个笔者没有用过),SYN****是一款TTS文字转语音模块,在播报方面会更加的灵活。
3、移植lvgl,显示的内容更加丰富。
4、绘制电路板,将硬件焊接在一起。
5、基于freeRTOS等操作系统开发等等…

六、总结

总体来说,本设计实现的功能主要是对家居的控制,有本地控制、远程控制和语音控制,整体上实现了一个功能较杂的智能家居系统(基于裸板开发的),但该系统整体上还有很多内容需要优化,也还存在一定的BUG,所以大家在参考的时候可以带有辩证的眼光去看待,希望不要被我带偏了😄

这是笔者第一次写博客,如果写得不好请见谅哈!都看到这里了,各位大佬难道不给笔者点个赞再走嘛~~~

Logo

助力合肥开发者学习交流的技术社区,不定期举办线上线下活动,欢迎大家的加入

更多推荐