[Funpack2-6]基于nRF7002-DK的蓝牙HID应用
Funpack活动项目,基于nRF7002-DK实现的蓝牙输入设备,包含鼠标与键盘模拟,同时实现了NFC标签的模拟。
标签
嵌入式系统
Funpack活动
开发板
Nordic
Hessian
更新2023-10-10
1134

[Funpack2-6]基于nRF7002-DK的蓝牙HID应用

Funpack活动项目,基于nRF7002-DK实现的蓝牙键盘鼠标+NFC模拟标签。

 

项目背景

这是我在参与的第二个Funpack活动项目。任务内容如下:

任务一:

• 使用板卡的蓝牙连接,设计一个蓝牙鼠标+键盘复合设备,按键1作为鼠标点击,按键2作为键盘输入按下时输入“eetree”字符,电脑开启大写锁定时,板卡的LED亮起

任务二:

• 使用WiFi连接功能,连接网络,并实现远程控制板卡LED和读取按键信息

任务三:

• 使用板卡的NFC功能,模拟出一个自定义功能的卡片,使用手机靠近并能读取卡片信息

任务四:

• 若您针对这个板卡有更好的创意,可自命题完成(难度不能低于以上任务)
 

这次活动我最开始选择完成的是任务一,设计一个蓝牙鼠标+键盘复合设备,但是开发完键鼠共功能以后发现最后那个通过同步电脑大小写的状态没法做,群里大佬说是官方SDK有问题。不得已又加了任务三的内容,所以实际我完成的应该算任务四吧。

 

硬件介绍

nRF7002-DK 简介

nRF7002-DK——用于nRF7002 Wi-Fi 6双频辅助IC的开发套件。

nRF7002 DK是nRF7002 Wi-Fi 6协同IC的开发评估板,它包含了在单板上开发所需要的所有元器件。开发板采用nRF5340多协议SoC作为主处理器,配合nRF7002 Wi-Fi协同芯片。可以同时支持低功耗蓝牙和Wi-Fi 应用的开发,并实现如 OFDMA、波束成形和目标唤醒时间等多项 Wi-Fi 6 功能。

nRF7002是Nordic的Wi-Fi产品系列中的首款器件,符合802.11ax标准,可提供双频段(2.4和5GHz)连接,支持Matter中使用的全部无线协议,可以为产品中添加最新的Wi-Fi 6技术,该芯片还具有帮助保护用户数据的先进安全功能。并与Nordic现有的超低功率技术无缝结合,可延长电池使用寿命。它提供快速、可靠的连接,具有先进的安全功能,并且方便集成到各个应用当中。

板上的nRF5340是支持低功耗蓝牙、蓝牙Mesh、NFC、Thread和Zigbee的双核蓝牙5.3 SoC,并且蓝牙测向可实现所有到达角(AoA)和出发角(AoD)的测量功能。此外,它支持低功耗蓝牙音频,2 Mbps高吞吐量、广播扩展和长距离。像蓝牙Mesh、Thread和Zigbee这样的Mesh协议可以与低功耗蓝牙同时运行,从而使智能手机能够配网、入网、配置和控制Mesh节点。还支持NFC、ANT、802.15.4和2.4 GHz专有协议。

特性:

• Arduino连接器

• 两个可编程的按钮

• 搭载nRF7002 Wi-Fi协同IC

• 作为主处理器的nRF5340 SoC

• 电流测量引脚

• 2.4GHz、2.4/5 GHz和NFC天线

• 高性能的128MHz Arm Cortex-M33应用内核

• 超低功率的64MHz Arm Cortex-M33网络核心

 

项目介绍

本次项目基于nRFConnect SDK进行开发,它集成了ZephyrOS操作系统,使用zephyr的多线程管理实现了同时模拟蓝牙HID输入设备和NFC标签的功能。通过接入五轴摇杆外设可以实现模拟鼠标的移动和左右键点击操作。使用手机触碰NFC天线可以实现使用NFC打开eetree funpack项目首页的功能。

 

功能介绍

1. 接线上电,注意要打开左上角电源开关。

FuJBz2OFwJa95k08v8gMdDlIhQbp

2. 蓝牙配对

Fs_biEkZfj86ItnOmpJuEW8BCgyM

3. 蓝牙鼠标模拟

FkN7NOfH8E9uAVssN_qi3414uGnD

4. 蓝牙键盘模拟

FuYH4Z4mHSAxiIaYcQ3CPANFoCkJ

5.扫描NFC

FseajzKXVsMVCI0PsPV28KWPi0Sx

6. NFC打开浏览器指定网址

FgIAV6EvvdFRvvdtEvc7wlF-ACGN

 

程序编码

一、搭建环境

1. 安装VisualStudio Code

官方网址:https://code.visualstudio.com/

2. 安装nRF Connect For Desktop

FmbuVrbzdcjYDyhP5Ii54Z4q5jOl

3. 安装nRF Connect SDK

选择需要安装的SDK版本,点击Install。点击右下角的SHOW LOG可以查看安装日志。

FsPGrfYno1006K_uCH25jzmoqCx2

下面是安装完成日志

Fmu_wRvOI-GHCdyRSU5LO4ag1mkF

4. 安装VisualStudio Code扩展

安装SDK后点击Open VS Code提示下图,点击Install missing extensions安装VS Code扩展。

FpOERE2N8HLQmqMjehSasiOaeS-K

Fm8EpDio254PozDozAN7DkSGjkkx

Fpn-xRCHeTBzJDQVOpEM6g6F2KPK

安装完扩展之后要安装command lines工具

5. 安装nRF Command line tools

Fs8d-dNVyyyznwhCg5lNIIPQ5u03

