【FPB-RA6E2 开发板】Zephyr 串口打印 DHT11 温湿度

【FPB-RA6E2 开发板】Zephyr 串口打印 DHT11 温湿度

本文介绍了瑞萨 FPB-RA6E2 开发板使用 Zephyr 开发环境实现 DHT11 获取环境温湿度并串口打印的项目设计。

项目介绍

  • 准备工作:硬件连接、流程图、开发环境准备等;
  • 工程代码:包括主程序代码和配置文件代码;
  • 编译上传:工程编译和固件上传等流程;
  • 效果演示:使用串口调试软件获取打印的 DHT11 温湿度数据。

硬件连接

DHT11 FPB-RA6E2
VCC 3V3
DATA P500(Arduino D4 引脚)
GND GND

实物连接

流程图



开始
初始化
DHT传感器

就绪
结束
主循环
读取信息
解码器 API
解码温度通道
解码湿度通道
格式化温度值
格式化湿度值
串口打印结果
延时

环境准备

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++ 复制代码
/*
 * Copyright (c) 2023 Ian Morris
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#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("%16s: temp is %s%d.%d °C humidity is %s%d.%d %%RH\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\blinky

固件上传

待编译完成,连接开发板,执行指令

bash 复制代码
west flash

效果演示

使用 MobaXterm 软件连接 J-LINK 虚拟串口,波特率115200,可获取 DHT11 采集的环境温湿度信息;

总结

本文介绍了瑞萨 FPB-RA6E2 开发板使用 Zephyr 开发环境实现 DHT11 获取环境温湿度并串口打印的项目设计,为相关产品的快速开发和应用设计提供了参考。

相关推荐
张张努力变强11 小时前
C++ STL string 类:常用接口 + auto + 范围 for全攻略,字符串操作效率拉满
开发语言·数据结构·c++·算法·stl
小镇敲码人11 小时前
探索CANN框架中TBE仓库:张量加速引擎的优化之道
c++·华为·acl·cann·ops-nn
平安的平安11 小时前
面向大模型算子开发的高效编程范式PyPTO深度解析
c++·mfc
June`11 小时前
muduo项目排查错误+测试
linux·c++·github·muduo网络库
C++ 老炮儿的技术栈11 小时前
VS2015 + Qt 实现图形化Hello World(详细步骤)
c语言·开发语言·c++·windows·qt
Once_day11 小时前
C++之《Effective C++》读书总结(4)
c语言·c++·effective c++
来自晴朗的明天11 小时前
13、NMOS 电源防反接电路
单片机·嵌入式硬件·硬件工程
柯一梦11 小时前
STL2---深入探索vector的实现
c++
MSTcheng.11 小时前
【C++】C++11新特性(二)
java·开发语言·c++·c++11
愚者游世12 小时前
Delegating Constructor(委托构造函数)各版本异同
开发语言·c++·程序人生·面试·改行学it