Funpack4-1 - 用DW3001CDK完成NFC切换LED灯效
该项目使用了DWM3001CDK,C语言,实现了通过NFC切换LED灯效的设计,它的主要功能为:通过刷NFC实现4种LED灯效的切换。
标签
Funpack活动
Zephyr
NFC
DWM3001CDK
qqlovolpp
更新2025-04-08
15

项目描述:

本项目旨在利用近场通信(NFC)技术,提供一种无需物理按键或应用程序即可轻松切换LED灯效的方法。利用DWM3001CDK开发板上的NFC功能来控制一组RGB LED灯的颜色和模式切换。当用户的NFC设备(如智能手机)靠近DWM3001CDK时,NFC通信触发LED灯效的变化(其中绿色LED用来指示NFC连接状况)。具体来说:

  • 用户首次将NFC设备靠近开发板时,LED灯亮起并显示预设的第一种颜色或模式。
  • 再次靠近则切换到第二种颜色或模式,以此类推。
  • 当循环遍历所有预设模式后,下一次交互会重新开始从第一种模式。

硬件介绍:

本项目采用的是Qorvo 的DW3001CDK开发板。 DWM3001CDK 是为基于 DW3110 IC 的 DWM3001C 全集成 (UWB) 模块开发的设计套件,可与 Apple U1 和 U2 芯片互操作。DWM3001C 是一款基于Qorvo DW3110 IC的全集成 UWB 收发模块。 集成DW3110 IC、nRF52833 BLE SoC、平面 UWB 天线、加速度计、电源管理和晶振,大幅缩短设计周期。

项目中主要用到的是nRF52833 BLE SoC,和板载的数个LED灯。nRF52833,集成于DWM3001CDK开发板中。该芯片是一款高性能、低功耗的蓝牙5.1片上系统(SoC),支持多种无线协议,包括蓝牙低能耗(BLE)、Thread、Zigbee以及NFC。本项目的NFC天线使用细铁丝简易制成。

软件介绍:

因为主控芯片为nFR52833,故本项目采用Nordic为其提供的nRF connect SDK进行开发。该SDK采用Zephyr RTOS,Zephyr RTOS 是一个高度可配置、开源的实时操作系统,专为资源受限设备设计,支持从微型控制器到更强大硬件平台。其主要特性包括:模块化架构允许定制系统组件以满足特定应用需求;强大的多线程和实时处理能力确保高效的任务管理和响应速度;丰富的通信协议栈和设备驱动支持简化开发过程;对多种硬件架构的支持增加了使用的灵活性;以及强调安全性和可靠性,使其成为物联网设备及其他嵌入式应用的理想选择。

修改设备树和Kconfig

    • 修改设备树(Device Tree)以配置硬件资源。
    • 修改Kconfig文件以启用所需的硬件模块(如GPIO、NFC和PWM)。
    • 初始化这些硬件模块。
//修改Kconfig文件,启用相关功能
CONFIG_NFC_T2T_NRFXLIB=y
CONFIG_NFC_NDEF=y
CONFIG_NFC_NDEF_MSG=y
CONFIG_NFC_NDEF_RECORD=y
CONFIG_NFC_NDEF_TEXT_RECORD=y
CONFIG_PWM=y
//配置设备树文件
leds {
compatible = "gpio-leds";
led0: led_0 {
gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
label = "Blue LED 0";
};
led1: led_1 {
gpios = <&gpio0 22 GPIO_ACTIVE_LOW>;
label = "Red1 LED 1";
};
led2: led_2 {
gpios = <&gpio0 14 GPIO_ACTIVE_LOW>;
label = "Red2 LED 2";
};
led3: led_3 {
gpios = <&gpio0 4 GPIO_ACTIVE_LOW>;
label = "Green LED 3";
};
};
pwmleds {
compatible = "pwm-leds";
pwm_led0: pwm_led_0 {
pwms = <&pwm0 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>;
};
};

