Funpack2-6基于nRF7002实现NFC卡片
本项目基于nRF7002-DK,使用nRF Connect SDK v2.4.2 和Vscode插件的开发环境进行开发,实现NFC打开安卓应用并跳转到特定页面的NFC卡片功能。当使用手机靠近NFC天线时,便会跳转到指定的App页面。
标签
嵌入式系统
Funpack活动
开发板
maskmoo
更新2023-10-13
416

项目介绍

本项目基于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 安装工具链管理器:

  1. 下载适用于您操作系统的nRF Connect for Desktop。
  2. 安装并运行nRF Connect for Desktop工具。
  3. 在“APPS”部分,单击“Toolchain Manager”旁边的“Install”。

2 安装nRF Connect SDK:

  1. 在nRF Connect for Desktop中打开Toolchain Manager。
  2. 单击导航栏中的“SETTINGS”以指定要安装nRF Connect SDK的位置。
  3. 在“SDK ENVIRONMENTS”中,单击您要安装的nRF Connect SDK版本旁边的“Install”。

3 设置首选的构建方法: 有两种构建应用程序的方法(我这里选择的是Vscode方式):

安装nRF Connect for VS Code扩展程序:

  1. 在Toolchain Manager中,单击“Open VS Code”按钮。
  2. 出现一个通知,列出了您需要安装的缺失扩展程序列表,包括来自nRF Connect for Visual Studio Code扩展程序包的扩展程序。
  3. 单击“Install missing extensions”。
  4. 安装扩展程序后,再次单击“Open VS Code”按钮。

然后,按照“在nRF Connect for VS Code扩展程序中创建应用程序”的说明进行操作即可。

FkA9V8WaUEvIJMtpQRxSqry5Qa0r

关于如何打开应用程序

使用手机的NFC功能来打开特定应用程序时,可以按照以下步骤:

  1. 创建"链接":制作一个特殊的"链接",就像是一张有指示的地图,告诉手机要做什么。这个链接包括了你想要打开的应用程序的名字以及一些操作指令。例如:myapp://open?param1=value1&param2=value2

  2. 通知应用程序:让应用程序知道如何解释和执行这个特殊链接。这样应用程序就能够理解并执行相关任务,就像阅读地图上的标志一样。

  3. 准备NFC标签:将这个特殊的链接写入一个NFC标签中。这里是通过修改代码使nRF7002-DK中保存这个深层链接(Deep Linking)。

  4. 触发应用程序:将手机的NFC部分靠近NFC标签,手机会察觉到NFC标签,然后自动打开应用程序。

  5. 执行任务:应用程序会打开,并根据链接中的指令执行相应任务。你可以在应用程序中解析链接的参数,然后执行对应任务。

那么如何快速获取手机中App的深层链接(Deep Linking)以及能做的任务呢?

这里是通过 应用列表 | 捷径社区 (sharecuts.cn)这个网站去进行查看

Fm0wNEpOx4cPZs4C-62iKhcAdnIO

比如微信有打开应用和打开扫码功能,支付宝的有首付款、乘车码和扫一扫等功能。

Fugt_yxVngDfITn31UlDcn-_lPIPFtNuRRj8annfbI95Kr8RvyeQp0nJ

我这里选择是打开bilibili应用并进行搜索,对应的链接为bilibili://search?keyword=[URL Encode],将搜索关键字改为“Funpack2-6”,最终得到链接

static const uint8_t universal_link[] = "bilibili://search?keyword=Funpack2-6";

 

程序流程图

FkloCrB_Zggt83DhWOKqj3u0jXio

工程配置:

URI record 模式需要在通过nfc_ndef_uri_msg_encode函数接口进行配置,需要将工程配置的NDEF URI相关配置打开后才能使用nfc_ndef_uri_msg_encode函数,这里是通过GUIConfig进行配置的。

 Fh3YOBxYH-cJV73XuaDCLEbRS6D8

配置完后退出配置页面进行编译,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并跳转到搜索页面。

FiOUQbqvgvupNTrGTUhEg8X8D_tS

项目总结

在本次项目中,使用了nRF52840-DK开发板,通过Nordic公司的开发环境以及VSCode插件来开发一个基于NFC的应用程序。总的来说,项目给我带来了以下几方面的经验和收获:

  1. Nordic开发环境和VSCode插件体验: Nordic公司提供的开发环境以及VSCode插件在Windows上的使用体验较好。整个工具链的安装和配置过程并不复杂,对我来说是可以接受的。

  2. NFC应用开发: 通过这个项目,了解了NFC(近场通信)的概念和应用。学会了如何在嵌入式系统中使用NFC技术。

  3. 学习设备树、Kconfig、prj.conf等知识: 项目中,有机会了解和学习了与嵌入式开发密切相关的一些关键概念,包括设备树(Device Tree)、Kconfig配置系统和prj.conf项目配置文件。这些知识对于更高级的嵌入式开发非常重要。

总的来说,感谢硬禾学堂举办这次活动,这个项目为我提供了一个宝贵的机会,让我掌握了与NFC应用和嵌入式开发相关的一些关键技能和知识。期待未来有更多机会使用Nordic公司的开发板,并进一步深入学习和应用与嵌入式开发相关的技术

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