返回首页

WiFi/Thread/GNSS 学习笔记

一、WiFi (nRF70 系列)

WiFi 协议栈架构

┌─────────────────────────────────────────┐
│        应用层 (Matter/MQTT/LwM2M)        │
├─────────────────────────────────────────┤
│           TCP/IP 协议栈                  │
├─────────────────────────────────────────┤
│           WiFi Host Stack               │
│  ┌─────────────┐  ┌─────────────┐       │
│  │ WiFi Driver │  │ Supplicant  │       │
│  │ (SPI/USB)   │  │ (WPA2/WPA3) │       │
│  └─────────────┘  └─────────────┘       │
├─────────────────────────────────────────┤
│           WiFi Baseband                 │
│  ┌─────────────┐  ┌─────────────┐       │
│  │ MAC Layer   │  │ PHY Layer   │       │
│  │ (CSMA/CA)   │  │ (调制解调)   │       │
│  └─────────────┘  └─────────────┘       │
└─────────────────────────────────────────┘

nRF70 系列特性

特性描述
WiFi 标准nRF70 系列主打 Wi-Fi 6(802.11ax)能力
频段依具体型号而定,常见为 2.4 GHz,部分型号支持双频
最大速率取决于具体芯片、带宽和主机接口配置
安全性WPA2/WPA3
接口SPI / QSPI(依平台与板卡实现)

WiFi 工作模式

Station (STA) 模式

// 连接到 AP
struct wifi_connect_req_params params = {
    .ssid = "MyNetwork",
    .ssid_length = 9,
    .psk = "password",
    .psk_length = 8,
    .security = WIFI_SECURITY_TYPE_PSK,
    .channel = WIFI_CHANNEL_ANY,
};

net_mgmt(NET_REQUEST_WIFI_CONNECT, iface, &params, sizeof(params));

SoftAP 模式

// 创建热点
struct wifi_ap_config ap_config = {
    .ssid = "nRF70_AP",
    .ssid_len = 8,
    .psk = "password",
    .psk_len = 8,
    .security = WIFI_SECURITY_TYPE_PSK,
};

net_mgmt(NET_REQUEST_WIFI_AP_ENABLE, iface, &ap_config, sizeof(ap_config));

WiFi Provisioning (配网)

通过 BLE 进行 WiFi 配网:

┌──────────┐    BLE     ┌──────────┐    WiFi    ┌──────────┐
│ 手机 App  │ ────────→ │ nRF 设备  │ ────────→ │  WiFi AP │
└──────────┘  SSID/PSK  └──────────┘           └──────────┘

配置选项:

# 启用 WiFi Provisioning
CONFIG_WIFI_PROVISIONING=y
CONFIG_WIFI_PROVISIONING_BLE=y

# 启用 SoftAP 配网
CONFIG_SOFTAP_WIFI_PROVISION=y

WiFi 示例项目

示例位置功能
stanrf/samples/wifi/staWiFi 站点模式
softapnrf/samples/wifi/softapWiFi 热点模式
shellnrf/samples/wifi/shellWiFi 命令行工具
promiscuousnrf/samples/wifi/promiscuous抓包/监听模式

二、Thread 协议

Thread 概述

Thread 是基于 802.15.4 的低功耗网状网络协议,专为智能家居设计。

┌─────────────────────────────────────────────┐
│            应用层 (Matter/CoAP)             │
├─────────────────────────────────────────────┤
│              UDP/TCP 层                     │
├─────────────────────────────────────────────┤
│              IPv6 层                        │
├─────────────────────────────────────────────┤
│           6LoWPAN 适配层                    │
├─────────────────────────────────────────────┤
│           Thread 协议层                     │
│  ┌──────────────────────────────────┐       │
│  │ Mesh Link Layer / MAC Layer      │       │
│  └──────────────────────────────────┘       │
├─────────────────────────────────────────────┤
│           IEEE 802.15.4 PHY                │
└─────────────────────────────────────────────┘

Thread 设备类型

类型缩写角色
Full Thread DeviceFTD全功能设备,可路由
Minimal Thread DeviceMTD精简功能设备
Sleepy End DeviceSED休眠终端设备
Minimal Sleepy End DeviceMED最小休眠设备
Router-路由器,转发数据
Leader-网络领导者

Thread 配置

# 启用 Thread
CONFIG_NETWORKING=y
CONFIG_NET_L2_OPENTHREAD=y

# 设备类型选择
CONFIG_OPENTHREAD_FTD=y          # 全功能设备
# CONFIG_OPENTHREAD_MTD=y        # 精简功能设备

# Thread 版本
CONFIG_OPENTHREAD_THREAD_VERSION_1_3=y

