it编程 > 硬件开发 > 嵌入式

【嵌入式实战项目精选】附源码 | 三等奖作品 | 基于RA4M2和阿里云物联网平台的智能卧室小管家

61人参与 2024-08-06 嵌入式

【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 系统核心架构图

整个系统的核心架构图如下所示:

image-20230227124626125

从上面这个核心架构图中,我们可以看到整个iot系统组成,包括智能设备终端侧、阿里云物联网平台。下面就整个系统的几大重要组件,我会一一进行简要讲解。

3.2 终端侧

终端侧主要承载的是智能卧室环境的检测,同时做一些边缘侧的应用逻辑处理,还需要具备对外网络的通讯能力,能在第一时间把紧要消息通过网络通道传输出去。

终端侧包括的核心组件有:瑞萨的r7fa4m2ad3cfp(ra4m2),搭载的是国产实时操作系统 rt-thread,同时外设板载有 esp8266 wi-fi通讯模组、红外发射器、继电器(gpio模拟)、oled显示屏、等等。

终端侧不仅包含设备硬件,还需要对应的固件软件,两者相辅相成,共同完成终端侧的功能逻辑。

在这里插入图片描述

3.3 后端侧

这里提及的后端,一般指的是阿里云物联网平台。

阿里云的物联网平台,在国内来说,还是走得比较靠前的,它可以接入非常多样化的智能设备,同时在物联网设备数据物模型这一块,也有比较完备的设计,各大方案厂商和设备终端厂商都比较愿意接入阿里云物联网平台。

而本次大赛的要求本身就是建议接入阿里云物联网平台,于是我在阿里云物联网平台创建了我的智能卧室小管家,并添加了若干属性(数据模型),以下便是一个参考,后文会详细介绍一下如何创建此类自定义产品。

在这里插入图片描述

4 系统设计说明

下面就系统的各个组件的设计,做简要的说明。

4.1 硬件部分

硬件部分主要分为四大部分: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)。

以下是它的资源图介绍:

ra4m2 block diagram

在我的项目中,我主要使用它的以下几个外设资源:

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,板载天线。

esp8266

本模块集成了以下几部分:

红外发射头:用于发射红外信号, 波长为940nm 38k nec编码信号的发射;

红外接收头:用于接收 nec 红外信号, 进而单片机进行分析解码操作;

红外头扩展: 该接口为红外发射头的扩展, 可以连接多个红外发射头( 常称红外发射模块) , 用于安放到不同的位置实现多方位控制;

uart 单片机串口通信接口:该端口为单片机串口( ttl) , 作为与外界单片机的通信桥梁, 其默认设置的波特率为9600bps;

使用单片机的串口就可以与之对接,非常的方便。

image-20230227131316920

本次参赛使用的是基于ssd1306控制芯片的oled显示屏,尺寸是0.96‘,分辨率是128*64,它的控制协议采用的是4线i2c协议。在实现对接的过程中,既可以使用硬件i2c,也可以采用gpio模拟成软件i2c去对接。

以下是该显示屏的实物图:

image-20230227132155769

本次参赛聚焦与卧室环境,需要用的一个温湿度传感器,这里我依然没有采用官方推荐的温湿度传感器,还是使用了一块,我已经比较熟练使用的温湿度传感器aht25,它与常见的aht20温湿度传感器属于同一个系列,在编程代码上基本是可以公用的。最棒的是,官方已提供成熟的示例代码,开发者仅需要花小量的时间,即可很快完成调试对接。

以下是它的实物图:

image-20230227132529776

目前这一块的接入,采用的是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的控制等。

以下是终端软件应用逻辑部分的层次图:

image-20230227150335502

其中:

wi-fi线程:由于在rt-thread中at组件是开启后,默认就跑起来了,而在应用层暂时没有一个比较好的方式感知网络能力的建立,所以这里新建了一个线程,用于实时检查网络通讯能力;当网络通讯能力已建立时,通过信号量的方式,通知其他模块。

aliyun mqtt线程:主要负责跟阿里云物联网平台进行对接,采用的mqtt通讯协议,它的运行,依赖于基础网络能力的建立;当它与阿里云物联网平台建立联系时,它就可以接收平台的控制指令下发,比如开关空调或开关照明灯等;

oled显示线程:此线程用于更新显示智能卧室的相关数据信息,包括:空调的开关状态、照明灯的开关状态、卧室的温湿度等;这些信息的更新频次大概1秒钟更新一次;

smart智能卧室线程:该线程主要维护整个智能卧室的逻辑,包括定时更新温湿度值、定时上报最新数据到阿里云物联网平台;

