┌─────────────────────────────────────────┐
│ 应用层 (Matter/MQTT/LwM2M) │
├─────────────────────────────────────────┤
│ TCP/IP 协议栈 │
├─────────────────────────────────────────┤
│ WiFi Host Stack │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ WiFi Driver │ │ Supplicant │ │
│ │ (SPI/USB) │ │ (WPA2/WPA3) │ │
│ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────┤
│ WiFi Baseband │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ MAC Layer │ │ PHY Layer │ │
│ │ (CSMA/CA) │ │ (调制解调) │ │
│ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────┘
| 特性 | 描述 |
|---|---|
| WiFi 标准 | nRF70 系列主打 Wi-Fi 6(802.11ax)能力 |
| 频段 | 依具体型号而定,常见为 2.4 GHz,部分型号支持双频 |
| 最大速率 | 取决于具体芯片、带宽和主机接口配置 |
| 安全性 | WPA2/WPA3 |
| 接口 | SPI / QSPI(依平台与板卡实现) |
// 连接到 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, ¶ms, sizeof(params));
// 创建热点
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));
通过 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
| 示例 | 位置 | 功能 |
|---|---|---|
| sta | nrf/samples/wifi/sta | WiFi 站点模式 |
| softap | nrf/samples/wifi/softap | WiFi 热点模式 |
| shell | nrf/samples/wifi/shell | WiFi 命令行工具 |
| promiscuous | nrf/samples/wifi/promiscuous | 抓包/监听模式 |
Thread 是基于 802.15.4 的低功耗网状网络协议,专为智能家居设计。
┌─────────────────────────────────────────────┐
│ 应用层 (Matter/CoAP) │
├─────────────────────────────────────────────┤
│ UDP/TCP 层 │
├─────────────────────────────────────────────┤
│ IPv6 层 │
├─────────────────────────────────────────────┤
│ 6LoWPAN 适配层 │
├─────────────────────────────────────────────┤
│ Thread 协议层 │
│ ┌──────────────────────────────────┐ │
│ │ Mesh Link Layer / MAC Layer │ │
│ └──────────────────────────────────┘ │
├─────────────────────────────────────────────┤
│ IEEE 802.15.4 PHY │
└─────────────────────────────────────────────┘
| 类型 | 缩写 | 角色 |
|---|---|---|
| Full Thread Device | FTD | 全功能设备,可路由 |
| Minimal Thread Device | MTD | 精简功能设备 |
| Sleepy End Device | SED | 休眠终端设备 |
| Minimal Sleepy End Device | MED | 最小休眠设备 |
| Router | - | 路由器,转发数据 |
| Leader | - | 网络领导者 |
# 启用 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
#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 网络
> ifconfig up
> thread start
# 查看网络状态
> state
> networkname
> panid
> channel
# 扫描网络
> scan
# 加入网络
> dataset networkkey 00112233445566778899aabbccddeeff
> dataset commit active
> thread start
Matter 是基于 Thread 的智能家居协议:
┌──────────────────────────────────┐
│ Matter 应用层 │
├──────────────────────────────────┤
│ Matter 协议栈 │
├──────────────────────────────────┤
│ Thread │ WiFi │ Ethernet │
└──────────────────────────────────┘
Matter 配置:
# 启用 Matter
CONFIG_CHIP=y
CONFIG_CHIP_DEVICE_TYPE=y
nRF91 系列内置 GNSS 接收器,支持多星座定位。
| 系统 | 国家/地区 | 描述 |
|---|---|---|
| GPS | 美国 | 全球定位系统 |
| GLONASS | 俄罗斯 | 格洛纳斯 |
| Galileo | 欧盟 | 伽利略 |
| BeiDou | 中国 | 北斗 |
| QZSS | 日本 | 准天顶 |
| SBAS | - | 星基增强 |
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
/* GNSS 相关细节建议以 nrf/samples/cellular/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
#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 秒 │
└──────────────────────────────────┘
位置:nrf/samples/cellular/gnss
功能:
west build -b nrf7002dk/nrf5340/cpuapp nrf/samples/wifi/sta
west build -b nrf52840dk/nrf52840 nrf/samples/openthread/cli
west build -b nrf9160dk/nrf9160/ns nrf/samples/cellular/gnss
*小白 🤖 - 2026-03-18*