基于ESP32的家庭智能语音控制系统
2022-05-30尹文博李丹钟昆王宝江
尹文博 李丹 钟昆 王宝江
摘要:针对目前传统的家居控制系统设备不能协同工作以及人机交互性不好等问题,设计了一种基于ESP32的家庭智能语音控制系统。该系统首先通过Wi-Fi连接到互联网进行智能配网的设置;其次,使用MQTT协议进行数据间的传输、使用LVGL设计人机交互界面、用天猫精灵进行语音控制,并接入腾讯云语音平台进行语音合成、DHT11传感器进行温湿度检测;最后,开发微信小程序客户端进行远程控制,并使用Free RTOS系统来运行各个模块,从微信小程序的界面可知,该系统实现了远程控制、定时任务、语音合成、检测家庭状况等功能,同时还有一个人机交互的终端控制设备(基于ESP32 Wi-Fi芯片设计),实现了系统的统一控制,满足了人们对智能家居的需求。
关键词:ESP32;智能语音控制;智能配网;MQTT协议;DHT11
中图分类号:TP18 文献标识码:A
文章编号:1009-3044(2022)21-0067-03
开放科学(资源服务)标识码(OSID):
1 引言
随着科技以及经济的发展,人们对生活质量要求也越来越高,然而智能家居的出现改变了人们的生活方式[1],提升了人们的日常生活水平。智能家居是通过将家庭中的各种电气化等设备连接在一起,实行统一管理的一套智能设备控制体系[2]。目前,华为和小米是国内智能家居做得比较好的,其中小米是基于ARM微处理器,华为是基于Hilink协议+Liteos+芯片IOT三合一[3],据调查,我国的智能家居市场在2018年规模已达到1396亿元[4],2020时的市值达到8000亿元[5],从市场角度来看,智能家居的前景非常好,因此,设计一款智能家居系统具有十分重要的研究意义和研究价值。
近年来,有不少学者提出了不同的智能家居方案,可以满足人们的不同需求,但是为了更好地改善人们的生活,提高信息化家居管理,本文设计了一款基于ESP32的家庭智能语音控制系统,该控制系统支持终端、语音、远程等多种控制方式,并且支持多设备接入,具有良好的应用前景。
2 模块设计
2.1 智能配网的设计
由于系统的远程控制等功能需要连接网络,所以配网环节必不可少,设备初次启动或者无法连接到可用Wi-Fi时,会自动进入配网状态,可以根据屏幕的提示进行配网操作。设备配网首先需要将ESP32设置为AP热点模式,之后用手机连接名为ESP32_WebConfig的热点,连接上热点之后,在浏览器中输入屏幕中的IP地址进入配网页面,然后下拉列表选择Wi-Fi名称后输入密码,点击“提交”即可。如图1、图2所示。
2.2 远程控制的设计
远程控制[6]是一种智能家居的基本控制方式之一,本文采用较为成熟的MQTT协议[4]进行设备间数据传输。首先基于ESP32的控制终端通过Wi-Fi接入互联网,通过订阅App端的主题topic接收来自App端发送的JSON格式的消息。当ESP32接收并解析device_id为对应ESP32端的device_id时,再进行data的解析,解析出command及device_name,command为控制信息,device_name为要控制的设备名称,微信小程序也采用该格式获取温湿度等信息。数据格式如下:
{
“deviced_id”:“1”,
“data”:{
“command”:“OPEN”,
“device_name”:“LIGHT”,
}
}
当设备接收到控制电灯的命令时,能够通过控制继电器来实现控制电灯的开和关。其他设备也采用JSON格式的数据进行传输,这样能让数据格式统一化,便于移植。
2.3 语音控制的设计
本文的智能语音控制[7]是通过天猫精灵、小度、小爱同学进行解析控制的,通过给天猫精灵等智能音箱Oauth授权之后,可以在天猫精灵等音箱中进行设备添加,添加之后进行设备扫描,扫描出已经接入天猫精灵的设备可以由天猫精灵语音控制,流程图如图3所示,其中,实线箭头是响应请求,虚线箭头是发送请求。
2.4 定时任务的设计
系统通过微信小程序发送任务的定时时间以及事件,设备接收并解析定时时间及任务后,设置硬件定时器的数值,到达设定的值后,定时器会产生中断。为了让定时时间精确,所以建议在中断服务函数中尽量不进行其他操作,可以通过设定一个标志位的值,然后判断标志进行开关等操作。
2.5 红外控制空调的设计
各公司空调并未对外开放空调控制的接口,所以系统只能采用最原始的方法,通过类似遥控器的方式去控制空调,首先系统需要使用VS1838B解码并录制自己空調的红外码,然后写入到非易失性存储 (NVS)中,然后需要进行控制时便读取对应区域内的红外空调码并使用红外发射管(可使用共射放大电路进行信号放大)进行发送。图4所示为原理图。
红外编码分为PWM(脉冲宽度调制)以及PPM(脉冲位置调制)。
PWM(脉冲宽度调制):以发射红外载波的占空比来表示数据“0”和“1”。例如常用的电视遥控器,使用NEC协议,数据“0”为载波发射0.56ms,不发射0.56ms;数据“1”为载波发射0.56ms,不发射1.68ms; NEC 格式的编码的引导码为发送载波9ms之后不发送载波4.5ms,使用的载波频率为38kHz[8]。
PPM(脉冲位置调制):以发射载波的位置表示数据“0”和“1”。从发射载波到不发射载波为“0”,从不发射载波到发射载波为“1”。其发射载波和不发射载波的时间都为0.68ms[8]。
红外遥控器的编码格式通常有两种格式:NEC 和RC5,为了方便解码使用IRremote库进行空调解码。IRremote集成了大多数红外协议,所以能够直接对着VS1838B进行红外码的发送,之后通过解码之后写入NVS中即可,需要时直接从对应区域中读取。
2.6 人机交互界面的设计
一个好的控制系统需要有良好的交互系统,而ESP32的RAM只有520k,且其中能够供用户使用的更少,QT等GUI库并不能在ESP32上运行,因此,本系统采用了性能需求较小的LVGL这个GUI库。要使用这个GUI库,首先需要将它移植到ESP32上,之后需要移植输出设备(2.8寸LCD)、输入设备(触摸屏),以及文件系统,图5所示为移植时需要的函数,图6所示为部分GUI图。
2.7 多设备接入和设备在线检测的设计
系统可接入多个控制设备,只需要连接指定MQTT服务器,订阅对应主题topic并且按照前面介绍的JSON格式发送和接收数据,就能够进行设备的接入,同时系统支持设备在线检测,如果设备在10s内并未发送心跳包,则判断为设备故障或者下线,并且发送下线日志,检测设备是否在线的流程图如图7所示。
2.8 语音合成的设计
系统通过接入第三方语音平台进行语音合成,来弥补ESP32的性能不足的缺点。系统接入腾讯云语音平台进行语音合成,然后通过服务器使用UDP协议发送语音文件到终端设备,由于ESP32的RAM较小,一次性无法发送完语音文件,因此,采用分次发送,服务器每次发送1024个字节的数据,其中前24个字节是数据头,后1000字节为有效数据。数据头第一个字节为audio的长度,后面10个字节为audio,第12个字节为send的长度,后4个字节为send,第17个字节为所有文件帧的高8位,第18个字节为所有文件帧的低8位,第19个字节是当前帧的高8位,第20个字节是当前帧的低8位,第21个字节是剩余帧的高8位,第22个字节是剩余帧的低8位,剩余的1000个字节为有效数据,图8所示为数据包格式,图9为语音合成流程。
2.9 温湿度检测的设计
本系统采用带数字信号校准的温湿度传感器DHT11,其传感器有极高的可靠性和稳定性,湿度精度为±5%RH,量程为20%~90%RH,温度精度为±2摄氏度,量程为0~50摄氏度,满足系统的需要,DHT11采用单线串行接口,通讯便捷[9]。DHT11的通讯协议具有严格的时序,主机通过拉低总线18ms,然后再拉高20~40us发起启动信号,然后释放总线,DHT11接收到信号之后DHT11会将总线拉低40~50us响应主机。DHT11响应主机之后会将总线拉高40~50us,并在之后进行数据的传输。DHT11的数据“0”和数据“1”是通过高电平的持续时长来表示的,DHT11先将总线拉低12~14us,之后将会拉高总线,拉高电平时长持续26us~28us时表示数据“0”,持续时间70us为数据“1”,但一般是延时40us之后检测引脚电平来判断数据“0”和“1”。DHT11一次会发送40位数据,也就是5个字节,第1个字节表示8位湿度整数,第2个字节表示8位湿度小数,第3个字节表示8位温度整数,第4个字节为8位温度小数,第5个字节为校验位,当前4个字节的和与第5个字节不相等时,表明数据发送时出错,数据无效。
温湿度检测之后,会通过构造的JSON字符串的格式将数据发送到小程序端,小程序将JSON字符串解析为JSON格式的数据,获取温湿度,并且显示出来,每天会将数据向服务器发送,服务器接收数据并保存,当小程序访问温湿度详情页面时,会向服务器请求之前的温湿度数据,并绘制出表格,并且服务器每天会定时清空之前的数据。
2.10 微信小程序的设计
微信小程序支持远程控制,显示温湿度(24h)、定时任务、录制红外空调码、语音合成(微信小程序端输入提示内容,内容会在终端上音频播放)、输出日志等功能,如图10所示。
2.11 使用实时操作系统(RTOS)运行各个模块
本系统使用了免费开源的Free RTOS系统,Free RTOS是一个小型的实时操作系统内核。作为一个轻量级的操作系统,功能十分强大,其中包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足本系统的需要[10]。系统中包含多个进程,例如GUI界面显示、DHT11温湿度获取、MQTT的网络回调函数、UDP服务等等。网络服务需要较高的优先级,因此,在创建网络服务进程时给予较高的优先级,GUI界面的显示和DHT11温湿度的获取等进程给予较低的优先级,RTOS的任务调度会合理分配CPU资源,保证进程的正常运行。
3 系统的缺点及改进方法
3.1 系统的缺点
系统的缺点首先是无法直接在本机中实现语音识别和语音合成,导致这些功能需要接入第三方服務平台,其次,是系统的安全性,安全方面可以通过对设备间的数据及发送方式进行加密,最后,检测家庭环境情况的传感器太少,需要增加传感器,以便获取更多家庭的信息。
3.2 改进方法
1)更换主控芯片:更换为性能更强的全志H3,系统使用Linux系统,能够实现更多有趣和实用的功能。
2)增加传感器:超声波传感器可以检测人走动,烟雾传感器可以检测火灾情况,增加摄像头,用于家庭监控。
3)数据传输加密:在数据传输过程中,可以采取加密的措施来保证数据的安全性。
4 结束语
本文详细介绍了基于ESP32家庭智能语音控制系统的设计过程,主要包括智能配网模块、远程控制模块、定时模块、人机交互模块、语音合成模块,以及微信小程序的设计等。由结果可知,该系统实现了用语音控制家居设备,并且可以显示温度、湿度、定时、日志等内容,采用本文系统对智能家居进行远程控制,稳定性高且成本低。本文设计的系统进一步改变了人们的生活方式,提升了人们的生活水平,同时对智能家居的控制系统设计具有一定的借鉴意义。
参考文献:
[1] 胡曼冬.基于本体的智能家居关键技术研究[D].青岛:中国海洋大学,2014.
[2] 冯凯,童世华.智能家居的由来及其发展趋势[J].中国新技术新产品,2010(6):7.
[3] 严涵婷,杜选,孙添程,等.基于ESP8266的智能家居系统开发[J].电脑知识与技术,2021,17(27):136-138.
[4] 俞凌丽.基于云平台的智能家居系统设计[D].杭州:浙江工业大学,2020.
[5] 刘振.基于STM32智能家居的无线网关设计与实现[D].杭州:浙江理工大学,2017.
[6] 任远林,徐奇.基于嵌入式单片机的智能家居远程控制系统设计[J].新乡学院学报,2021,38(3):72-76.
[7] 党誉豪,王廷军,张贯尧,等.家用智能语音垃圾箱的设计与应用[J].科技风,2021(12):9-10,26.
[8] 李雪莹.基于单片机的空调红外线编解码系统的设计和实现[D].成都:电子科技大学,2014.
[9] 徐鑫秀,赵士原.基于DHT11传感器的机房温湿度控制系统设计[J].现代信息科技,2020,4(14):57-59.
[10] 赵波.基于STM32和FreeRTOS的温度测量系统设计[J].电子技术与软件工程,2019(3):68-69.
【通联编辑:谢媛媛】