【瑞萨RA6E2】Home Assistant物联网 ADC 温度计
本文介绍了瑞萨 RA-Eco-RA6E2-64PIN-V1.0 开发板由 ADC 采集芯片温度和电压数据,通过串口发送数据至 ATK D20 WiFi 模块,ATK-D20 模块将 MQTT 消息透传至 Home Assistant 平台,实现 HA 物联网温度计的项目设计。
项目介绍
瑞萨 RA6E2 Eco 开发板结合 ADC 温度传感器和 ATK-D20 模块实现物联网温度计的项目设计。
项目结构

项目内容
- 硬件连接:RA6E2开发板和 ATK-D20 WiFi 模块的接线;
- 流程图:代码和项目流程;
- 工程代码:ADC 配置和主程序;
- MQTT透传:包括 ATK-D20 模块 MQTT 透传配置、软件测试等;
- 效果演示:包括接入 Home Assistant 平台、YAML 配置等。
硬件连接
连接方案
| RA6E2 |
ATK-D20 |
Note |
|---|
| RXD9 (P110) |
TX |
Receive data |
| TXD9 (P109) |
RX |
Transmit data |
| GND |
GND |
Ground |
实物连接

流程图

工程创建
- 打开 e^2^ studio 软件;
- 依次点击
文件 - 新建 - 瑞萨 C/C++ 项目 - Renesas RA ;
- 依次进行工程命名,路径设置,FSP版本,目标开发板选择,Device 选择
R7FA6E2BB3CFM ,工具链选择 GNU ARM Embedded ,调试器选择 J-Link ;
- 完成工程创建 ;
串口配置
-
进入 FSP 配置界面,打开 Pins 标签页,根据原理图或开发板丝印,将 P109 和 P110 引脚分别配置为 TXD9 和 RXD9 串口模式;

-
新建串口通信堆栈 New Stack - Connectivity - UART (r_sci_uart) ;
-
串口属性配置

-
进入 BSP 标签页,配置 RA Common 属性

ADC 配置
- 进入 Stacks 堆栈标签页,新建 ADC 堆栈
New Stack - Analog - ADC (r_adc) ;
- 选中 ADC 堆栈,进入属性选项;
- Input 选项下勾选 Channel 0 和 Temperature Sensor 选项;
- 中断配置 - Interrupts - Callback 值修改为 adc_callback - 优先级设置为 Priority 2 ;
- 引脚 Pins 开启 AN000 对应 P000 引脚;

- 配置完成后,点击
Generate Project Content 按钮,生成工程代码;
- 右键项目,构建工程,确保 0 报错。
代码
在左侧的项目目录中,打开 src/hal_entry.c 文件,添加如下关键代码
#include "hal_data.h"
#include <stdio.h>
fsp_err_t err = FSP_SUCCESS;
volatile bool uart_send_complete_flag = false;
void user_uart_callback (uart_callback_args_t * p_args)
{
if(p_args->event == UART_EVENT_TX_COMPLETE)
{
uart_send_complete_flag = true;
}
}
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#endif
PUTCHAR_PROTOTYPE
{
err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);
if(FSP_SUCCESS != err) __BKPT();
while(uart_send_complete_flag == false){}
uart_send_complete_flag = false;
return ch;
}
int _write(int fd,char *pBuffer,int size)
{
for(int i=0;i<size;i++)
{
__io_putchar(*pBuffer++);
}
return size;
}
volatile bool scan_complete_flag = false;
void adc_callback (adc_callback_args_t * p_args)
{
FSP_PARAMETER_NOT_USED(p_args);
scan_complete_flag = true;
}
static int16_t g_cal125 = 0;
void hal_entry(void)
{
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
assert(FSP_SUCCESS == err);
err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
assert(FSP_SUCCESS == err);
err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
assert(FSP_SUCCESS == err);
g_cal125 = *(volatile uint16_t *)0x010090E0u;
while(1)
{
uint16_t adc_raw=0;
uint16_t traw = 0;
(void) R_ADC_ScanStart(&g_adc0_ctrl);
scan_complete_flag = false;
while (!scan_complete_flag)
{
}
err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_raw);
assert(FSP_SUCCESS == err);
err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_TEMPERATURE, &traw);
assert(FSP_SUCCESS == err);
float volt = (double)(adc_raw/4095.0)*3.3;
float temp = (float)((int16_t)traw - g_cal125) * 0.1f - 127.0f;
printf("{\"adc\": %u, \"volt\": %.3f, \"temp\": %.2f}\r\n", adc_raw, volt, temp);
R_BSP_SoftwareDelay (1000, BSP_DELAY_UNITS_MILLISECONDS);
}
#if BSP_TZ_SECURE_BUILD
R_BSP_NonSecureEnter();
#endif
}
保存文件,右键项目 - 构建程序;
右键项目 - 调试项目 - 上传固件至开发板。
测试效果
- TypeC - USB 数据线连接开发板串口和电脑;
- 打开串口调试助手,配置对应的波特率等参数;
- 打开串口,即可接收芯片发送的 JSON 报文
格式为
{"adc": 2307, "volt": 1.859, "temp": 26.00}
包括 ADC 数值、ADC 电压转换值、ADC 温度值。

