打印
[活动]

Nordic nRF7002开发板试用体验 ——实现蓝牙配与MQTT交互控制

[复制链接]
345|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lulugl|  楼主 | 2023-9-20 18:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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专有协议。

【开发环境】
win10+vscode 用于开发nrf7002DK
Pycharm + Pyside6 用于开桌面
【任务选择】
使用WiFi连接功能,连接网络,并实现远程控制板卡LED和读取按键信息
【环境安装】
nRF Connet for Desktop
下载网址 HYPERLINK "https://www.nordicsemi.com/Products/Development-tools/nRF-Connect-for-desktop/Download"

如果直接下载的话会比较慢,建议用迅雷等下载工具下载。
2.nRF Command Line Tools安装
下载网址:
HYPERLINK "https://www.nordicsemi.com/Products/Development-tools/nRF-Command-Line-Tools/Download"

同时也建议用下载工具下载
3、安装vscode大家自行解决
4、安装nRF Connect Extension Pack

5、安装Ozone

等待安装结束,在安装过程中,需要科学上网才能下载完整的工程包,下载结束后,目录如下:

到此安装过程结束。
【程序实现】
要实现wifi联网与控制,需要解决模块如何上网,上网后用什么通信来实现交互,我在githug上找了一个例程: HYPERLINK "https://github.com/AliNordic/mqtt_over_wifi_nrf7002DK" ,这个例程解决了如何配网、mqtt数据收发、LED灯的控制、按键按下事件的处理,基于上跟我要实现的任务差不多,需要解决的就是远程读取按键这一块。
首先我从github上下面该项目的源码,解压后就可以直接编译了,中间有个小抽曲,就是我用的sdk为2.40,下载到开发板就是配置不成功,2.30就可以实现,后面我提了一个issue,作者也立即修复这个bug,现在可以以2.40以上版本配网了。
完成上面的基本操作后,就需要定制通信协议了。我们需要在Kconfig下面添加用于获取按键函数的命令:
添加获取按键函数的回调字符串:
添加获取按键状态的发布,在下面的函数中,判断获取按键状态,发布指定的状态:
else if(strncmp(payload_buf,CONFIG_GET_KEY1_CMD,sizeof(CONFIG_GET_KEY1_CMD)-1) ==0){
                bnt_state=dk_get_buttons();
                if(bnt_state&DK_BTN1_MSK){
                    data_publish(c,  MQTT_QOS_1_AT_LEAST_ONCE,
                    CONFIG_BUTTON1_EVENT_PUBLISH_MSG, sizeof(CONFIG_BUTTON1_EVENT_PUBLISH_MSG)-1);
                }
                else {
                    data_publish(c,  MQTT_QOS_1_AT_LEAST_ONCE,
                    CONFIG_BUTTON1_EVENT_PUBLISH_MSG_UP, sizeof(CONFIG_BUTTON1_EVENT_PUBLISH_MSG_UP)-1);
                }
            }
            elseif(strncmp(payload_buf,CONFIG_GET_KEY2_CMD,sizeof(CONFIG_GET_KEY2_CMD)-1) ==0){
                LOG_INF("get key2 state...");
                bnt_state=dk_get_buttons();
                if(bnt_state&DK_BTN2_MSK){
                    data_publish(c,  MQTT_QOS_1_AT_LEAST_ONCE,
                    CONFIG_BUTTON2_EVENT_PUBLISH_MSG, sizeof(CONFIG_BUTTON2_EVENT_PUBLISH_MSG)-1);
                }else{
                    data_publish(c,  MQTT_QOS_1_AT_LEAST_ONCE,
                    CONFIG_BUTTON2_EVENT_PUBLISH_MSG_UP, sizeof(CONFIG_BUTTON2_EVENT_PUBLISH_MSG_UP)-1);
                }
            }
致此我们的开发板的程序修改完毕,编译后下载到开发板。
【配网】
配网的话,我们需要下载nrf的专用配网工具nRF Wi-Fi Provisioner,下载地址为: HYPERLINK "https://www.nordicsemi.com/Products/Development-tools/nRF-Wi-Fi-Provisioner"
下载好后打开界面如下:
点击Access Point进去后选择扫描到的wifi,在密码输入框里输入连接密码,就完成配置设置,非常之方便。
【注意】好象华为手机不能在应用商城下载不到。只能用苹果或者安卓手机来实现配网。
【桌面的应用开发】
我这里使用pyside6进行桌面应用开发。用QT Desinger设计界面如下:
在左边的工具栏里设计mqtt调试助手,右边的界面是与nrf7002DK交互的界面,主要实现连接与开发板同样的mqtt服务器,实现led灯状态的同步,同时通过按键可以实现对板载LED灯的控制,在按键状态中,我们可以接收开发板发布的消息同步显示按键的状态,同时通过获取按键可以实时检测按测的状态。运行后实际界面如下:

【注意】由于示例代码给的mqtt服务器延时比较大,所以推存用国内的mqtt测试服务器,也可以自己建一个mqtt服务器,这样延时会小一些。 HYPERLINK "https://www.emqx.com/zh/mqtt/public-mqtt5-broker" 这里提供了一个国内免费试用的服务器

在代码中我们更改Koncifg的选项 默认的mqtt服务器域名
config MQTT_BROKER_HOSTNAME
    string "MQTT broker hostname"
    default"broker.emqx.io"
当然我们也可以自己在局域网建立一个mqtt服务器,这样即时性更高。
【试用心得】
nRF 7002DK的开发板做工非常好。
nRF5340的生态非常的好,官网提供了非常丰富的基础教程,包括环境的搭建、sdk的下载、固件的下载、蓝牙等集成工具。
提供的开发工具覆盖到了多种操作系统如win、linux、macos等。提供了vscode开发包。
zephyr是一个比较大的系统,可同时在各个芯片上编译运行。
这次试用,有大佬及时在群里给大家提供帮助,答疑解惑,提供环境搭建的丰富教程。
【建议】
我是第一次接触nrf开发,nrf入门需要花费一定的时间来学习环境的搭建、sdk的入门学习等。经过差不多一个多月的学习,如期的做出了作品。相比其他的常用Mcu的开发还是有一些不同。
虽然官方的教程非常的丰富,但是提供中文资料还是有限的,对于英文基础不是非常好的人来说,入门还是有点困难。建议多出一些中文教程,手册也**能出一些中文的资料,这样对于某些人群很容易接受nrf的开发。
2、nrf的SDK版本比较多,向上向下兼容性需要注明或者增加兼容性,比如我在2.30上编译可以运行的程序,拿到2.40SDK上编译可通过,但是运行中就会出现异常。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

149

主题

721

帖子

9

粉丝