FnN5MGy8FVUuVmicP8ynwKY6Yuny

未安装command lines tools效果

FkO45dqkS_BoGI03VY_WwhB28GJD

安装command lines tools后的效果

FtTEtWmrkAu4TihZUOuBEzfwK7xB

二、程序设计与实现

软件流程

 Fhzv1FQxUI9iut98VxR8jR86WHo7

工程目录结构

Fo9tiU5_mBw60kZFb_2EGLjeHIrB

 

设备树按钮配置

Fmk4hvj3_ARScN0sG9PRYgLFAB9D

因为我这边开发的时候是通过CLion进行的,这边需要配置CMake profile的环境变量,增加ZEPHYR_BASE=/opt/nordic/ncs/v2.4.1/zephyr。

FlBVXbNAmqjw6VwIQTPiYV4C8ROV

另外对CMakeLists.txt也要进行修改,添加以下代码设置板卡信息和dts overlay文件

set(BOARD nrf7002dk_nrf5340_cpuapp)
set(DTC_OVERLAY_FILE nrf7002dk_nrf5340_cpuapp.overlay)

prj.conf需要按以下代码进行调整,主要是启用蓝牙和NFC,另外要调整堆内存池大小等。

#
# Copyright (c) 2019 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#
CONFIG_NCS_SAMPLES_DEFAULTS=y

CONFIG_BT=y
CONFIG_BT_DEBUG_LOG=y
CONFIG_BT_MAX_CONN=3
CONFIG_BT_MAX_PAIRED=3
CONFIG_BT_L2CAP_TX_BUF_COUNT=5
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_DEVICE_NAME="HessianBTMouse"
CONFIG_BT_DEVICE_APPEARANCE=962

CONFIG_BT_BAS=y
CONFIG_BT_HIDS=y
CONFIG_BT_HIDS_MAX_CLIENT_COUNT=2
CONFIG_BT_HIDS_ATTR_MAX=40
CONFIG_BT_HIDS_SECURITY_ENABLED=y
CONFIG_BT_GATT_UUID16_POOL_SIZE=40
CONFIG_BT_GATT_CHRC_POOL_SIZE=40


CONFIG_BT_CONN_CTX=y

CONFIG_BT_DIS=y
CONFIG_BT_DIS_PNP=y
CONFIG_BT_DIS_MANUF="NordicSemiconductor"
CONFIG_BT_DIS_PNP_VID_SRC=2
CONFIG_BT_DIS_PNP_VID=0x1915
CONFIG_BT_DIS_PNP_PID=0xEEEE
CONFIG_BT_DIS_PNP_VER=0x0100
# 解决
# W: Unable to allocate ATT TX meta
# W: No buffer available to send notification
CONFIG_BT_CONN_TX_MAX=40

CONFIG_HEAP_MEM_POOL_SIZE=4196
CONFIG_NFC_NDEF=y
CONFIG_NFC_NDEF_MSG=y
CONFIG_NFC_NDEF_RECORD=y
CONFIG_NFC_NDEF_URI_MSG=y
CONFIG_NFC_NDEF_URI_REC=y
CONFIG_NFC_NDEF_LAUNCHAPP_MSG=y
CONFIG_NFC_T2T_NRFXLIB=y
CONFIG_MAIN_STACK_SIZE=1536
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048

CONFIG_DK_LIBRARY=y

 

创建NFC处理线程(其实后面发现好像也不需要开线程)

/* size of stack area used by each thread */
#define STACKSIZE 1024

/* scheduling priority used by each thread */
#define PRIORITY 7

K_THREAD_DEFINE(nfc_task_id, STACKSIZE, nfc_task, NULL, NULL, NULL,
                PRIORITY, 0, 0);

 

设置NFC URL标签内容

    const uint8_t url[] = "//www.eetree.cn/page/digikey-funpack";
	/* Encode launch URI  */
	err = nfc_ndef_uri_msg_encode(NFC_URI_HTTPS,
                                  url,
				       sizeof(url)-1,
				       ndef_msg_buf,
				       &len);
	if (err) {
		printk("Cannot encode message!\n");
		goto fail;
	}

	/* Set created message as the NFC payload */
	err = nfc_t2t_payload_set(ndef_msg_buf, len);
	if (err) {
		printk("Cannot set payload!\n");
		goto fail;
	}

	/* Start sensing NFC field */
	err = nfc_t2t_emulation_start();
	if (err) {
		printk("Cannot start emulation!\n");
		goto fail;
	}

	printk("NFC configuration done\n");
	return;

 

三、固件烧录(下载)、串口跟踪

通过Clion右上角的cmake task,选择flash即可进行烧录。下面可以看到烧录日志,看到Build finished就成功了。

Fgu19eJjnsrj-OKQT_OofromIPfH

然后串口调试这边我用的是minicom(完全不知道nRF Connect SDK有没有带调试工具)

FpjJPP0XNRGBbq-ngd5alk4JUlH1

四、遇到的问题

初次接触nRF Connect SDK和Zephyr着实挠头,难度相比ESP-IDF、Arduino来说还是高了很多。很多默认配置要调整,文档也不太会找,程序开发下来举步维艰。

烧录的时候还经常会出现失败的情况,要执行下面的脚本解锁。

nrfjprog --recover --coprocessor CP_APPLICATION
nrfjprog --recover --coprocessor CP_NETWORK

 

未来计划

未来想再扩展一下NFC的玩法,像NFC分享WiFi连接信息之类。

 

参考资料

  • nRF Connect SDK官方文档:https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/introduction.html
  • Zephyr官方文档:https://docs.zephyrproject.org/
  • HID报告描述符:https://www.usbzh.com/article/detail-775.html

 

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