【ra4m2设计挑战赛】基于ra4m2和阿里云物联网平台的智能卧室小管家
文章目录
1 前言
在2022年末,由电子发烧友和瑞赛mcu联合发起了一个课外设计大赛:【社区大赛】瑞萨ra4m2(cortex-m33内核mcu)物联网网关设计挑战赛
本活动是一个为期2个月的ra4m2开发板实战项目挑战赛,以“课程学习+实践挑战”方式,带领开发者了解瑞萨arm内核mcu,设计完整项目,提升实践动手能力。
而我作为一个混迹在嵌入式物联网多年的开发工程师,自然不会放过这样一次跟业内顶尖高手过招的机会,于是我很激动得填下了我的报名信息,洋洋洒洒写了上千字的项目介绍,顺理成章地拿下了参赛资格。
以下是我在本次项目活动中的结项报告,欢迎各位老师、同行点评指导。
2 项目简介
关于项目前期的规划,我还是做了一些功课的,但是由于投入时间的关系,下文提及的部分功能并未完全实现。
2.1 项目名称
基于ra4m2和阿里云物联网平台的智能卧室小管家
2.2 设计思路
本项目主要使用瑞萨的r7fa4m2ad3cfp作为端侧的核心控制器,实现一个物联网网关,网关外围接入多种传感器器件和控制器件,通过wi-fi模组实现与云端的阿里云生活物联网平台互通。这个项目中,定位的应用场景是在智能卧室内,所以接入的传感器有包括声控传感器、温湿度传感器、睡眠灯带等,接入的控制设备包括加湿器、智能空调、智能灯等。在其他功能上,还可以通过oled等显示屏器件,显示一些核心信息,同时与手机app的互联互通也增加了“智能”的可玩性和实用性。总的来说,这个智能卧室小管家可以在一定程度上承担卧室的管家功能,释放人类,享受智能生活。
2.3 主要解决的问题
在智能家居中,大部分人都集中在关注客厅的智能化,而忽略了卧室的智能化。作为人一天中可能待时间最长的卧室,它的智能化需求更多是与人的健康、睡眠、安全等核心问题挂钩,一个优秀的智能卧室小管家恰好可以很好地弥补这方面的空缺,比如提供睡眠期间的温湿度检测,打通与智能空调、加湿器的智能化联动,这就可以很好地解决睡眠环境问题。另一方面,像接入智能睡眠带,也可以很好地为个体的睡眠质量提供一定的数据参考,方便人们改善睡眠质量。
2.4 项目创新点
1)阿里云生活物联网平台自定义创建智能卧室小管家;
2)各种传感器器件和控制器件的接入,这里可能接入的是非智能设备,还需要考虑他们的互联互通问题,涉及一个协议的定义和转换;
3)端侧联动操作的智能化逻辑,直接决定了智能小管家的实用性。
3 系统架构介绍
3.1 系统核心架构图
整个系统的核心架构图如下所示:
从上面这个核心架构图中,我们可以看到整个iot系统组成,包括智能设备终端侧、阿里云物联网平台。下面就整个系统的几大重要组件,我会一一进行简要讲解。
3.2 终端侧
终端侧主要承载的是智能卧室环境的检测,同时做一些边缘侧的应用逻辑处理,还需要具备对外网络的通讯能力,能在第一时间把紧要消息通过网络通道传输出去。
终端侧包括的核心组件有:瑞萨的r7fa4m2ad3cfp(ra4m2),搭载的是国产实时操作系统 rt-thread,同时外设板载有 esp8266 wi-fi通讯模组、红外发射器、继电器(gpio模拟)、oled显示屏、等等。
终端侧不仅包含设备硬件,还需要对应的固件软件,两者相辅相成,共同完成终端侧的功能逻辑。
3.3 后端侧
这里提及的后端,一般指的是阿里云物联网平台。
阿里云的物联网平台,在国内来说,还是走得比较靠前的,它可以接入非常多样化的智能设备,同时在物联网设备数据物模型这一块,也有比较完备的设计,各大方案厂商和设备终端厂商都比较愿意接入阿里云物联网平台。
而本次大赛的要求本身就是建议接入阿里云物联网平台,于是我在阿里云物联网平台创建了我的智能卧室小管家,并添加了若干属性(数据模型),以下便是一个参考,后文会详细介绍一下如何创建此类自定义产品。
4 系统设计说明
下面就系统的各个组件的设计,做简要的说明。
4.1 硬件部分
硬件部分主要分为四大部分:mcu主控、wi-fi模组、各类传感器、输出设备。
- mcu主控:瑞萨的r7fa4m2ad3cfp(ra4m2)
瑞萨电子 ra4m2 32 位微控制器 (mcu) 产品群使用支持 trustzone 的高性能 arm® cortex®-m33 内核。 与片内的 secure crypto engine (sce) 配合使用,可实现安全芯片的功能。 ra4m2 采用高效的 40nm 工艺,由灵活配置软件包 (fsp) 这个开放且灵活的生态系统概念提供支持,fsp 基于 freertos 构建,并能够进行扩展,以使用其他实时操作系统 (rtos) 和中间件。 ra4m2 适用于物联网应用的需求, 如多样化的通信功能、面向未来应用的安全功能、大容量嵌入式 ram 和较低的运行功耗(从闪存运行 coremark® 算法时功耗低至 81µa/mhz)。
以下是它的资源图介绍:
在我的项目中,我主要使用它的以下几个外设资源:
1)uart1:rt-thread的终端调试串口;
2)uart4:用于连接串口wi-fi模块esp8266,实现网络通讯能力;
3)uart9:用于连接红外收发器,本次项目中主要使用其红外发射功能;红外发射主要用于控制外部的空调;
4)i2c2:用于连接oled显示屏,实现部分信息的展示;
5)i2c3:用于连接温湿度传感器,型号为aht25,一款高精度的温湿度传感器,见下文介绍;
6)gpio:gpio404用作系统工作状态显示灯,gpio407用于控制卧室灯开关。
以下是我的实物连接示意图:
- wi-fi模组:esp8266
本次参赛,我并没有采用官方推荐的wi-fi模块,而是采用了我惯用的wi-fi通讯模组esp8266,原因无它,就是担心踩坑,影响了比赛进度,而使用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;
使用单片机的串口就可以与之对接,非常的方便。
- oled显示屏(ssd1306)
本次参赛使用的是基于ssd1306控制芯片的oled显示屏,尺寸是0.96‘,分辨率是128*64,它的控制协议采用的是4线i2c协议。在实现对接的过程中,既可以使用硬件i2c,也可以采用gpio模拟成软件i2c去对接。
以下是该显示屏的实物图:
- 温湿度传感器(aht25)
本次参赛聚焦与卧室环境,需要用的一个温湿度传感器,这里我依然没有采用官方推荐的温湿度传感器,还是使用了一块,我已经比较熟练使用的温湿度传感器aht25,它与常见的aht20温湿度传感器属于同一个系列,在编程代码上基本是可以公用的。最棒的是,官方已提供成熟的示例代码,开发者仅需要花小量的时间,即可很快完成调试对接。
以下是它的实物图:
- gpio控制:
目前这一块的接入,采用的是gpio做模拟,并没有实际接入继电器,但已经完全可以实现其操作原理。
其中,gpio404用作系统工作状态显示灯,gpio407用于控制卧室灯开关。
4.2 软件部分
整个软件部分的开发主要就是终端固件开发,主要包括四大部分:ra4m2的原厂bsp、rt-thread实时操作系统、esp8266相关的配置代码使能、个性化的应用逻辑代码。
其中ra4m2的原厂bsp基本不动,原厂和相关开发者已经适配好了;通用的rt-thread操作系统的代码也不在此处的修改中,直接复用已有的代码,这里使用的版本是 4.1.1 。
esp8266相关的at、网络组件代码也是现成的,使能配置之后就可以直接用了,还是非常的方便。
除了at相关的软件包代码外,我还使用了 ali-iotkit-v3.0.1 这个软件包,这个软件包主要集成了对接阿里云物联网的技术细节。
还有一个cjson的软件包,这里也使用到了,它用于做一些上下行数据包的解析和封装,主要原因是对接阿里云物联网平台使用的alink json的数据协议,这就要求终端必须具备解析json数据的能力。
所以这里重点讲一下,应用逻辑的代码:主要包括温湿度传感器的操作、红外收发器的控制、oled屏的显示、gpio的控制等。
以下是终端软件应用逻辑部分的层次图:
其中:
wi-fi线程:由于在rt-thread中at组件是开启后,默认就跑起来了,而在应用层暂时没有一个比较好的方式感知网络能力的建立,所以这里新建了一个线程,用于实时检查网络通讯能力;当网络通讯能力已建立时,通过信号量的方式,通知其他模块。
aliyun mqtt线程:主要负责跟阿里云物联网平台进行对接,采用的mqtt通讯协议,它的运行,依赖于基础网络能力的建立;当它与阿里云物联网平台建立联系时,它就可以接收平台的控制指令下发,比如开关空调或开关照明灯等;
oled显示线程:此线程用于更新显示智能卧室的相关数据信息,包括:空调的开关状态、照明灯的开关状态、卧室的温湿度等;这些信息的更新频次大概1秒钟更新一次;
smart智能卧室线程:该线程主要维护整个智能卧室的逻辑,包括定时更新温湿度值、定时上报最新数据到阿里云物联网平台;
红外接收处理线程:该线程主要用于接收外部的标准nec红外信号,此功能本项目暂时未实际使用,仅用于学习若干红外遥控器的键值;
系统运行展示线程:此线程并没有参与过多的应用逻辑,仅仅是每一秒钟闪烁一下运行指示灯,表示系统正在运行中。
以上各个线程各司其职,相辅相成,共同完成智能卧室小管家的逻辑功能。
下面展示的是工程项目中的代码结构,我在rt-thread适配ra4m2的基础上,新增了一个app目录用于存放我自己的应用工程代码,里面的代码结构一本与上面的代码逻辑示意图保持一致。
5 项目实施过程
1)熟悉ra4m2的基本开发资料
这一步主要是熟悉开发板的基本资源,对外设等信息有一定的概念,以便于方便后续的开发调试;同时,还需要把相关的一些官方软件给安装好,熟练使用配置工具和下载工具。
文末有好几份我当时参考的教程,基本根据上面的步骤来,很快就可以完成初始的上手操作。
2)移植rt-thread操作系统
本次参赛,我并不打算使用官方推荐的freertos,而是想采用我熟悉的rt-thread操作系统,一来是我比较熟悉使用rt-thread,二来rt-thread有非常丰富和成熟的软件包,包括网络通讯、iot云对接这块都比较多参考,所以能够很快就构建起demo应用。
移植rt-thread这块,其实也要多感谢rt-thread官方和社区的小伙伴,其实他们都已经做好了基本的移植了,只需要对照着自己的开发板资源跳转一下即可。
我主要是参考小伙伴的动手教程(见文末的参考链接),最后被串口输出卡壳了一晚上,然后发现了一个问题,冤死了。后面的项目复盘会提到,顺利的话,完成这一步,基本的操作系统能力就已经建立了,下面就是基于rt-thread操作系统进行编程了。
3)配置rt-thread的软件包
这里主要利用rt-thread的配置工具env,然后使用menuconfig来配置各种软件包,在线拉取,这个项目中,我使用了aliyun-iotkit软件包、at-device软件包、cjson软件包;的确让我的项目开发提速了不少。
4)配置阿里云物联网平台
我是参考这个 来创建自己的自定义产品的,很快就上手,最重要的是,创建完产品和设备之后,把相关的三元组信息拿到,然后填充到aliyun-iotkit软件包中,就可以很快连接上阿里云。
基本上以上4步完成后,终端就可以很顺利地连上阿里云物联网平台了,而这期间基本就是零代码,全部都归功于rt-thread灵活的代码配置工具,非常地赞。
为了契合本次参赛项目,我在创建的产品中,增加了相关的数据熟悉,分别是:空调开关状态、照明灯开关状态、温湿度等。
5)调试外设驱动
这里主要是调试各种驱动接口,包括红外发射器的uart接口、oled显示的i2c接口、温湿度传感器的i2c接口、照明灯开关的gpio控制。
在调试过程中,一般一个个模块来,避免模块直接的干扰,这样可以有效地加快开发速度。
等到各个功能模块完成后,统一串起来跑一跑,确保没有问题。
6)全功能自测
到了这一步,基本功能开发就已经完成了,需要将终端设备的功能与云端能力联系起来调试,比如终端上报的数据能够在云端展示、云端发起的控制指令,能否在终端得到响应等等。
7)准备结项资料
项目收尾的最后,需要准备各种结项资料,包括项目稳定、演示视频、各种实物图片等等。
6 项目效果显示
6.1 功能描述
本期项目中,已实现以下功能:
-
定时采集更新卧室温湿度数据,并通过oled更新显示,同时上报到阿里云物联网平台;
-
定时更新oled显示内容,包括空调开关状态、照明灯开关状态、卧室温湿度值等;
-
系统运行指示灯,每秒钟闪烁一次;
-
开机自识别接入wi-fi网络,并在判断网络状态ok后,通过mqtt的形式自动接入阿里云物联网平台;
-
在阿里云物联网平台,可以在线调试,下发控制空调开关或照明灯开关等控制指令;
-
在阿里云物联网平台,可以展示空调开关状态、照明灯开关状态、卧室温湿度等信息;
6.2 图片展示
以下是项目的部分图片展示:
-
开发板时钟配置的问题,导致的乱码
-
rt-thread跑起来的瞬间
-
零代码上阿里云
-
上报数据到物联网平台
- 收到云端下发控制指令
- 中文显示的汉字字模提取
-
阿里云物联网平台设备数据展示
-
终端oled显示
6.3 视频展示
视频展示部分,已更新,见硬声平台,戳这里
6.4 代码开源
本参赛项目的源代码已全面开源在 这里
其中应用部分的代码在 ra4m2-rt-thread/tree/master/bsp/renesas/ra4m2-eco
有关项目源代码的事情,也可与我讨论。
7 项目复盘
项目虽然即便完成了,但是有些东西还是需要好好复盘总结的。
7.1 项目踩的那些坑
- 第一坑,必须留个这个开发板的外部晶振时钟:我一开始参考的是之前的一些测评帖子,按照他们的教程来,一步步走下来,rt-thread是跑起来了,但是console输出确实乱码的,然后看了一下主线程的log打印,本来是一秒钟打印一次的,结果我这跑出来是2秒钟打印一次。于是多次请教大佬,才了解清楚,本次大赛的板子,外部晶振时 12mhz的,而之前测评活动的外部晶振时 24mhz,这个真的是第一个大坑,谁知道外部长得一样的板子,居然换了个晶振!于是改成12mhz的晶振后,一切正常。
- 瑞赛的fsp智能配置工具使用不熟,对立面的配置流程有些茫然,比如在配置硬件i2c的时候,一开始压根不知道那里还可以配置从设备地址,老是以为接口代码里面传入,结果死活出不来数据,差点都怀疑人生了;
- 管脚复用的问题一定要小心,好多外设都是复用的,比如i2c和uart,一定要注意区分;同时,选引脚的时候也要留意,跟自己的开发板要一一对应,不然即便软件代码没问题,功能依然跑不出来;
- 开发板的usb口,一开始电脑死活出不来com口,更新驱动,重启电脑都试了,没用;最后发现我可能用了一个只能充电的数据线导致的,换了一个手机传输数据的type-c数据线后,com口终于出来了。
7.2 项目带来的启发
-
项目还是要赶早规划和实施,越往后推压力越大,除非你想要项目摆烂;
-
遇到卡壳的问题,及时寻找帮助,要不找原厂的技术支持,要不找参赛的小伙伴,一般的技术问题大家都和乐意为你解答;你自个瞎折腾一晚上的问题,可能别人一两句话就点通你了;
-
评估工作量时,尽快多留一手,看似简单的功能,哪怕你已经在别的平台实现过,也可能还要再踩坑一次;
-
写应用代码的时候,多多考虑代码的可移植性;本次项目我复用了之前在c51上面写的i2c驱动oled的代码,之前是软件i2c,这次切换到硬件i2c,适配一下接口后,应用逻辑代码基本不用动,非常地丝滑;
-
纸上得来终觉浅,绝知此事要躬行;多上手,多总结;看10篇别人的教程,不如自己整一遍来得快,这次我就吃了这个亏,希望后续多多吸取教训。
7.3 项目的todolist
鉴于项目时间的关系,本项目中海油一些比较好的功能想法并没有去实现,后续有时间,可以考虑把它完善了。
- ota升级的问题:本身阿里云物联网平台是支持ota升级的,这块可以调试一下,问题不大;
- usb本地升级的问题:需要研究一下这块升级的逻辑,还好论坛中已有小伙伴实践出来了;
- 智能卧室本地化智能逻辑:这里其实是一些智能化场景的丰富问题,比如温湿度值与空调的联动就是比较简单的一个逻辑,在后续的迭代中,可以多多加入一些这样的本地化智能逻辑;
- 智能卧室传感器中引入睡眠检测:其实这个也是我本身这次参赛很想做的一个功能,但是由于没有预留充足的预研时间,传感器没有选好型,一直被拖住了;后续有机会我一定要把这个功能加上;等到它加入的那一天,智能卧室小管家的商用价值可能就提升不少了。
归根结底,还是时间花得太少了,后面的项目都要吸取此类教训。
8 致谢
这个项目前前后后地折腾了一段时间,踉踉跄跄地也算是交差了,这期间还是要感谢几位大佬的支持与帮助,可以说没有你们的输入,可能我都不能完成这个项目了。以下是详细的致谢名单,排名不分前后:
再次感谢大家,今后多向各位大佬学习。
9 参考链接
在整个项目开发过程中,参考了一些有用的文章或教程,特在此罗列,以表感谢:
10 更多分享
本次项目介绍后,我还继续探索rt-thread在各种嵌入式平台开发的可能性,并以此来要求自己输出各种关于rt-thread、嵌入式、物联网等等热门技术话题的原创内容,欢迎大家持续关注我。
我是 架构师李肯 (全网同名),2022年电子发烧友论坛优秀开发者、2022年rt-thread技术社区优秀布道者、csdn博客专家,欢迎大家来交流。
11 文末福利
为感谢粉丝朋友的大力支持,特在本文文末为广大粉丝朋友送上福利:《深度学习嵌入式应用开发:基于rk3399pro和rk3588》 全新图书包邮赠送5本。
详细的赠书活动细节,请 关注我的 社区赠书活动,或者 点击文章下方 的【微信公众号名片】,手动关注并回复【嵌入式】了解一下吧。
发表评论