这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 【nRF7002DK】Zephyr配置WiFi以及MQTT测试填坑记录

共1条 1/1 1 跳转至

【nRF7002DK】Zephyr配置WiFi以及MQTT测试填坑记录

工程师
2025-04-05 12:24:11     打赏

【前言】

【nRF7002DK】作为一个物联网开发板,可以同时实现wifi与蓝牙的无线连接。因此配置wifi联网与MQTT服务器连接,实现消息的订阅与发布是最为基础的测试。虽然【nRF7002DK】在前面有很多的测试,但是介绍的wifi联网以及MQTT的具体还是不够多,我经过两天的摸索,把我填的坑记录在此,希望对大家有帮助。

【工程的创建】

nRF的Zephyr工程创建是非常简单的,在装好nrfconnectsdk的基础之上,只需要几个步骤便可以生成一个新的工程。我这里选择copy一个mqtt的基础工程,具体如下:

1、新建一个工程,然后选择复制工程示例:

image.png

2、选择你需要的SDK版本号:

image.png

3、在搜索框输入mqtt然后找到对应的示例,如下图所示:

image.png

4、最后选择工程目录,按回车键后就可以生成工程了:

image.png

5、生成工程后,在工程中有三个配置文件是必须添加到工程编译中的,如下图所示:

image.png

6、配置工程编译:

image.png

如图所示,我这里把上面提到的3个配置文件添加到工程编译配置中。点击编译后,第一次编译有点长如果成就会出现下图:

image.png

到此我们的工程创建就结束了。接下来进行wifi配置。

【WIFI联网配置】

由于Zephry是通过配置来实现wifi的联网设置的,所以第一步就需要添加wifi的SSD以及密码,还有连接的加密方式。这些配置,在我上面提到的三个.conf里面都可以添加,我这里先择在prj.conf里面添加如下配置:

CONFIG_WIFI_CREDENTIALS_STATIC=y
CONFIG_WIFI_CREDENTIALS_STATIC_SSID="HUAWEI-H10R9U"
CONFIG_WIFI_CREDENTIALS_STATIC_PASSWORD="pwd"
CONFIG_WIFI_CREDENTIALS_STATIC_TYPE_PSK=y

这四个配置参数,解释为:

定义了静态Wi-Fi配置的凭据信息,具体功能如下:

CONFIG_WIFI_CREDENTIALS_STATIC=y  # 启用静态Wi-Fi凭据配置。

CONFIG_WIFI_CREDENTIALS_STATIC_SSID="HUAWEI-H10R9U" # 设置Wi-Fi网络的SSID为"HUAWEI-H10R9U"。

CONFIG_WIFI_CREDENTIALS_STATIC_PASSWORD="pwd" #设置Wi-Fi网络的密码为"pwd"。

CONFIG_WIFI_CREDENTIALS_STATIC_TYPE_PSK=y # 指定认证类型为PSK(预共享密钥)。

保存好后,重新全编译并下载到开发板。

image.png

打开串口终端看到日志信息如下:

image.png

从反馈的信息说明已经联上网了。

【mqtt配置】

在工程编译好后,默认是连上了test.mosquitto.org和MQTT的服务器,在我们没有经过MQTT的配置,示例已经有了连接了的。在日志打印中有如下信息:

*** Booting nRF Connect SDK v2.9.0-7787b2649840 ***
*** Using Zephyr OS v3.7.99-1f8f3dc29142 ***
[00:00:00.568,115] <inf> network: Bringing network interface up and connecting to the network
[00:00:09.142,761] <inf> wifi_mgmt_ext: Connection requested
[00:00:19.497,741] <inf> network: Network connectivity established
[00:00:19.964,752] <inf> network: Network connectivity lost
[00:00:20.479,705] <inf> network: Network connectivity established
[00:00:27.332,061] <inf> transport: Connected to MQTT broker
[00:00:27.332,916] <inf> transport: Hostname: test.mosquitto.org
[00:00:27.332,977] <inf> transport: Client ID: F4CE36001328
[00:00:27.332,977] <inf> transport: Port: 8883
[00:00:27.333,007] <inf> transport: TLS: Yes
[00:00:27.333,038] <inf> transport: Subscribing to: F4CE36001328/my/subscribe/topic
[00:00:27.622,467] <inf> transport: Subscribed to topic F4CE36001328/my/subscribe/topic
[00:01:00.572,509] <inf> transport: Published message: "Hello MQTT! Current uptime is: 60569" on topic: "F4CE36001328/my/publish/topic"
[00:02:00.573,059] <inf> transport: Published message: "Hello MQTT! Current uptime is: 120569" on topic: "F4CE36001328/my/publish/topic"

我这里使用MQTTx调试工具,连上test.mosquitto.org,并订阅F4CE36001328/my/subscribe/topic

image.png

image.png

连接到服务器后,我们可以看到互发消息成功:

image.png

这是基于例程创建的工程,那么mqtt就跑起来了。下面我将介绍如何配置连接到自己的mqtt服务器中。

【mqtt连接配置分析】

Zephyr的mqtt示例中有一个配置文件src/modules/transport/Kconfig.transport,在这里有一个mqtt的域名设置的宏MQTT_SAMPLE_TRANSPORT_BROKER_HOSTNAME