# 信道和 PAN ID
CONFIG_OPENTHREAD_CHANNEL=11
CONFIG_OPENTHREAD_PANID=43981

# 启用 Shell
CONFIG_OPENTHREAD_SHELL=y

OpenThread API

#include <openthread/thread.h>
#include <openthread/instance.h>

// 获取 Thread 实例
otInstance *instance = openthread_get_default_instance();

// 启动 Thread 网络
otThreadSetEnabled(instance, true);

// 获取网络信息
otNetworkName name;
otThreadGetNetworkName(instance, &name);

uint16_t panid = otLinkGetPanId(instance);
uint8_t channel = otLinkGetChannel(instance);

Thread CLI 命令

# 启动 Thread 网络
> ifconfig up
> thread start

# 查看网络状态
> state
> networkname
> panid
> channel

# 扫描网络
> scan

# 加入网络
> dataset networkkey 00112233445566778899aabbccddeeff
> dataset commit active
> thread start

Matter over Thread

Matter 是基于 Thread 的智能家居协议:

┌──────────────────────────────────┐
│        Matter 应用层             │
├──────────────────────────────────┤
│        Matter 协议栈             │
├──────────────────────────────────┤
│  Thread │  WiFi  │   Ethernet   │
└──────────────────────────────────┘

Matter 配置:

# 启用 Matter
CONFIG_CHIP=y
CONFIG_CHIP_DEVICE_TYPE=y

三、GNSS (nRF91 系列)

GNSS 概述

nRF91 系列内置 GNSS 接收器,支持多星座定位。

支持的卫星系统

系统国家/地区描述
GPS美国全球定位系统
GLONASS俄罗斯格洛纳斯
Galileo欧盟伽利略
BeiDou中国北斗
QZSS日本准天顶
SBAS-星基增强

GNSS API

nRF91 系列的 GNSS 典型用法是通过 Modem API,而不是通用的 zephyr/drivers/gnss.h 设备模型。

#include <nrf_modem_gnss.h>

struct nrf_modem_gnss_pvt_data_frame pvt;

/* 启用 GNSS */
nrf_modem_gnss_start();

/* 读取 PVT 数据 */
if (nrf_modem_gnss_read(&pvt, sizeof(pvt), NRF_MODEM_GNSS_DATA_PVT) == 0) {
    double latitude = pvt.latitude;
    double longitude = pvt.longitude;
    float altitude = pvt.altitude;
}

常见事件与数据类型

NRF_MODEM_GNSS_EVT_PVT        // 定位/卫星信息
NRF_MODEM_GNSS_EVT_FIX        // 获得 fix
NRF_MODEM_GNSS_EVT_NMEA       // NMEA 语句
NRF_MODEM_GNSS_EVT_AGNSS_REQ  // 请求辅助数据

NRF_MODEM_GNSS_DATA_PVT
NRF_MODEM_GNSS_DATA_NMEA
NRF_MODEM_GNSS_DATA_AGNSS_REQ

PPS (Pulse Per Second)

/* GNSS 相关细节建议以 nrf/samples/cellular/gnss 的当前实现为准,
 * 包括事件处理、辅助定位和定位模式配置。
 */

nRF91 GNSS 配置

# 典型 GNSS sample 配置项
CONFIG_GNSS_SAMPLE_LTE_ON_DEMAND=y
CONFIG_GNSS_SAMPLE_ASSISTANCE_NRF_CLOUD=y
# 或
CONFIG_GNSS_SAMPLE_ASSISTANCE_MINIMAL=y

# 调试输出
CONFIG_GNSS_SAMPLE_LOG_LEVEL_DBG=y

A-GPS (辅助 GPS)

#include <nrf_modem_gnss.h>

/* A-GNSS / P-GPS 常与 nRF Cloud assistance 一起使用,
 * 实际流程参考 nrf/samples/cellular/gnss/src/assistance*.c。
 */

低功耗定位

┌──────────────────────────────────┐
│ 正常模式:持续追踪               │
│ 功耗:~10-20 mA                 │
├──────────────────────────────────┤
│ 周期模式:定期定位               │
│ 功耗:~1-5 mA(平均)            │
├──────────────────────────────────┤
│ A-GPS 模式:快速定位             │
│ 定位时间:< 5 秒                 │
└──────────────────────────────────┘

GNSS 示例

位置:nrf/samples/cellular/gnss

功能:


示例项目构建

WiFi Station

west build -b nrf7002dk/nrf5340/cpuapp nrf/samples/wifi/sta

Thread 节点

west build -b nrf52840dk/nrf52840 nrf/samples/openthread/cli

GNSS 定位

west build -b nrf9160dk/nrf9160/ns nrf/samples/cellular/gnss

*小白 🤖 - 2026-03-18*