这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【e起DIY】低功耗蓝牙温湿度计-最简Zephyr环境搭建及点灯

共2条 1/1 1 跳转至

【e起DIY】低功耗蓝牙温湿度计-最简Zephyr环境搭建及点灯

助工
2026-06-08 20:47:41     打赏

【e起DIY】低功耗蓝牙温湿度计-开箱及MCUXpressoIDE点灯


https://forum.eepw.com.cn/thread/400155/1


书接上回:开箱并用官方MCUXpressoIDE点灯成功后,本篇就进入本次活动的主题:

使用 FRDM MCXW71 (或MCXW72)开发板与 SHT30 (或DHT11)温湿度传感器,构建一个基于 Zephyr 实时操作系统的低功耗蓝牙温湿度监测设备。


那么首先我们就需要安装Zephyr操作系统。

方法参照官方文档:


    NXP FRDM-MCXW72_Zephyr_Lab.pdf


  1. 首先安装Visual Studio Code软件。

下载地址:https://code.visualstudio.com/Download

image.png


2. 在Visual Studio Code的扩展中搜索并安装MCUXpresso for VS Code

安装完成后就可以在左侧边栏,看到X形状的MCUXpresso图标,后续开发都是先点击这个图标,再进到界面中操作。


image.png


3.    安装Zephyr软件包及其支持包。这一步骤很关键,都往往在这里就会遇到麻烦,因为很多基础软件包是基于Github的,国内对于Github的环境不太好,下载时断时续,只能多次尝试。

    o Zephyr Developer

    o Arm GNU Toolchain

    o Standalone Toolchain Add ons

    o Linkserver

    o PEmicro

进入Visual Studio Code的MCUXpresso扩展包,点击Open MCUXpresso Installer

image.png


在出现的页面选中

  1. Zephyr Developer、arm

  2. Arm GNU Toolchain

  3. Standalone Toolchain Add ons

  4. Zephyr SDK

  5. Linkserver

  6. SEEGER J-link

点击Install就可以安装了,点Detail可以查看具体要装哪些软件包(比如常见的CMake、Git等)。

image.png

下载时断时续,只能多次尝试,直到右侧都出现绿色打勾标识,就说明全部软件包安装完成。


4. 下载Zephyr  Repository代码仓库,是存放代码、文件、版本记录的容器 

各种支持Zephyr 的开发板的代码及例程都会下载。

同样的,Zephyr  Repository也是基于github,下载不稳定,需多次尝试,每次尝试前需要把下载目录种的内容全部删除,也就是必须一次性下载完成,下载过程中,底部状态栏会显示每个子软件包是否下载成功,只要有一个不成功,建议删除重来,否则后续会报错。

image.png

image.png


下载完成后的文件夹,高达8GB。

image.png


在board目录可以看到许多品牌(168个品牌),如renesas、NXP、ST等等。

NXP目录,可以看到很多个板子(83个板子),包括本次的frdm_mcxw72。

image.png


5.导入例程、编译下载

选择Import Example from Repository

依次选择Repository路径、开发板型号、例程等,就可以将例程导入到左下角的项目区。

image.png

选择刚刚导入的工程,点开Project Files——src——main.c就可以看到源文件。

image.png


main.c

/*
 * Copyright (c) 2016 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/**
 * @file 基于PWM实现RGB LED调色演示例程
 */

/* Zephyr 内核基础头文件 */
#include <zephyr/kernel.h>
/* 串口打印输出头文件 */
#include <zephyr/sys/printk.h>
/* 设备驱动基础头文件 */
#include <zephyr/device.h>
/* PWM 外设驱动头文件 */
#include <zephyr/drivers/pwm.h>

/**
 * @brief 通过设备树别名获取三路PWM LED配置
 * PWM_DT_SPEC_GET:从设备树解析PWM引脚、周期、通道等参数
 * DT_ALIAS(xxx):读取设备树中定义的别名
 */
static const struct pwm_dt_spec red_pwm_led =
	PWM_DT_SPEC_GET(DT_ALIAS(red_pwm_led));
static const struct pwm_dt_spec green_pwm_led =
	PWM_DT_SPEC_GET(DT_ALIAS(green_pwm_led));
static const struct pwm_dt_spec blue_pwm_led =
	PWM_DT_SPEC_GET(DT_ALIAS(blue_pwm_led));

/* 亮度步进值:2000微秒,控制PWM占空比变化步长 */
#define STEP_SIZE PWM_USEC(2000)

int main(void)
{
	uint32_t pulse_red, pulse_green, pulse_blue; /* 三路PWM高电平脉冲宽度 */
	int ret; /* 函数返回值,用于判断接口执行状态 */

	printk("PWM-based RGB LED control\n");

	/* 检查三路PWM设备是否初始化就绪 */
	if (!pwm_is_ready_dt(&red_pwm_led) ||
	    !pwm_is_ready_dt(&green_pwm_led) ||
	    !pwm_is_ready_dt(&blue_pwm_led)) {
		printk("Error: one or more PWM devices not ready\n");
		return 0;
	}

	/* 死循环,循环切换RGB颜色 */
	while (1) {
		/* 红色通道:脉冲宽度从0递增到PWM完整周期 */
		for (pulse_red = 0U; pulse_red <= red_pwm_led.period;
		     pulse_red += STEP_SIZE) {
			/* 设置红色LED的PWM脉冲宽度(改变亮度) */
			ret = pwm_set_pulse_dt(&red_pwm_led, pulse_red);
			if (ret != 0) {
				printk("Error %d: red write failed\n", ret);
				return 0;
			}

			/* 绿色通道:嵌套循环,同步变化亮度 */
			for (pulse_green = 0U;
			     pulse_green <= green_pwm_led.period;
			     pulse_green += STEP_SIZE) {
				ret = pwm_set_pulse_dt(&green_pwm_led,
						       pulse_green);
				if (ret != 0) {
					printk("Error %d: green write failed\n",
					       ret);
					return 0;
				}

				/* 蓝色通道:最内层循环,组合出不同色彩 */
				for (pulse_blue = 0U;
				     pulse_blue <= blue_pwm_led.period;
				     pulse_blue += STEP_SIZE) {
					ret = pwm_set_pulse_dt(&blue_pwm_led,
							       pulse_blue);
					if (ret != 0) {
						printk("Error %d: "
						       "blue write failed\n",
						       ret);
						return 0;
					}
					/* 每种颜色组合保持1秒 */
					k_sleep(K_SECONDS(1));
				}
			}
		}
	}
	return 0;
}


点击项目名旁边的编译、调试按钮,开启编译及下载调试。

image.png


点击运行就可以看到就可以看到RGB灯颜色切换了。

image.png


运行效果:

VID_20260608_211244.gif





专家
2026-06-09 08:03:10     打赏
2楼

谢谢楼主分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]