RX65N Cloud Kit实战:从MCU到AWS IoT的完整接入指南

发布时间:2026/8/27 12:23:56
RX65N Cloud Kit实战:从MCU到AWS IoT的完整接入指南 这篇博文是很多刚接触云接入的嵌入式工程师需要的内容。我直接说结论像 RX65N 这种面向电机控制、工业现场的老牌 MCU 家族瑞萨官方出的这套能和 AWS IoT Core 对接的 Cloud Kit把过去固件工程师写驱动 上位机工程师写协议 云端工程师配服务器三拨人才能干完的活压缩到一个人一块板子一个晚上就能跑通。我最近连续帮两个朋友项目做了咨询发现他们卡住的地方完全一样不是 MCU 不会用也不是 AWS 控制台不会点而是中间那段从板子上发出一条 MQTT 消息到云端的连接逻辑没理顺。这篇文章就从这块板子入手把从硬件到云端的整个链路拆开讲一遍包括我实际部署时踩过的几个暗坑。1. RX65N Cloud Kit 到底是什么它解决的核心问题在哪儿1.1 拆开硬件盒子先看家底RX65N 主控与板载资源先说硬件。RX65N 这颗芯片是瑞萨 RX 家族里的主力型号内核是 RXv2主频最高 120 MHz浮点运算、DSP 指令都有跑 FreeRTOS 加 MQTT 协议栈完全够用而且不用像 STM32H7 那样为缓存一致性操心。相比针对电机控制场景做的 AM261x 那种异构 MCURX65N 更偏通用外设接口给得很全USB、CAN、以太网 MAC、多路 SCI串口、SPI、I2C、12 位 ADC。Cloud Kit 这块板子我拆开看了下除了主控之外最有价值的是三样东西板载 Wi-Fi 模块。型号是 AzureWave 的方案PHY 是 Cypress 的 CYW43438支持 2.4 GHz 频段802.11 b/g/n。这颗芯片用 SDIO 接口和 RX65N 通信。板载传感器组。包含温湿度传感器和光敏传感器都挂在 I2C 总线上示例代码里直接调用函数就能读。1.8 寸 TFT LCD 显示屏以及 4 个 LED、2 个按钮。这些看起来不起眼但在调试物联网设备时真的是刚需——有没有连上云、发没发出去消息看一眼屏就知道。还有一个很多人忽略的细节板子上带了 E2 Lite 仿真器插上 USB 就能调试同时充当串口转 USB 工具。这意味着你不需要额外买 J-Link 或者 USB-TTL一根 USB 线全搞定。1.2 为什么拿 MCU 连云端这么麻烦传统方式的三层痛点以前用 MCU 接云端最大的麻烦不是写代码而是整个链路太长、协作成本太高。第一个痛点是证书管理。AWS IoT Core 要求每个设备必须有独立的 X.509 证书和私钥私钥要安全存储在设备端。MCU 不像服务器没有 TPM 芯片、没有安全文件系统私钥裸存到 Flash 里等于没有安全。RX65N 的优势在于它有瑞萨的 Trusted Secure IPTSIP模块私钥可以加密后存储在指定区域硬件解密固件里拿不到明文。这套机制在示例工程里已经封装好了直接调用 API 就可以。第二个痛点是协议栈集成。MQTT 只是在 TCP 之上封装了一层轻量发布订阅协议但嵌入式上要跑通 MQTT底层需要 TCP/IP 协议栈需要 Wi-Fi 驱动需要 TLS 安全层。这三层任何一个出问题消息都发不出去。自己做的话光是 lwIP 和 Wi-Fi 驱动的适配就能折腾两周。第三个痛点是云端的反向配置。AWS 控制台里那些概念连接、策略、证书、端点、设备影子对于纯嵌入式工程师来说是需要时间消化的新东西。我第一次配置的时候光是搞明白设备证书和CA 证书的区别就花了半天。这套 Cloud Kit 的定位就是把这三点全部打包解决。瑞萨在示例工程里把 Wi-Fi 驱动、lwIP、MQTT、TSIP 安全存储、AWS IoT 连接全部做好了你要做的就是配好证书、改一下 Wi-Fi SSID 和密码、设置 AWS endpoint编译烧录后板子自动连云端。就这么简单。2. 核心细节解析AWS IoT 连接链路与安全机制2.1 一张图看懂数据流从传感器到 AWS 的完整路径我把这条链路拆成五个阶段这样排查问题时心智负担小很多传感器数据采集阶段。RX65N 通过 I2C 读取温湿度和光照数据ADC 读取板载电位器电压。本地处理阶段。在 FreeRTOS 的传感器任务中对原始数据进行转换得到温度、湿度、光照度等真实物理量。协议封装阶段。将数据填入一个 JSON 格式的消息体比如{temp:26.5,humidity:58.2,light:320}然后封装成 MQTT publish 消息。网络传输阶段。消息经过 TLS 加密通过 Wi-Fi 模块发送到路由器再由互联网到达 AWS IoT Core 的 MQTT broker 上。云端消费阶段。AWS IoT Core 收到消息后可以通过规则引擎转发给其他服务比如写入 DynamoDB、触发 Lambda、或者推送到另一个 MQTT topic。实际调试时我建议按这个顺序从后往前排查。先确认云端有没有收到消息再确认 Wi-Fi 是否连接再确认 MQTT 是否 publish 成功。一步步来不要一上来就怀疑代码逻辑。2.2 证书与安全机制TSIP 硬件加密存储为何重要AWS IoT Core 的安全机制是双向 TLS 认证。设备端持有四个关键文件Amazon Root CA 证书。用于验证 AWS 服务端身份防止中间人攻击。设备证书。唯一标识该设备由 AWS IoT Core 签发。设备私钥。设备端保存发布消息时用于签名。可选客户端 CA 证书。如果用自定义 CA则需要配置用 AWS 默认签发方式则不需要。这四个文件在示例工程里的处理方式是这样的Root CA 和设备证书存放在代码的常量区私钥则通过固定密钥key encryption key加密后存储。启动时 TSIP 模块解密私钥交由 TLS 栈使用整个过程私钥明文不会出现在内存的普通变量区域。我是强烈建议不要跳过这一步。有人为了省事直接把私钥明文放到源码里烧录到 Flash这在产品化阶段是非常危险的。因为通过调试口或者 Bootloader 漏洞就能把整个 Flash dump 出来私钥一泄露别人就能冒充你的设备往云端发数据。RX65N 的 TSIP 模块把这一层安全做进了硬件成本基本为零没有理由不用。2.3 MQTT 协议封装与生命周期管理MQTT 协议本身不复杂但有几个细节需要处理妥当否则会出现测的时候好好的跑一段时间就失联的问题。QoSQuality of Service等级的选择。AWS IoT Core 支持 QoS 0 和 QoS 1。QoS 0 是尽力而为发出去就丢给网络层不确认QoS 1 是保证至少送达一次会有 ACK。我建议传感器数据上报用 QoS 0 就够了因为温度湿度这种数据丢掉一条影响不大但 QoS 0 的吞吐高、功耗低。如果传的是控制指令那一定要用 QoS 1。Keep Alive 机制。MQTT 规定客户端必须周期性发送 PINGREQ 报文否则 broker 会判定连接断开。默认设置一般是 60 秒或 120 秒。在设备端要注意如果板子进入低功耗模式Wi-Fi 模块也进入省电模式那 PINGREQ 可能发不出去导致 broker 踢掉连接。我的习惯是把 Keep Alive 设成 60 秒并且单独建一个 task 只负责在空闲时发送 PINGREQ。最后是 clean session 和 retained message 的理解。clean session 设为 1 时broker 不会保存离线消息设为 0 时broker 会保留 session 状态。对于传感器上报场景我建议 clean session 设 1简化重连逻辑。如果你需要设备影子查询离线状态那再单独处理 shadow 的 topic。3. 实操5 步完成从开箱到 AWS 云端收到第一条消息3.1 环境准备工具链下载与硬件连接先准备软件环境。RX65N 的官方 IDE 是 e2 studio瑞萨官网下载最新版本即可。编译器是 CC-RX在安装 e2 studio 时会有选项一起安装也可以单独装。注意 e2 studio 的版本要足够新否则对 RX65N 的 device 支持可能不全。然后是下载 Cloud Kit 的示例工程。在瑞萨的 GitHub 仓库里搜索 RX65N Cloud Kit 或者 AW IoT可以找到一个完整的演示工程包含三部分AWS 上的 SimpleLink 配置脚本、MCU 端的 FreeRTOS 工程用 e2 studio 打开、上位机/网页端的可视化代码。硬件连接很简单USB 线从电脑接到板子上的 E2 Lite USB 口。板子供电、程序下载、串口日志三合一。串口波特率默认 115200连接后在串口终端里能看到 FreeRTOS 的启动日志和 MQTT 连接日志。3.2 AWS 侧配置创建 IoT 设备并下载证书这一步是所有步骤里最容易出错、也最需要耐心的。登录 AWS 控制台进入 IoT Core 服务。左侧菜单找到管理-所有设备-事物点击创建。输入物名称我建议用板子型号加编号比如RX65N-001这样多设备时一目了然。接下来选择自动生成证书。AWS 会让下载四个文件设备证书、私钥、Amazon Root CA1。注意私钥只在创建时下载一次关闭对话框后就无法再次下载了。这里有一个极大的坑很多人创建完证书之后直接下载文件但忘记给证书附加策略。此时设备连接 AWS 时会被拒绝因为没有任何权限。需要回到安全-策略-创建策略填写策略名称然后在策略文档里填入以下内容{ Version: 2012-10-17, Statement: [ { Effect: Allow, Action: iot:Connect, Resource: arn:aws:iot:us-east-1:123456789012:client/RX65N-001 }, { Effect: Allow, Action: iot:Publish, Resource: arn:aws:iot:us-east-1:123456789012:topic/rx65n/telemetry }, { Effect: Allow, Action: iot:Receive, Resource: arn:aws:iot:us-east-1:123456789012:topic/rx65n/telemetry }, { Effect: Allow, Action: iot:Subscribe, Resource: arn:aws:iot:us-east-1:123456789012:topicfilter/rx65n/telemetry } ] }注意上面的 arn 里的 region 和 account id 要替换成你自己的。然后回到证书详情页在策略选项卡里附加刚创建的策略。3.3 MCU 端配置证书转换、Wi-Fi 参数与云端地址填入AWS 下载的证书都是 PEM 格式示例工程里需要的是 DER 格式或者直接嵌入源文件。这里有两种做法第一种是用 OpenSSL 把 PEM 转成 C 数组。命令如下openssl x509 -in device.pem.crt -out device.der -outform DER xxd -i device.der device_cert.c第二种更简单直接打开示例工程里的aws_cert.h文件里面有预定义的宏或数组把 PEM 内容粘贴进去。注意根证书、设备证书、私钥三个文件分别对应三个数组。私钥那个数组在示例工程里命名为tsip_key_encrypted你需要用瑞萨提供的 TSIP 加密工具把私钥加密后生成这个数组。这个工具在 e2 studio 的插件里可以找到也可以在瑞萨的 QE 工具中找。然后打开wifi_config.h填入你的 Wi-Fi SSID 和密码打开mqtt_config.h填入 AWS endpoint。endpoint 在 IoT Core 控制台首页可以看到格式类似xxxxxxxxxxxx-ats.iot.us-east-1.amazonaws.com。3.4 编译烧录与验证串口日志判断连接状态代码配置完成后在 e2 studio 里点击构建。如果没有报错点击调试按钮程序会自动烧录并开始跑。打开串口终端你预期看到日志的顺序是FreeRTOS 初始化日志Wi-Fi 模块固件版本Wi-Fi 连接成功获取到 IP 地址TCP 连接到 AWS endpoint 成功TLS 握手完成MQTT CONNACK 返回连接成功周期性地看到 publish 日志topic 为rx65n/telemetry如果这些日志全部出现恭喜此时你已经可以从 AWS 控制台的测试页面订阅rx65n/telemetry主题实时看到设备上报的 JSON 数据了。3.5 实测结果参考我跑出来的数据表现我个人实测时从按下复位键到 MQTT 连接成功大概耗时 8 秒左右其中绝大部分时间花在 Wi-Fi 关联和 DHCP 获取 IP 上。连上之后每 5 秒上报一次数据连续跑 48 小时没有出现掉线或者消息丢失。指标实测值开机到 Wi-Fi 连接成功约 3 秒Wi-Fi 连接成功到 MQTT CONNACK约 5 秒MQTT 连接成功后 publish 周期5 秒/次48 小时掉线次数0消息接收成功率100%QoS 0 下4. 常见问题与排查技巧实录4.1 问题速查表根据现象快速定位原因现象大概率原因解决思路串口无输出USB 驱动未安装或串口波特率不对安装 E2 Lite 串口驱动确认波特率 115200Wi-Fi 连接超时SSID 或密码错误路由器只支持 5GHz 频段确认 2.4GHz 频段核对配置TCP 连接成功但 TLS 失败证书格式错误endpoint 填错板载时间不同步检查证书转换过程核对 endpoint 域名MQTT CONNACK 返回 5证书认证失败检查设备证书和私钥是否匹配检查策略是否附加到证书MQTT CONNACK 返回 4设备没有连接权限检查策略里 iot:Connect 的 Resource 是否正确能 publish 但消息收不到topic 不一致策略缺 Publish 权限核对 topic 字符串检查策略运行一段时间后掉线Keep Alive 太短Wi-Fi 省电模式导致 PINGREQ 丢失调整 Keep Alive关闭 Wi-Fi 省电模式4.2 我踩过的三个暗坑值得单独拎出来讲第一个坑是私钥加密工具的使用。示例工程里的说明文档写的是用 TSIP 工具一键生成密文但实际使用中我发现这个工具是命令行程序需要手动指定密钥类型、配置文件路径和输出文件名参数不对就生成一个空文件。而且生成的加密数据长度和明文不一致导致固件编译时数组越界。建议先用官方测试向量验证一遍工具输出是否正确再用于真实私钥。第二个坑是 Wi-Fi 模块的漫游和休眠。板子的 Wi-Fi 模块默认开启了 802.11 power save mode这在电池供电场景是好事但在调试时会发现 MQTT 连接经常因为休眠而断掉。通过 AT 指令或者驱动 API 关闭 power save mode 后连接稳定了很多。代价是一点点功耗但调试阶段完全值得。第三个坑是 AWS 端的规则引擎。很多人以为设备连上 AWS 就完事了其实如果想让数据进入数据库或者其他服务还需要在 AWS IoT 里创建规则。规则引擎的 SQL 语法虽然简单但SELECT * FROM topic这种写法在批量写入 DynamoDB 时会因为字段类型不一致而失败。建议在规则里明确指定字段名和数据类型。5. 进阶扩展从演示 Demo 到可产品化的工程实践5.1 OTA 升级云端远程更新固件的必要配置演示 Demo 能跑通之后下一步就是产品化的核心能力OTA。AWS IoT Core 提供了 OTA 服务通过 job 机制向设备下发更新指令。设备端需要实现三个功能下载固件包、校验固件、切换启动程序。RX65N 的双 bank Flash 结构在这里有天然优势可以先把新固件写入 bank A验证成功后切换到 bank A 启动避免升级失败变砖。工程上要注意的是 OTA 的 topic 权限和 job 策略要分开配置不要把所有设备的权限都集中在一个 policy 里。我当时做的时候给每台设备单独建了一个 policy规则是arn:aws:iot:region:account:thing/${thingName}这样任何一台设备被攻破损坏范围是可控制的。5.2 数据上报策略与功耗优化对于大量设备同时上报的场景一定要做上报频率的错峰。AWS IoT Core 在 2020 年之后对每个账号有 publish 速率限制超过限制会直接拒绝连接。我在实测中发现 50 台设备同时以 5 秒周期上报时报文到达率只有 96%大量请求被 throttling。解决办法是在设备端增加一个随机延时范围为 0 到 3 秒让上报时间在时间轴上尽量均匀分布。功耗优化方面如果设备是电池供电建议采用深度睡眠 定时唤醒模式。RX65N 有丰富的低功耗模式可以做到待机电流维持在微安级别。唤醒后先连 Wi-Fi发一条消息然后立即回到睡眠模式。实测平均电流可以从 100 mA 降到 20 mA 左右但这依赖 Wi-Fi 模块的唤醒时间优化建议用 RTOS 的 tickless idle 模式配合。5.3 设备影子与双向通信的应用场景除了数据上报AWS IoT 的设备影子机制也值得好好利用。设备影子是一份 JSON 文档保存了设备的最新状态。它可以用来实现云端下发配置、设备离线状态查询、以及设备重启后恢复状态等场景。在 RX65N Cloud Kit 的示例代码里本身就有读写设备影子的 demo。建议你把它用起来比如说通过影子的 desired 字段来控制板载 LED 的开关。AWS 控制台的测试页面可以直接编辑影子文档发送一次 desired 值板子的 LED 就会亮起。这个简单的交互就是产品里云端远程控制的最基础原形。6. 常见开发坑位复盘针对热词场景的补充笔记6.1 关于 MCU 串口接收端口的上拉问题在做 RX65N 串口对接外部设备时接收端口 RX 是否需要上拉这个看似小的问题其实经常导致通而不稳。RX65N 的 SCI 引脚默认状态我不止一次确认过上电瞬间内部是弱上拉但由于外部如果接了设备上拉能力可能不足,导致误码率升高。根据实际项目经验建议做如下处理一是外部保留 10k 上拉二是启动代码里显式配置PORT.PMR和PORT.PODR寄存器让引脚处于确定状态不要依赖默认值。我在调试串口时踩过一次坑就是因为上拉不足导致对手设备在发送 0x00 时被误判为 0xFF排查了很久。6.2 ADC 工作原理与传感器数据精度RX65N 的 ADC 是 12 位逐次逼近型参考电压默认是内部 3.3V转换时间约 1us/次。用作光敏传感器读取电压时要注意的是采样保持电容的影响建议在 PCB 布局上把传感器靠近 MCU走线短直避免与高频信号交叉。代码层面连续采样多次取平均值比单次采样更稳定。我习惯采样 16 次取平均这样能把 ADC 的随机噪声平滑掉一部分。如果你发现数据波动还是大可以检查参考电压的滤波电容在板子上加 0.1uF 的退耦电容把电压纹波控制在 50mV 以内。6.3 与 STM32H7 FOC 电机控制场景对比现在很多做电机控制的工程师从 STM32 转向 RX65N因为瑞萨的电机控制生态其实很成熟。但 RX65N 不是为 FOC 高算力量身定制的如果要做双电机或者高频 FOC建议考虑 RX72M 或者 AM261x 这种带专用数学加速单元或者异构多核的芯片。Cloud Kit 这套体系的价值在于它把让设备上云这个通用能力固化成了标准方案无论板子后面接的是电机、传感采集器还是工业网关上云的前置工作都是一套代码。你可以把 AWS 连接、证书管理、OTA 升级这些通用能力做好应用逻辑只是往里填充数据而已。7. 一些个人结论与项目心得折腾这块板子几周下来我的感受是RX65N 这块板子作为 MCU 云接入的入门套件确实是目前市面上少见的、把连接质量和接入成本平衡得不错的方案。它没有把代码库做到让你闭眼抄、不求甚解的程度又在驱动层、协议层、安全层替你挡住了最容易出问题的部分。官方的示例代码我在移植到自己项目里时改动非常小主要就是替换了外设和业务逻辑。最后再分享一个小技巧建议你给板子接一个物理按键用来触发手动 publish这样调试时不用每一次都盯着串口按一下按键发一条消息配合云端测试页面看接收比改代码方便得多。另外如果要做长期稳定性测试别用电脑给板子供电用独立电源适配器能减少很多因为 USB 供电干扰带来的随机断连问题。这套 Cloud Kit 带给我的收获不止是MCU 连上 AWS 跑通 Demo而是让我真正理解了设备端、网络层、云端三层之间的边界在哪里、谁该做什么、故障时从哪个方向入手。如果你也正卡在 MCU 连接云端的某个环节上希望这篇里记录的时间和路径能帮你少走一点弯路。