初始化NFC

    • 初始化NFC模块,使其能够接收和发送数据。
    • 设置回调函数来处理NFC事件,例如当检测到NFC标签时触发特定操作。
    • 修改全局变量以记录NFC事件的状态,以便后续处理。
    //通过相关函数初始化NFC配置
if (nfc_t2t_setup(nfc_callback, NULL) < 0) {
printk("Cannot setup NFC T2T library!\n");
return -1;
}
if (nfc_ndef_msg_record_add(&NFC_NDEF_MSG(nfc_text_msg),
&NFC_NDEF_TEXT_RECORD_DESC(nfc_text_rec)) < 0) {
printk("Cannot add record!\n");
return -1;
}
if (nfc_ndef_msg_encode(&NFC_NDEF_MSG(nfc_text_msg),
buffer, &len) < 0) {
printk("Cannot encode message!\n");
return -1;
}
if (nfc_t2t_payload_set(buffer, len) < 0) {
printk("Cannot set payload!\n");
return -1;
}
if (nfc_t2t_emulation_start() < 0) {
printk("Cannot start emulation!\n");
return -1;
}
//NFC回调函数
static void nfc_callback(void *context,
nfc_t2t_event_t event,
const uint8_t *data,
size_t data_length)
{
ARG_UNUSED(context);
ARG_UNUSED(data);
ARG_UNUSED(data_length);


switch (event) {
case NFC_T2T_EVENT_FIELD_ON:
ledlist++;
dk_set_led_on(NFC_FIELD_LED);
break;
case NFC_T2T_EVENT_FIELD_OFF:
dk_set_led_off(NFC_FIELD_LED);
break;
default:
break;
}
}

闪烁LED

    • 根据全局变量的状态控制LED的闪烁模式。
    • 例如,如果全局变量表示检测到了NFC标签,则改变LED的颜色和闪烁模式。

image.png

功能展示:

见视频

通过刷手机NFC切换4种灯效,其中绿色LED用于指示NFC

1.红色呼吸灯

2.蓝色慢闪

3.蓝色快闪

4.红蓝流水灯

遇到困难及解决方法及心得体会:

本项目的主要困难来源于首次使用Nordic的nRF Connect SDK,Nordic的nRF Connect SDK是一个全新的开发框架,其底层基于Zephyr实时操作系统(RTOS),而Zephyr RTOS是我之前从未接触过的领域。这种陌生的技术栈带来了多方面的学习成本和技术难题。

nRF Connect SDK采用了CMake作为其构建工具,而Kconfig则用于配置系统的各项参数。这些工具的使用方式与传统的开发环境存在较大差异,尤其是对于初次接触的人来说,理解它们的工作原理和配置规则需要投入大量时间和精力。此外,设备树的概念也是本项目中的一个重点难点。设备树是一种描述硬件资源的方式,在嵌入式开发中被广泛使用,但其语法和逻辑结构复杂。

为了确保项目能够顺利推进,我采取了系统化的学习和实践策略。首先,我通过搜集大量的相关资料进行深入学习,包括nRF Connect SDK的官方文档、Zephyr RTOS的官方文档以及SDK包中提供的丰富示例代码。这些资料为我提供了理论基础和技术指导,帮助我逐步理解框架的设计理念和使用方法。

在实际开发过程中,我也通过不断调试和实验来加深对工具链和框架的理解。例如,通过分析SDK中的示例代码,我逐步熟悉了CMake的构建流程和Kconfig的配置方法;通过对设备树文件的修改和测试,我逐渐掌握了如何利用设备树描述硬件资源并将其与应用程序进行绑定。

总的来说,虽然本项目在技术上存在诸多挑战,但通过系统化的学习、实践和不断的尝试,我最终克服了这些困难,并成功完成了项目的开发任务。

附件下载
Funpack-DWM3001.zip
源代码
团队介绍
个人
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号