ATK D20
这里使用 ATK-D20 WiFi DTU 模块实现串口 MQTT 透传。
ATK-D20 是由正点原子团队(ALIENTEK)自主研发的一款高性能 2.4GHz WiFi DTU 模块,主要用于实现串口设备通过 WiFi 无线方式接入网络。
- 模块支持 TCP、UDP、HTTP、MQTT、原子云等多种通信协议,支持 AT 指令控制、注册包、心跳包、Modbus 采集等功能,极大地方便了二次开发与系统集成。
详见:D20 WiFi DTU | 文档 .
MQTT 配置
- 检查硬件连接,打开 ATK-D2x 配置软件,打开串口;
- 进入左侧
模式配置 界面,工作模式选择 MQTT;
- 填写 MQTT 服务器用户名、密码、ip地址、订阅主题、发送主题等信息;
- 点击上方
保存所有参数 按钮,此时上位机自动发送 AT 指令,完成 MQTT 配置并自动重启;

详见:正点原子 D20 WiFi 模块 .
MQTTX
使用 MQTTX 软件测试串口透传与服务器转发。
- 打开 MQTTX 软件,新建连接;
- 填写 MQTT 服务器地址、用户名信息等,点击 Connect 按钮;
- 新建订阅主题,输入 ATK-D20 上位机对应的发布主题信息,如
homeassistant/sensor/aht10/state;
- 窗口不断弹出接收到的 MQTT 服务器转发的温度信息;

Home Assistant
配置 HA 平台的 YAML 文件,根据主题添加相关参数;
YAML 文件代码
mqtt:
sensor:
- name: "ADC 温度"
state_topic: "homeassistant/sensor/aht10/state"
unit_of_measurement: "°C"
value_template: "{{ value_json.temp }}"
- name: "ADC 数值"
state_topic: "homeassistant/sensor/aht10/state"
unit_of_measurement: "%"
value_template: "{{ value_json.humi }}"
- name: "ADC 电压"
state_topic: "homeassistant/sensor/aht10/state"
unit_of_measurement: "%"
value_template: "{{ value_json.volt }}"
进入 HA 概览页面,编辑仪表盘,添加对应的卡片即可;

动态效果
见底部视频。
总结
本文介绍了瑞萨 RA-Eco-RA6E2-64PIN-V1.0 开发板由 ADC 采集芯片温度和电压数据,通过串口发送数据至 ATK D20 WiFi 模块,ATK-D20 模块将 MQTT 消息透传至 Home Assistant 平台,实现 HA 物联网温度计的项目设计,为该产品在物联网领域的开发设计和快速应用提供了参考。