赞
踩
【RA4M2设计挑战赛】基于RA4M2和阿里云物联网平台的智能卧室小管家
摘要
本项目已RA4M2为主控,搭载了RT-Thread实时操作系统,配合Wi-Fi模块来提供网络通讯能力,外设接入了继电器、红外发射、OLED显示等器件,成功连上了阿里云物联网平台,实现了一个智能卧室小管家的产品雏形。
在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篇别人的教程,不如自己整一遍来得快,这次我就吃了这个亏,希望后续多多吸取教训。
鉴于项目时间的关系,本项目中海油一些比较好的功能想法并没有去实现,后续有时间,可以考虑把它完善了。
归根结底,还是时间花得太少了,后面的项目都要吸取此类教训。
这个项目前前后后地折腾了一段时间,踉踉跄跄地也算是交差了,这期间还是要感谢几位大佬的支持与帮助,可以说没有你们的输入,可能我都不能完成这个项目了。以下是详细的致谢名单,排名不分前后:
- RA的技术工程师李工、罗工,精准的技术知识做了很好的扫盲
- 同为参赛好友的 2345VOR,入门级的操作指导和精神鼓励,哈哈哈
- 同为参赛好友的 盼盼,一两句话点拨了我,把我从蹲了一个晚上的坑里拉出来
- 其他电子发烧友参赛[同盟](【新提醒】瑞萨单片机论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com))
再次感谢大家,今后多向各位大佬学习。
在整个项目开发过程中,参考了一些有用的文章或教程,特在此罗列,以表感谢:
本次项目介绍后,我还继续探索RT-Thread在各种嵌入式平台开发的可能性,并以此来要求自己输出各种关于RT-Thread、嵌入式、物联网等等热门技术话题的原创内容,欢迎大家持续关注我。
我是 架构师李肯 (全网同名),2022年电子发烧友论坛优秀开发者、2022年RT-Thread技术社区优秀布道者、CSDN博客专家,欢迎大家来交流。
为感谢粉丝朋友的大力支持,特在本文文末为广大粉丝朋友送上福利:《深度学习嵌入式应用开发:基于RK3399Pro和RK3588》 全新图书包邮赠送5本。
详细的赠书活动细节,请 戳这里 关注我的 社区赠书活动,或者 点击文章下方 的【微信公众号名片】,手动关注并回复【嵌入式】了解一下吧。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。