【RA4M2设计挑战赛】基于RA4M2和阿里云物联网平台的智能卧室小管家
【RA4M2设计挑战赛】基于RA4M2和阿里云物联网平台的智能卧室小管家
(资料图)
摘要
本项目已RA4M2为主控,搭载了RT-Thread实时操作系统,配合Wi-Fi模块来提供网络通讯能力,外设接入了继电器、红外发射、OLED显示等器件,成功连上了阿里云物联网平台,实现了一个智能卧室小管家的产品雏形。
@
2.1 项目名称
2.2 设计思路
2.3 主要解决的问题
2.4 项目创新点
3.1 系统核心架构图
3.2 终端侧
3.3 后端侧
4.1
硬件部分
4.2 软件部分
6.1 功能描述
6.2 图片展示
6.3
视频展示
6.4 代码开源
7.1 项目踩的那些坑
7.2 项目带来的启发
7.3 项目的TODOLIST
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 功能描述
本期项目中,已实现以下功能:
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 项目带来的启发
7.3 项目的TODOLIST
鉴于项目时间的关系,本项目中海油一些比较好的功能想法并没有去实现,后续有时间,可以考虑把它完善了。
OTA升级的问题:本身阿里云物联网平台是支持OTA升级的,这块可以调试一下,问题不大;
USB本地升级的问题:需要研究一下这块升级的逻辑,还好论坛中已有小伙伴实践出来了;
智能卧室本地化智能逻辑:这里其实是一些智能化场景的丰富问题,比如温湿度值与空调的联动就是比较简单的一个逻辑,在后续的迭代中,可以多多加入一些这样的本地化智能逻辑;
智能卧室传感器中引入睡眠检测:其实这个也是我本身这次参赛很想做的一个功能,但是由于没有预留充足的预研时间,传感器没有选好型,一直被拖住了;后续有机会我一定要把这个功能加上;等到它加入的那一天,智能卧室小管家的商用价值可能就提升不少了。
归根结底,还是时间花得太少了,后面的项目都要吸取此类教训。
8 致谢
这个项目前前后后地折腾了一段时间,踉踉跄跄地也算是交差了,这期间还是要感谢几位大佬的支持与帮助,可以说没有你们的输入,可能我都不能完成这个项目了。以下是详细的致谢名单,排名不分前后:
RA的技术工程师李工、罗工,精准的技术知识做了很好的扫盲
同为参赛好友的
2345VOR
,入门级的操作指导和精神鼓励,哈哈哈
同为参赛好友的 盼盼,一两句话点拨了我,把我从蹲了一个晚上的坑里拉出来
其他电子发烧友参赛[同盟](
【新提醒】
瑞萨单片机论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com)
)
再次感谢大家,今后多向各位大佬学习。
9 参考链接
在整个项目开发过程中,参考了一些有用的文章或教程,特在此罗列,以表感谢:
10 更多分享
本次项目介绍后,我还继续探索RT-Thread在各种嵌入式平台开发的可能性,并以此来要求自己输出各种关于RT-Thread、嵌入式、物联网等等热门技术话题的原创内容,欢迎大家持续关注我。
我是 架构师李肯(全网同名),2022年电子发烧友论坛优秀开发者、2022年RT-Thread技术社区优秀布道者、CSDN博客专家,欢迎大家来交流。
阿里云数据模型Alink JSON协议简介
对接阿里云物联网平台,并模拟设备数据上报参考教程
如何在阿里云物联网平台上创建产品和添加设备
阿里云物联网平台
RT-Thread V2版本的UART驱动介绍
基于OLED如何显示中文汉字
[经验] 【瑞萨RA4系列开发板体验】+rt-thread移植
[经验] 【RA4M2设计挑战赛】RTT 移植
[经验] 【RA4M2设计挑战赛】适配 RT-Thread(env方式)开发 RA4M2
基于RA4M2读取HS3003的温湿度数据
基于RA4M2的硬件I2C驱动OLED显示屏
使用串口方式下载RA4M2的固件参考教程
RA4M2芯片简介
温湿度传感器AHT25的datasheet
纸上得来终觉浅,绝知此事要躬行;多上手,多总结;看10篇别人的教程,不如自己整一遍来得快,这次我就吃了这个亏,希望后续多多吸取教训。
写应用代码的时候,多多考虑代码的可移植性;本次项目我复用了之前在C51上面写的I2C驱动OLED的代码,之前是软件I2C,这次切换到硬件I2C,适配一下接口后,应用逻辑代码基本不用动,非常地丝滑;
评估工作量时,尽快多留一手,看似简单的功能,哪怕你已经在别的平台实现过,也可能还要再踩坑一次;
遇到卡壳的问题,及时寻找帮助,要不找原厂的技术支持,要不找参赛的小伙伴,一般的技术问题大家都和乐意为你解答;你自个瞎折腾一晚上的问题,可能别人一两句话就点通你了;
项目还是要赶早规划和实施,越往后推压力越大,除非你想要项目摆烂;
在阿里云物联网平台,可以展示空调开关状态、照明灯开关状态、卧室温湿度等信息;
在阿里云物联网平台,可以在线调试,下发控制空调开关或照明灯开关等控制指令;
开机自识别接入Wi-Fi网络,并在判断网络状态OK后,通过MQTT的形式自动接入阿里云物联网平台;
系统运行指示灯,每秒钟闪烁一次;
定时更新OLED显示内容,包括空调开关状态、照明灯开关状态、卧室温湿度值等;
定时采集更新卧室温湿度数据,并通过OLED更新显示,同时上报到阿里云物联网平台;审核编辑黄宇
标签: