主页 > 互联网 > 内容页

【RA4M2设计挑战赛】基于RA4M2和阿里云物联网平台的智能卧室小管家

2023-05-17 14:56:04 来源:嵌入式物联网开发

【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,同时外设板载有 ESP8266Wi-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更新显示,同时上报到阿里云物联网平台;审核编辑黄宇

标签:

上一篇:中贝通信(603220)新增【储能】概念_每日快报
下一篇:最后一页

IT

家电