【FPB-RA6E2 开发板】Zephyr 物联网温湿度计
本文介绍了瑞萨 FPB-RA6E2 开发板使用 Zephyr 开发环境结合 DHT11 传感器和 DTU 模块,通过 MQTT 上传数据实现物联网温湿度计的项目设计。
项目介绍
- 准备工作:硬件连接、流程图、开发环境准备等;
- 工程代码:包括主程序代码和配置文件代码;
- 编译上传:工程编译和固件上传等流程;
- 效果演示:MQTTX 接收开发板上传的数据,并上传至 Home Assistant 智能家居平台。
硬件连接
| DHT11 | FPB-RA6E2 |
|---|---|
| VCC | 3V3 |
| DATA | P500(Arduino D4 引脚) |
| GND | GND |
实物连接

流程图
否
是
开始
初始化
DHT传感器
就绪
结束
主循环
读取信息
解码器 API
解码温度通道
解码湿度通道
格式化温度值
格式化湿度值
MQTT上传
延时
环境准备
Zephyr 开发环境搭建流程详见:【FPB-RA6E2 开发板】介绍、Zephyr 环境搭建、工程测试 .
- 以管理员身份运行 PowerShell 终端;
- 进入 Zephyr 开发文件夹路径,并激活 Python 虚拟环境;
bash
cd ...\Zephyr_Project\Renesas
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass # 每次打开新终端均需要执行该指令
.venv\Scripts\Activate.ps1
工程代码
打开 ...\zephyr\samples\sensor\dht_polling\src\main.c 主程序文件,代码如下
c++
#include <stdio.h>
#include <stdlib.h>
#include <zephyr/device.h>
#include <zephyr/sys/util_macro.h>
#include <zephyr/kernel.h>
#include <zephyr/drivers/sensor.h>
#include <zephyr/drivers/sensor_data_types.h>
#include <zephyr/rtio/rtio.h>
#include <zephyr/dsp/print_format.h>
#define DHT_ALIAS(i) DT_ALIAS(_CONCAT(dht, i))
#define DHT_DEVICE(i, _) \
IF_ENABLED(DT_NODE_EXISTS(DHT_ALIAS(i)), (DEVICE_DT_GET(DHT_ALIAS(i)),))
/* Support up to 10 temperature/humidity sensors */
static const struct device *const sensors[] = {LISTIFY(10, DHT_DEVICE, ())};
#define DHT_IODEV(i, _) \
IF_ENABLED(DT_NODE_EXISTS(DHT_ALIAS(i)), \
(SENSOR_DT_READ_IODEV(_CONCAT(dht_iodev, i), DHT_ALIAS(i), \
{SENSOR_CHAN_AMBIENT_TEMP, 0}, \
{SENSOR_CHAN_HUMIDITY, 0})))
LISTIFY(10, DHT_IODEV, (;));
#define DHT_IODEV_REF(i, _) \
COND_CODE_1(DT_NODE_EXISTS(DHT_ALIAS(i)), (CONCAT(&dht_iodev, i)), (NULL))
static struct rtio_iodev *dht_iodev[] = { LISTIFY(10, DHT_IODEV_REF, (,)) };
RTIO_DEFINE(dht_ctx, 1, 1);
int main(void)
{
int rc;
for (size_t i = 0; i < ARRAY_SIZE(sensors); i++) {
if (!device_is_ready(sensors[i])) {
printk("sensor: device %s not ready.\n", sensors[i]->name);
return 0;
}
}
while (1) {
for (size_t i = 0; i < ARRAY_SIZE(sensors); i++) {
struct device *dev = (struct device *) sensors[i];
uint8_t buf[128];
rc = sensor_read(dht_iodev[i], &dht_ctx, buf, 128);
if (rc != 0) {
printk("%s: sensor_read() failed: %d\n", dev->name, rc);
return rc;
}
const struct sensor_decoder_api *decoder;
rc = sensor_get_decoder(dev, &decoder);
if (rc != 0) {
printk("%s: sensor_get_decode() failed: %d\n", dev->name, rc);
return rc;
}
uint32_t temp_fit = 0;
struct sensor_q31_data temp_data = {0};
decoder->decode(buf,
(struct sensor_chan_spec) {SENSOR_CHAN_AMBIENT_TEMP, 0},
&temp_fit, 1, &temp_data);
uint32_t hum_fit = 0;
struct sensor_q31_data hum_data = {0};
decoder->decode(buf,
(struct sensor_chan_spec) {SENSOR_CHAN_HUMIDITY, 0},
&hum_fit, 1, &hum_data);
printk("{\"id\": \"%s\", \"temp\": %s%d.%d, \"humi\": %s%d.%d}\n", dev->name,
PRIq_arg(temp_data.readings[0].temperature, 2, temp_data.shift),
PRIq_arg(hum_data.readings[0].humidity, 2, hum_data.shift));
}
k_msleep(1000);
}
return 0;
}
保存代码。
配置文件
新建 ...\zephyr\samples\sensor\dht_polling\boards\fpb_ra6e2.overlay 文件,并添加如下代码
c++
/* SPDX-License-Identifier: Apache-2.0 */
/ {
aliases {
dht0 = &dht11;
};
dht11: dht11 {
compatible = "aosong,dht";
dio-gpios = <&ioport5 0 GPIO_ACTIVE_LOW>; /* P500 */
status = "okay";
};
};
&ioport5 {
status = "okay";
};
保存代码。
编译上传
代码和配置完成后,执行工程编译和固件上传指令。
固件编译
进入 zephyr 所在文件夹,构建目标工程
bash
cd zephyr
west build -p always -b fpb_ra6e2 .\samples\sensor\dht_polling
固件上传
待编译完成,连接开发板,执行指令
bash
west flash

