项目介绍
本项目基于nRF7002-DK,使用nRF Connect SDK v2.4.2
和Vscode插件的开发环境进行开发,实现NFC打开安卓应用并跳转到特定页面的NFC卡片功能。当使用手机靠近NFC天线时,手机便会跳转到指定的App页面并执行特定任务。
板卡介绍
nRF7002-DK是用于nRF7002 Wi-Fi 6协同IC的开发套件,该开发套件采用nRF5340多协议片上系统 (SoC) 作为nRF7002的主处理器,在单一的电路板上包含了开发工作所需的一切,可让开发人员轻松开启基于nRF7002 的物联网项目。该 DK 包括 Arduino 连接器、两个可编程按钮、一个 Wi-Fi 双频段天线和一个低功耗蓝牙天线,以及电流测量引脚。
这款DK支持低功耗 Wi-Fi 应用开发,并实现了多项 Wi-Fi 6 功能,比如 OFDMA、波束成型和 TWT。nRF7002 Wi-Fi 6配套IC为另一个主机添加了低功耗Wi-Fi 6功能,提供无缝连接和基于Wi-Fi的定位(本地Wi-Fi集线器的SSID嗅探)功能。该IC设计用于搭配Nordic现有的nRF52®和nRF53®系列多协议片上系统 (SoC) 和nRF91®系列蜂窝物联网系统级封装 (SiP) 使用。nRF7002 IC 还可与非nordic主机器件搭配使用。通过SPI或QSPI与主机通信,并带有额外的共存功能,可与其他协议如蓝牙、Thread或Zigbee无缝共存。
nRF7002在Nordic的nRF Connect SDK中提供集成和支持。
板卡特性
- 用于nRF7002双频带Wi-Fi 6配套IC的开发套件
- nRF5340 SoC主机器件
- Wi-Fi 6 (IEEE 802.11 a/b/g/n/ac/ax)、蓝牙低功耗 (LE)、蓝牙网状网络、802.15.4、Thread、Zigbee®、ANT、2.4GHz专有和NFC无线协议支持
- 2.4GHz、5GHz芯片和NFC天线
- SWF射频连接器
- SEGGER J-Link板载编程器/调试器
- 用户可编程LED (2x) 和按钮 (2x)
- 用于测量功耗的引脚
- 来自USB、外部或锂聚合物电池的2.9V至5.0V电源
- Arduino连接器
项目设计
开发环境搭建:
1 安装工具链管理器:
- 下载适用于您操作系统的nRF Connect for Desktop。
- 安装并运行nRF Connect for Desktop工具。
- 在“APPS”部分,单击“Toolchain Manager”旁边的“Install”。
2 安装nRF Connect SDK:
- 在nRF Connect for Desktop中打开Toolchain Manager。
- 单击导航栏中的“SETTINGS”以指定要安装nRF Connect SDK的位置。
- 在“SDK ENVIRONMENTS”中,单击您要安装的nRF Connect SDK版本旁边的“Install”。
3 设置首选的构建方法: 有两种构建应用程序的方法(我这里选择的是Vscode方式):
安装nRF Connect for VS Code扩展程序:
- 在Toolchain Manager中,单击“Open VS Code”按钮。
- 出现一个通知,列出了您需要安装的缺失扩展程序列表,包括来自nRF Connect for Visual Studio Code扩展程序包的扩展程序。
- 单击“Install missing extensions”。
- 安装扩展程序后,再次单击“Open VS Code”按钮。
然后,按照“在nRF Connect for VS Code扩展程序中创建应用程序”的说明进行操作即可。
关于如何打开应用程序
使用手机的NFC功能来打开特定应用程序时,可以按照以下步骤:
-
创建"链接":制作一个特殊的"链接",就像是一张有指示的地图,告诉手机要做什么。这个链接包括了你想要打开的应用程序的名字以及一些操作指令。例如:
myapp://open?param1=value1¶m2=value2
。 -
通知应用程序:让应用程序知道如何解释和执行这个特殊链接。这样应用程序就能够理解并执行相关任务,就像阅读地图上的标志一样。
-
准备NFC标签:将这个特殊的链接写入一个NFC标签中。这里是通过修改代码使nRF7002-DK中保存这个深层链接(Deep Linking)。
-
触发应用程序:将手机的NFC部分靠近NFC标签,手机会察觉到NFC标签,然后自动打开应用程序。
-
执行任务:应用程序会打开,并根据链接中的指令执行相应任务。你可以在应用程序中解析链接的参数,然后执行对应任务。
那么如何快速获取手机中App的深层链接(Deep Linking)以及能做的任务呢?
这里是通过 应用列表 | 捷径社区 (sharecuts.cn)这个网站去进行查看
比如微信有打开应用和打开扫码功能,支付宝的有首付款、乘车码和扫一扫等功能。
我这里选择是打开bilibili应用并进行搜索,对应的链接为bilibili://search?keyword=[URL Encode],将搜索关键字改为“Funpack2-6”,最终得到链接
static const uint8_t universal_link[] = "bilibili://search?keyword=Funpack2-6";
程序流程图
工程配置:
配置完后退出配置页面进行编译,NfC的配置操作就不会报错了,配置代码的主要逻辑是首先配置并启动NFC T2T(Type 2 Tag)模式,然后将一个编码后的NFC NDEF消息放置在NFC 数据中。当使用手机靠近NFC天线时,手机便会获取NFC标签信息。
int main(void)
{
int err;
size_t len = sizeof(ndef_msg_buf);
printk("Starting NFC Launch app example\n");
/* Configure LED-pins as outputs */
err = dk_leds_init();
if (err) {
printk("Cannot init LEDs!\n");
return -1;
}
/* Set up NFC */
err = nfc_t2t_setup(nfc_callback, NULL);
if (err) {
printk("Cannot setup NFC T2T library!\n");
return -1;
}
err = nfc_ndef_uri_msg_encode(NFC_URI_NONE,
universal_link,
sizeof(universal_link)-1,
ndef_msg_buf,
&len);
if (err) {
printk("Cannot encode message!\n");
return -1;
}
/* Set created message as the NFC payload */
err = nfc_t2t_payload_set(ndef_msg_buf, len);
if (err) {
printk("Cannot set payload!\n");
return -1;
}
/* Start sensing NFC field */
err = nfc_t2t_emulation_start();
if (err) {
printk("Cannot start emulation!\n");
return -1l;
}
printk("NFC configuration done\n");
return 0;
}
nfc_callback回调函数的主要目的是根据NFC场感应状态来控制LED指示灯的状态。当NFC场感应打开时,LED打开;当NFC场感应关闭时,LED关闭。其他事件类型的情况下,不进行任何操作。这个函数非常简单,只涉及到LED的控制操作。
static void nfc_callback(void *context,
nfc_t2t_event_t event,
const uint8_t *data,
size_t data_length)
{
switch (event) {
case NFC_T2T_EVENT_FIELD_ON:
dk_set_led_on(NFC_FIELD_LED);
break;
case NFC_T2T_EVENT_FIELD_OFF:
dk_set_led_off(NFC_FIELD_LED);
break;
default:
break;
}
}
效果展示:
手机接触NFC天线后会自动打开哔哩哔哩App并跳转到搜索页面。
项目总结
在本次项目中,使用了nRF52840-DK开发板,通过Nordic公司的开发环境以及VSCode插件来开发一个基于NFC的应用程序。总的来说,项目给我带来了以下几方面的经验和收获:
-
Nordic开发环境和VSCode插件体验: Nordic公司提供的开发环境以及VSCode插件在Windows上的使用体验较好。整个工具链的安装和配置过程并不复杂,对我来说是可以接受的。
-
NFC应用开发: 通过这个项目,了解了NFC(近场通信)的概念和应用。学会了如何在嵌入式系统中使用NFC技术。
-
学习设备树、Kconfig、prj.conf等知识: 项目中,有机会了解和学习了与嵌入式开发密切相关的一些关键概念,包括设备树(Device Tree)、Kconfig配置系统和prj.conf项目配置文件。这些知识对于更高级的嵌入式开发非常重要。
总的来说,感谢硬禾学堂举办这次活动,这个项目为我提供了一个宝贵的机会,让我掌握了与NFC应用和嵌入式开发相关的一些关键技能和知识。期待未来有更多机会使用Nordic公司的开发板,并进一步深入学习和应用与嵌入式开发相关的技术