红外接收处理线程:该线程主要用于接收外部的标准nec红外信号,此功能本项目暂时未实际使用,仅用于学习若干红外遥控器的键值;

系统运行展示线程:此线程并没有参与过多的应用逻辑,仅仅是每一秒钟闪烁一下运行指示灯,表示系统正在运行中。

以上各个线程各司其职,相辅相成,共同完成智能卧室小管家的逻辑功能。

下面展示的是工程项目中的代码结构,我在rt-thread适配ra4m2的基础上,新增了一个app目录用于存放我自己的应用工程代码,里面的代码结构一本与上面的代码逻辑示意图保持一致。

image-20230227150314290

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灵活的代码配置工具,非常地赞。

image.png

image.png

为了契合本次参赛项目,我在创建的产品中,增加了相关的数据熟悉,分别是:空调开关状态、照明灯开关状态、温湿度等。

image-20230227161223725

5)调试外设驱动

这里主要是调试各种驱动接口,包括红外发射器的uart接口、oled显示的i2c接口、温湿度传感器的i2c接口、照明灯开关的gpio控制。

在调试过程中,一般一个个模块来,避免模块直接的干扰,这样可以有效地加快开发速度。

等到各个功能模块完成后,统一串起来跑一跑,确保没有问题。

6)全功能自测

到了这一步,基本功能开发就已经完成了,需要将终端设备的功能与云端能力联系起来调试,比如终端上报的数据能够在云端展示、云端发起的控制指令,能否在终端得到响应等等。

7)准备结项资料

项目收尾的最后,需要准备各种结项资料,包括项目稳定、演示视频、各种实物图片等等。

6 项目效果显示

6.1 功能描述

本期项目中,已实现以下功能:

6.2 图片展示

以下是项目的部分图片展示:

image-20230227163204841

image-20230227165804949

image-20230228185500235

image-20230228185700204

在这里插入图片描述

6.3 视频展示

视频展示部分,已更新,见硬声平台,戳这里

6.4 代码开源

本参赛项目的源代码已全面开源在 这里

其中应用部分的代码在 ra4m2-rt-thread/tree/master/bsp/renesas/ra4m2-eco

有关项目源代码的事情,也可与我讨论。

7 项目复盘

项目虽然即便完成了,但是有些东西还是需要好好复盘总结的。

7.1 项目踩的那些坑

7.2 项目带来的启发

7.3 项目的todolist

鉴于项目时间的关系,本项目中海油一些比较好的功能想法并没有去实现,后续有时间,可以考虑把它完善了。

归根结底,还是时间花得太少了,后面的项目都要吸取此类教训。

8 致谢

这个项目前前后后地折腾了一段时间,踉踉跄跄地也算是交差了,这期间还是要感谢几位大佬的支持与帮助,可以说没有你们的输入,可能我都不能完成这个项目了。以下是详细的致谢名单,排名不分前后:

再次感谢大家,今后多向各位大佬学习。

9 参考链接

在整个项目开发过程中,参考了一些有用的文章或教程,特在此罗列,以表感谢:

10 更多分享

本次项目介绍后,我还继续探索rt-thread在各种嵌入式平台开发的可能性,并以此来要求自己输出各种关于rt-thread、嵌入式、物联网等等热门技术话题的原创内容,欢迎大家持续关注我。

我是 架构师李肯全网同名),2022年电子发烧友论坛优秀开发者、2022年rt-thread技术社区优秀布道者、csdn博客专家,欢迎大家来交流。

11 文末福利

为感谢粉丝朋友的大力支持,特在本文文末为广大粉丝朋友送上福利:《深度学习嵌入式应用开发:基于rk3399pro和rk3588》 全新图书包邮赠送5本。

>
详细的赠书活动细节,请 关注我的 社区赠书活动,或者 点击文章下方 的【微信公众号名片】,手动关注并回复【嵌入式】了解一下吧。

在这里插入图片描述

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

喜报 | Bonree ONE 2.0荣获信通院“2022IT新治理年度明星产品”

08-06

最佳实践:DevOps在嵌入式软件开发领域的实践探索丨IDCF

08-06

【蓝桥杯嵌入式】蓝桥杯嵌入式第十四届省赛程序真题,真题分析与代码讲解

08-06

西门子1200PLC如何在威纶通HMI上进行时间显示

08-06

适用于嵌入式单片机的差分升级通用库+详细教程

08-06

舵机应该如果选择?讲讲模拟舵机,数字舵机和总线舵机的区别

08-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论