概要
本文给大家介绍一个基于N32G4FR和小度音响的智能家庭中枢控制系统项目,该项目是博主架构师李肯参加由国民技术与电子发烧友联合举办的N32 MCU移植挑战赛的参赛项目,旨在解决智能家庭中的中枢控制问题,希望能给大家带来帮助和启发。
1 前言
如今,智能化的设备慢慢走进了千家万户,大大提升了人民生活的智能化,但是随之而来的是各种智能设备无法互联互通,形成了一片片信息孤岛,这就迫切需要一个中枢控制系统来接管这些零散的智能设备。
众观市场上的各种智能音响,小度音响凭借其优异的市场表现,占据了很大一块市场份额,使得“小度小度,现在几度”成为了家庭中很常见的交互问候语。
有这么一个设想,如果能把零散的智能设备,通过某种智能的方式接入一个中枢控制系统,而这个系统与小度音响直接打通,这样跟小度直接对话就能操作这些智能设备,这应该是一件很有市场前景的事,而本项目就是着力于实现这样的一个解决方案。
2 项目简介
2.1 项目名称
基于N32G4FR和小度音响的智能家庭中枢控制系统
2.2 设计思路
本项目主要使用N32G4FR作为端侧的核心控制器,外加一个传感器器件、控制器件,实现与云端互通;同时集成对接小度智能音响,实现通过语音调度和控制家庭环境是智能设备。这里的智能设备包含有智能灯、智能空调、温湿度传感器等等。
2.3 主要解决的问题
家庭中的智能设备越来越多,一个集中式的智能家庭中枢控制系统迫在眉睫,旨在解决所有智能设备的调度和控制问题,为智能生活提供便利。
2.4 项目创新点
主要是设备端各项传感器器件和控制器件的集成,以及与小度音响的直连互通。
2.5 N32移植的初衷
本项目初期是想在ESP32上实现的,后来看到本开源大赛,想着把此方案移植过来,也借此机会再次学习学习国民技术的N32系列芯片。
3 系统架构介绍
3.1 系统核心架构图
整个系统的核心架构图如下所示:
从上面这个核心架构图中,我们可以看到整个IoT系统组成,包括智能设备终端侧、巴法云物联网平台、小度云平台、小度音箱等等。下面就整个系统的几大重要组件,我会一一进行简要讲解。
3.2 终端侧
终端侧主要承载的是对巴法云平台的对接,接收云平台下发的控制指令,同时做一些边缘侧的应用逻辑处理,还需要具备对外网络的通讯能力,保持与巴法云平台的MQTT长链接。
终端侧包括的核心组件有:国民技术的N32G4FR,搭载的是国产实时操作系统 RT-Thread,同时外设板载有 ESP8266 Wi-Fi通讯模组、红外发射器、继电器(GPIO模拟)等等。
终端侧不仅包含设备硬件,还需要对应的固件软件,两者相辅相成,共同完成终端侧的功能逻辑。
3.3 后端侧
后端侧,其实没有真正的开发工作,仅仅是登录巴法云平台后台,配置MQTT板块,然后生成【智能空调】和【智能灯】两个设备,以便于终端侧和小度音响识别。
3.4 移动端
这里说的移动端,特指小度APP;其实这里面也没有开发工作,当你的小度APP账号登录之后,它有一个操作步骤可以加入基于巴法云平台的【智能设备】,按照说明添加成功后,就可以在小度APP上看到巴法云平台对应的设备列表了。
详细的绑定操作步骤,见 此文的第二部分 。
4 系统设计说明
4.1 硬件部分
MCU主控:国民技术的N32G4FR主控
这块芯片整体的资源还是比较丰富的,它是N32G4FR系列(指纹专用型),采用32 bit Arm Cortex-M4F内核,内置10余种密码算法硬件加速引擎,集成大容 量加密Flash存储器,支持指纹信息安全存储,支持市场主流半导体指纹及光学传指纹感器,集成多达18个数字 通讯接口及4个模拟接口。
它的具体接口资源展示如下:
在我的项目中,我主要使用它的以下几个外设资源:
UART1:RT-Thread的终端调试串口;
UART2:用于连接串口WI-Fi模块ESP8266,实现网络通讯能力;
UART4:用于连接红外收发器,本次项目中主要使用其红外发射功能;红外发射主要用于控制外部的空调;
GPIO:PB4用作系统工作状态显示灯,PA8用于控制智能灯开关。
以下是我的实物连接示意图:
Wi-Fi模组:ESP8266
本次参赛,我采用了我惯用的Wi-Fi通讯模组ESP8266,非常的便捷,借助RT-Thread的软件包,基本无需编写任何代码,就可以实现网络能力;当然串口通讯还是需要配置一下,只不过不用谢代码而已。
我这里使用的搭建ESP8266 Wi-Fi芯片的模组ESP-12F,它是由安信可科技开发的,该模块核心处理器 ESP8266 在较小尺寸封装中集成了 业界领先的 Tensilica L106 超低功耗 32 位微型 MCU,带有 16 位精简模式,主频支持 80 MHz 和 160 MHz,支持 RTOS,集成 Wi-Fi MAC/ BB/RF/PA/LNA,板载天线。
红外编解码模块(YS-IRTM)
本模块集成了以下几部分:
红外发射头:用于发射红外信号, 波长为940nm 38k NEC编码信号的发射;
红外接收头:用于接收 NEC 红外信号, 进而单片机进行分析解码操作;
红外头扩展: 该接口为红外发射头的扩展, 可以连接多个红外发射头( 常称红外发射模块) , 用于安放到不同的位置实现多方位控制;
UART 单片机串口通信接口:该端口为单片机串口( TTL) , 作为与外界单片机的通信桥梁, 其默认设置的波特率为9600bps;
使用单片机的串口就可以与之对接,非常的方便。
GPIO控制 :
目前这一块的接入,采用的是GPIO做模拟,并没有实际接入继电器,但已经完全可以实现其操作原理。
其中,PB4用作系统工作状态显示灯,PA8用于控制智能灯开关。
4.2 软件部分
整个软件部分的开发主要就是终端固件开发,主要包括四大部分:N32G4FR的原厂BSP、RT-Thread实时操作系统、ESP8266相关的配置代码使能、个性化的应用逻辑代码。
其中N32G4FR的原厂BSP基本不动,原厂和相关开发者已经适配好了;通用的RT-Thread操作系统的代码也不在此处的修改中,直接复用已有的代码,这里使用的版本是 4.1.1 。
ESP8266相关的AT、网络组件代码也是现成的,使能配置之后就可以直接用了,还是非常的方便。
除了AT相关的软件包代码外,我还使用了 paho-mqtt 这个软件包,这个软件包主要封装了MQTT协议的实现技术细节,开放了一些灵活好用的API给到应用层,以便于提供MQTT的通讯能力。
还有一个cJSON的软件包,这里也使用到了,它用于做一些上下行数据包的解析和封装,主要原因是需要解析一些与云平台对接的数据协议,这就要求终端必须具备解析JSON数据的能力。
所以这里重点讲一下,应用逻辑的代码:主要包括红外收发器的控制、GPIO的控制等,而这些控制信号的输入,都是来源于巴法云平台的下发,而巴法云平台的联动下发则来源于用户对小度音响的语音控制输入。
以下是终端软件应用逻辑部分的层次图:
其中:
Wi-Fi线程 :由于在RT-Thread中AT组件是开启后,默认就跑起来了,而在应用层暂时没有一个比较好的方式感知网络能力的建立,所以这里新建了一个线程,用于实时检查网络通讯能力;当网络通讯能力已建立时,通过信号量的方式,通知其他模块。
Smart Home MQTT线程 :主要负责跟巴法云物联网平台进行对接,采用的MQTT通讯协议,它的运行,依赖于基础网络能力的建立;当它与巴法云物联网平台建立联系时,它就可以接收平台的控制指令下发,比如开关空调或开关照明灯等;
红外接收处理线程 :该线程主要用于接收外部的标准NEC红外信号,此功能本项目暂时未实际使用,仅用于学习若干红外遥控器的键值;
系统运行展示线程 :此线程并没有参与过多的应用逻辑,仅仅是每一秒钟闪烁一下运行指示灯,表示系统正在运行中。
以上各个线程各司其职,相辅相成,共同完成智能家庭中枢控制系统的逻辑功能。
下面展示的是工程项目中的代码结构,里面的代码结构一本与上面的代码逻辑示意图保持一致。
5 项目实施过程
1)熟悉国民技术N32系列MCU的基本开发资料
这一步主要是熟悉开发板的基本资源,对外设等信息有一定的概念,以便于方便后续的开发调试;同时,还需要把相关的一些官方软件给安装好,熟练使用配置工具和下载工具。
文末有好几份我当时参考的教程,基本根据上面的步骤来,很快就可以完成初始的上手操作。
这里其实就是踩坑的开始,详细的可以参见下文对踩坑的各种总结,只有第一步踩坑踩好了,才能逐步进行下面的研发活动。
2)移植RT-Thread操作系统
本次参赛,其实并不要求去移植RT-Thread,其实也要多感谢RT-Thread官方和社区的小伙伴,其实他们都已经做好了基本的移植了,只需要对照着自己的开发板资源跳调整一下即可。
有了上面的踩坑经验,直接上手RT-Thread的DEMO教程,很快就可以把操作系统跑起来了,一切都回归到熟悉的地方,研发进度再次提速。
下面就是基于RT-Thread操作系统进行编程了。
3)配置RT-Thread的软件包
由于我是采用RT-Thread Studio开发环境,而它本身就集成了配置界面,所以我直接在上面就可以做各种配置,需要再次吐槽的就是,配置完了之后生成对应的文件,实在是太慢了。
这个项目中,我使用了paho-matt软件包、AT-device软件包、CJSON软件包;的确让我的项目开发提速了不少。
4)配置巴法云物联网平台
我是参考这个 esp8266接入小度语音,小度音箱控制 来创建自己的自定义产品的,并实现与小度音箱的绑定的。
基本上以上4步完成后,终端就可以很顺利地连上巴法云物联网平台了,而这期间基本就是零代码,全部都归功于RT-Thread灵活的代码配置工具,非常地赞。
5)调试外设驱动
这里主要是调试各种驱动接口,包括红外发射器的UART接口、照明灯开关的GPIO控制。
在调试过程中,一般一个个模块来,避免模块直接的干扰,这样可以有效地加快开发速度。
需要注意的是,N32系列的BSP在适配RT-Thread的时候,采用的都是V1版本的串口驱动,所以大家在使用串口接口的时候,一定要记得使用V1接口。
等到各个功能模块完成后,统一串起来跑一跑,确保没有问题。
6)全功能自测
到了这一步,基本功能开发就已经完成了,需要将终端设备的功能与云端能力联系起来调试,比如对小度音箱进行控制语音输入,看一下巴法云平台能否推送对应的控制消息下来,同时看下终端能否对控制消息进行合理的处理,比如控制空调开关或者控制照明开关等。
7)准备结项资料
项目收尾的最后,需要准备各种结项资料,包括项目稳定、演示视频、各种实物图片等等。
6 项目效果显示
6.1 功能描述
本期项目中,已实现以下功能:
在巴法云后台配置智能设备:智能空调和智能灯,在小度APP是可以看到设备情况;
基于N32G4FR的终端,实现智能家庭中枢控制系统的功能;
跟小度音响语音对话,比如【打开空调】或【关闭空调】,即可实现控制指令下发,终端通过红外发射头控制空调开关;
跟小度音响语音对话,比如【打开灯】或【关闭灯】,即可实现控制指令下发,终端通过GPIO控制LED(模拟真实场景的智能灯)
打通本地空调状态和智能灯状态与巴法云、小度平台的联系,实现实时控制联动。
6.2 图片展示
以下是项目的部分图片展示:
固件正常被识别且烧录成功
调试固件DEMO时,RT-Thread系统上电hello wolrd
查看并确认UART4的真实引脚分布
小度APP使用界面
通过巴法云添加的智能设备在小度APP的展示
一个带红外控制的灯具(模拟家庭使用的空调)
6.3 视频展示
视频中基本演示了,通过小度音箱输入控制指令,进而达到控制终端器件(空调或智能灯)的目的。
6.4 代码开源
本参赛项目的源代码已全面开源在 这里
其中应用部分的代码在:n32-iot-xiaodu-smart-home/tree/master/applications
有关项目源代码的事情,也可与我讨论。
7 项目复盘
项目虽然即便完成了,但是有些东西还是需要好好复盘总结的。
7.1 项目踩的那些坑
这一块还是比较多,我特意开了一个帖子来总结,参加这里:https://bbs.elecfans.com/jishu_2337568_1_1.html
7.2 项目带来的启发
多留意一下同一厂商同一系列不同型号的型号差异,对比出异同点,方便灵活选型,甚至有些时候固件程序都是可以通用的;
巴法云对接小度音响只是它其中的一个功能,它还可以对接天猫精灵、小爱同学、Amazon Alexa、Google音响等等,可以说,把它玩熟练了,智能化的产品思路可能可以有更大的边界;
项目中遇到难题光吐槽是没有用的,还是自己去想办法解决;比如下载方法不清晰,就自己多摸索几遍,熟练掌握它;比如各种开发环境搞不通,尝试想想原来是怎么开发的,或许能找到方法;比如吐槽好些工具不好使,但这个是外部因素,你得去适应它,不然你可能就没法完成任务;
多接触几种物联网云平台有助于开拓技术视野,说不定还能对你的本质工作开展有所帮助和提升。
8 致谢
本次大赛,基本还算是完全独立完成的,技术上没有请教太多小伙伴,就是在FTP资料下载的时候,请教了一个群友,感谢他提供的FTP工具,帮忙我得到了第一手官方权威资料,也使得我的参赛项目得以加速进行,再次表示感谢。
9 参考链接
国民技术N32G4FR简介
国民技术官方FTP资料下载地址 ftp://58.250.18.138
【答疑帖】国民技术开源移植挑战赛答疑汇总
[经验] 【 国民技术N32G4FR开发板试用体验】基于RT-Thread制作N32G4FR BSP
N32G4FR系列通用MCU RT_Thread使用指南
esp8266接入小度语音,小度音箱控制,附开源app控制
巴法云接入文档
巴法云开发者论坛
(参考链接点击阅读原文查看)
10 更多分享
本次项目介绍后,我还继续探索RT-Thread在各种嵌入式平台开发的可能性,并以此来要求自己输出各种关于RT-Thread、嵌入式、物联网等等热门技术话题的原创内容,欢迎大家持续关注我。
我是 架构师李肯 ( 全网同名 ), 2022年电子发烧友论坛优秀开发者、2022年RT-Thread技术社区优秀布道者 ,欢迎大家来交流。
更多热点文章阅读
提示:本文由电子发烧友论坛发布,转载请注明来源。如需社区合作及入群交流,请添加微信EEFans0806,或者发邮箱liuyong@huaqiu.com。
原文标题:基于N32G4FR和小度音响的智能家庭中枢控制系统
文章出处:【微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !