61人参与 • 2024-08-06 • 嵌入式
【ra4m2设计挑战赛】基于ra4m2和阿里云物联网平台的智能卧室小管家
在2022年末,由电子发烧友和瑞赛mcu联合发起了一个课外设计大赛:【社区大赛】瑞萨ra4m2(cortex-m33内核mcu)物联网网关设计挑战赛
本活动是一个为期2个月的ra4m2开发板实战项目挑战赛,以“课程学习+实践挑战”方式,带领开发者了解瑞萨arm内核mcu,设计完整项目,提升实践动手能力。
而我作为一个混迹在嵌入式物联网多年的开发工程师,自然不会放过这样一次跟业内顶尖高手过招的机会,于是我很激动得填下了我的报名信息,洋洋洒洒写了上千字的项目介绍,顺理成章地拿下了参赛资格。
以下是我在本次项目活动中的结项报告,欢迎各位老师、同行点评指导。
关于项目前期的规划,我还是做了一些功课的,但是由于投入时间的关系,下文提及的部分功能并未完全实现。
基于ra4m2和阿里云物联网平台的智能卧室小管家
本项目主要使用瑞萨的r7fa4m2ad3cfp作为端侧的核心控制器,实现一个物联网网关,网关外围接入多种传感器器件和控制器件,通过wi-fi模组实现与云端的阿里云生活物联网平台互通。这个项目中,定位的应用场景是在智能卧室内,所以接入的传感器有包括声控传感器、温湿度传感器、睡眠灯带等,接入的控制设备包括加湿器、智能空调、智能灯等。在其他功能上,还可以通过oled等显示屏器件,显示一些核心信息,同时与手机app的互联互通也增加了“智能”的可玩性和实用性。总的来说,这个智能卧室小管家可以在一定程度上承担卧室的管家功能,释放人类,享受智能生活。
在智能家居中,大部分人都集中在关注客厅的智能化,而忽略了卧室的智能化。作为人一天中可能待时间最长的卧室,它的智能化需求更多是与人的健康、睡眠、安全等核心问题挂钩,一个优秀的智能卧室小管家恰好可以很好地弥补这方面的空缺,比如提供睡眠期间的温湿度检测,打通与智能空调、加湿器的智能化联动,这就可以很好地解决睡眠环境问题。另一方面,像接入智能睡眠带,也可以很好地为个体的睡眠质量提供一定的数据参考,方便人们改善睡眠质量。
1)阿里云生活物联网平台自定义创建智能卧室小管家;
2)各种传感器器件和控制器件的接入,这里可能接入的是非智能设备,还需要考虑他们的互联互通问题,涉及一个协议的定义和转换;
3)端侧联动操作的智能化逻辑,直接决定了智能小管家的实用性。
整个系统的核心架构图如下所示:
从上面这个核心架构图中,我们可以看到整个iot系统组成,包括智能设备终端侧、阿里云物联网平台。下面就整个系统的几大重要组件,我会一一进行简要讲解。
终端侧主要承载的是智能卧室环境的检测,同时做一些边缘侧的应用逻辑处理,还需要具备对外网络的通讯能力,能在第一时间把紧要消息通过网络通道传输出去。
终端侧包括的核心组件有:瑞萨的r7fa4m2ad3cfp(ra4m2),搭载的是国产实时操作系统 rt-thread,同时外设板载有 esp8266 wi-fi通讯模组、红外发射器、继电器(gpio模拟)、oled显示屏、等等。
终端侧不仅包含设备硬件,还需要对应的固件软件,两者相辅相成,共同完成终端侧的功能逻辑。
这里提及的后端,一般指的是阿里云物联网平台。
阿里云的物联网平台,在国内来说,还是走得比较靠前的,它可以接入非常多样化的智能设备,同时在物联网设备数据物模型这一块,也有比较完备的设计,各大方案厂商和设备终端厂商都比较愿意接入阿里云物联网平台。
而本次大赛的要求本身就是建议接入阿里云物联网平台,于是我在阿里云物联网平台创建了我的智能卧室小管家,并添加了若干属性(数据模型),以下便是一个参考,后文会详细介绍一下如何创建此类自定义产品。
下面就系统的各个组件的设计,做简要的说明。
硬件部分主要分为四大部分:mcu主控、wi-fi模组、各类传感器、输出设备。
瑞萨电子 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模块,而是采用了我惯用的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,板载天线。
本模块集成了以下几部分:
红外发射头:用于发射红外信号, 波长为940nm 38k nec编码信号的发射;
红外接收头:用于接收 nec 红外信号, 进而单片机进行分析解码操作;
红外头扩展: 该接口为红外发射头的扩展, 可以连接多个红外发射头( 常称红外发射模块) , 用于安放到不同的位置实现多方位控制;
uart 单片机串口通信接口:该端口为单片机串口( ttl) , 作为与外界单片机的通信桥梁, 其默认设置的波特率为9600bps;
使用单片机的串口就可以与之对接,非常的方便。
本次参赛使用的是基于ssd1306控制芯片的oled显示屏,尺寸是0.96‘,分辨率是128*64,它的控制协议采用的是4线i2c协议。在实现对接的过程中,既可以使用硬件i2c,也可以采用gpio模拟成软件i2c去对接。
以下是该显示屏的实物图:
本次参赛聚焦与卧室环境,需要用的一个温湿度传感器,这里我依然没有采用官方推荐的温湿度传感器,还是使用了一块,我已经比较熟练使用的温湿度传感器aht25,它与常见的aht20温湿度传感器属于同一个系列,在编程代码上基本是可以公用的。最棒的是,官方已提供成熟的示例代码,开发者仅需要花小量的时间,即可很快完成调试对接。
以下是它的实物图:
目前这一块的接入,采用的是gpio做模拟,并没有实际接入继电器,但已经完全可以实现其操作原理。
其中,gpio404用作系统工作状态显示灯,gpio407用于控制卧室灯开关。
整个软件部分的开发主要就是终端固件开发,主要包括四大部分: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目录用于存放我自己的应用工程代码,里面的代码结构一本与上面的代码逻辑示意图保持一致。
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)准备结项资料
项目收尾的最后,需要准备各种结项资料,包括项目稳定、演示视频、各种实物图片等等。
本期项目中,已实现以下功能:
定时采集更新卧室温湿度数据,并通过oled更新显示,同时上报到阿里云物联网平台;
定时更新oled显示内容,包括空调开关状态、照明灯开关状态、卧室温湿度值等;
系统运行指示灯,每秒钟闪烁一次;
开机自识别接入wi-fi网络,并在判断网络状态ok后,通过mqtt的形式自动接入阿里云物联网平台;
在阿里云物联网平台,可以在线调试,下发控制空调开关或照明灯开关等控制指令;
在阿里云物联网平台,可以展示空调开关状态、照明灯开关状态、卧室温湿度等信息;
以下是项目的部分图片展示:
开发板时钟配置的问题,导致的乱码
rt-thread跑起来的瞬间
零代码上阿里云
上报数据到物联网平台
阿里云物联网平台设备数据展示
终端oled显示
视频展示部分,已更新,见硬声平台,戳这里
本参赛项目的源代码已全面开源在 这里
其中应用部分的代码在 ra4m2-rt-thread/tree/master/bsp/renesas/ra4m2-eco
有关项目源代码的事情,也可与我讨论。
项目虽然即便完成了,但是有些东西还是需要好好复盘总结的。
项目还是要赶早规划和实施,越往后推压力越大,除非你想要项目摆烂;
遇到卡壳的问题,及时寻找帮助,要不找原厂的技术支持,要不找参赛的小伙伴,一般的技术问题大家都和乐意为你解答;你自个瞎折腾一晚上的问题,可能别人一两句话就点通你了;
评估工作量时,尽快多留一手,看似简单的功能,哪怕你已经在别的平台实现过,也可能还要再踩坑一次;
写应用代码的时候,多多考虑代码的可移植性;本次项目我复用了之前在c51上面写的i2c驱动oled的代码,之前是软件i2c,这次切换到硬件i2c,适配一下接口后,应用逻辑代码基本不用动,非常地丝滑;
纸上得来终觉浅,绝知此事要躬行;多上手,多总结;看10篇别人的教程,不如自己整一遍来得快,这次我就吃了这个亏,希望后续多多吸取教训。
鉴于项目时间的关系,本项目中海油一些比较好的功能想法并没有去实现,后续有时间,可以考虑把它完善了。
归根结底,还是时间花得太少了,后面的项目都要吸取此类教训。
这个项目前前后后地折腾了一段时间,踉踉跄跄地也算是交差了,这期间还是要感谢几位大佬的支持与帮助,可以说没有你们的输入,可能我都不能完成这个项目了。以下是详细的致谢名单,排名不分前后:
再次感谢大家,今后多向各位大佬学习。
在整个项目开发过程中,参考了一些有用的文章或教程,特在此罗列,以表感谢:
本次项目介绍后,我还继续探索rt-thread在各种嵌入式平台开发的可能性,并以此来要求自己输出各种关于rt-thread、嵌入式、物联网等等热门技术话题的原创内容,欢迎大家持续关注我。
我是 架构师李肯 (全网同名),2022年电子发烧友论坛优秀开发者、2022年rt-thread技术社区优秀布道者、csdn博客专家,欢迎大家来交流。
为感谢粉丝朋友的大力支持,特在本文文末为广大粉丝朋友送上福利:《深度学习嵌入式应用开发:基于rk3399pro和rk3588》 全新图书包邮赠送5本。
详细的赠书活动细节,请 关注我的 社区赠书活动,或者 点击文章下方 的【微信公众号名片】,手动关注并回复【嵌入式】了解一下吧。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论