image.png

如果我们需要连接到自己的指定的服务,那么我就把这个宏的值进行修改就行了。

在mqtt的连接中,除了域名,还有一个是端口号,通常使用1883。当然也可以通过服务器的设置,改变为其的端口号。这个域名端口号的配置,在工程中是在配置文件overlay-tls-nrf70.conf中来定义的:

image.png

拿到这两个参数,我就可以修改这两个宏定义来连接我自己的mqtt服务器了。

我使用emqx来搭建了一个自己的服务器:ip地址为19.168.3.231,端口为1883,我使用mqttx进行了连接:

image.png

同时我修改参数并下载到开发板

image.png

image.png

下载到开发板,我打开日志,看到可以连接到wifi,但是没有连接上mqtt服务器:

image.png

【问题查找】

因为我是第一次使用Zephyr来进行mqtt的连接,我起先使用免费的服务器的test.mosquitto.org 的8883端口进行连接是正常的,我这里只修改了IP与端口号,说明程序没有问题。还有我使用mqttx客户端连接到我的服务器也是正常的。想起来应该没有问题呀。然后我就折磨了一晚上,当我睡时突然想到了8883是基于TLS连接的,是不是问题出在这里。

【解决方法】

我使用AI工具对overlay-tls-nrf70.conf进行了解析,重新配置了参数,参数如下:

# TLS
CONFIG_MQTT_LIB_TLS=n
CONFIG_MQTT_HELPER_PORT=1883
CONFIG_MQTT_KEEPALIVE=30
# Credentials located under <sample-dir>/src/modules/transport/credentials/ will be automatically
# provisioned prior to connecting to the server by the MQTT helper library.
# CONFIG_MQTT_HELPER_SEC_TAG=955
# CONFIG_MQTT_HELPER_PROVISION_CERTIFICATES=y
# CONFIG_MQTT_HELPER_CERTIFICATES_FOLDER="src/modules/transport/credentials"
# Native network stack
CONFIG_NRF_SECURITY=n
CONFIG_MBEDTLS=n
CONFIG_MBEDTLS_ENABLE_HEAP=n
# CONFIG_MBEDTLS_HEAP_SIZE=81920
CONFIG_MBEDTLS_RSA_C=n
# NET Sockets
CONFIG_NET_SOCKETS_SOCKOPT_TLS=n
# TLS credentials
CONFIG_TLS_CREDENTIALS_BACKEND_PROTECTED_STORAGE=n

就是把TLS的配置项都修改为n,重新编译工程并下载到开发板打印日志如下:

*** Booting nRF Connect SDK v2.9.0-7787b2649840 ***
*** Using Zephyr OS v3.7.99-1f8f3dc29142 ***
[00:00:00.605,926] <inf> network: Bringing network interface up and connecting to the network
[00:00:09.222,564] <inf> wifi_mgmt_ext: Connection requested
[00:00:19.591,308] <inf> network: Network connectivity established
[00:00:20.181,640] <inf> network: Network connectivity lost
[00:00:20.705,474] <inf> network: Network connectivity established
[00:00:25.740,142] <inf> transport: Connected to MQTT broker
[00:00:25.740,173] <inf> transport: Hostname: 192.168.3.20
[00:00:25.740,203] <inf> transport: Client ID: F4CE36001328
[00:00:25.740,234] <inf> transport: Port: 1883
[00:00:25.740,234] <inf> transport: TLS: No
[00:00:25.740,295] <inf> transport: Subscribing to: F4CE36001328/my/subscribe/topic
[00:00:25.751,953] <inf> transport: Subscribed to topic F4CE36001328/my/subscribe/topic
[00:01:00.608,123] <inf> transport: Published message: "Hello MQTT! Current uptime is: 60606" on topic: "F4CE36001328/my/publish/topic"
[00:01:23.971,832] <inf> transport: Received payload: "msg": "hello" on topic: F4CE36001328/my/subscribe/topic
[00:02:00.608,642] <inf> transport: Published message: "Hello MQTT! Current uptime is: 120607" on topic: "F4CE36001328/my/publish/topic"
[00:03:00.608,520] <inf> transport: Published message: "Hello MQTT! Current uptime is: 180607" on topic: "F4CE36001328/my/publish/topic"
[00:04:00.608,764] <inf> transport: Published message: "Hello MQTT! Current uptime is: 240607" on topic: "F4CE36001328/my/publish/topic"
uart:~$

说明连接成功了。

打开mqttx客户端,也成功的收到消息,同时发布消息在开发板上也成功收到了:

image.png

【总结】

经过两天的学习,终于把mqtt给调通了。在调试的过程中,我用win11开的服务器,有时开发板连不上,后面我用macOS重新了服务器,就成功收到了。如果报错误码:-116,说明开发板与服务器连接不成功,需要重启一下服务端。

[00:05:40.917,846] <err> mqtt_helper: mqtt_connect, error: -116
[00:05:40.917,877] <err> transport: Failed connecting to MQTT, error code: -116

在连接好mqtt后,我接下来就可以实现物联网的其他工作了。




关键词: nRF7002DK     Zephyr     MQTT    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]