效果演示
使用 MobaXterm 软件连接 J-LINK 虚拟串口,波特率115200,可获取 DHT11 采集的环境温湿度信息并以 JSON 报文格式打印;

MQTT
包括串口测试、DTU配置、硬件连接、MQTT测试。
串口测试
使用 USB 转 TTL 模块,RXD 连接开发板的 Arduino TX 引脚,串口调试软件打开模块对应的设备端口,立即接收到 JSON 格式的报文

ATK D20
这里使用 ATK-D20 WiFi DTU 模块实现串口 MQTT 透传。

详见:D20 WiFi DTU | 文档 .
硬件连接
| FPB-RA6E2 | DTU模块 | 说明 |
|---|---|---|
| P410 (RXD) | TXD | Receive Data |
| P411 (TXD) | RXD | Transmit Data |
| GND | GND | Ground |
MQTT 配置
-
检查硬件连接,打开 ATK-D2x 配置软件,打开串口;
-
进入左侧
模式配置界面,工作模式选择 MQTT; -
填写 MQTT 服务器用户名、密码、ip地址、订阅主题、发送主题等信息;
-
点击上方
保存所有参数按钮,此时上位机自动发送 AT 指令,完成 MQTT 配置并自动重启;

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

Home Assistant
在实现 MQTT 透传的基础上,进一步上传报文至 Home Assistant 平台。
YAML 配置
配置 HA 平台的 YAML 文件,根据主题添加相关参数;
YAML 文件代码
yaml
mqtt:
sensor:
- name: "温度"
state_topic: "homeassistant/sensor/dht"
unit_of_measurement: "°C"
value_template: "{{ value_json.temp }}"
- name: "湿度"
state_topic: "homeassistant/sensor/dht"
unit_of_measurement: "%"
value_template: "{{ value_json.humi }}"
进入 HA 概览页面,编辑仪表盘,添加对应的卡片即可;

总结
本文介绍了瑞萨 FPB-RA6E2 开发板使用 Zephyr 开发环境结合 DHT11 传感器和 DTU 模块,通过 MQTT 上传数据实现物联网温湿度计的项目设计,为相关产品在物联网领域的快速开发和应用设计提供了参考。