Zephyr OS 入门与实战

第15课: LoRaWAN 集成 - SX1276 OTAA入网与数据加密传输

LoRaWAN 集成

1. 基于 SX1276 的 OTAA 入网

OTAA (Over-The-Air Activation) 是 LoRaWAN 设备入网的推荐方式,提供了更高的安全性。

硬件准备

  • SX1276 LoRa 模块
  • 支持 Zephyr 的开发板 (如 Nordic nRF52 系列)
  • 天线

Zephyr 配置

首先需要在 prj.conf 中启用 LoRaWAN 支持:

# LoRa 驱动配置
CONFIG_LORA=y
CONFIG_LORA_SX12XX=y
CONFIG_LORA_SX1276=y

# LoRaWAN 配置
CONFIG_LORAWAN=y
CONFIG_LORAWAN_SYSTEM_MAX_RX_ERROR=20
CONFIG_LORAWAN_APP_DEV_EUI="your_dev_eui"
CONFIG_LORAWAN_APP_JOIN_EUI="your_join_eui"
CONFIG_LORAWAN_APP_KEY="your_app_key"
CONFIG_LORAWAN_APP_PORT=1

OTAA 入网代码

#include <zephyr.h>
#include <lorawan/lorawan.h>

#define LORAWAN_DEV_EUI { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define LORAWAN_JOIN_EUI { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
#define LORAWAN_APP_KEY { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }

void main(void)
{
struct lorawan_join_config join_cfg = {
.mode = LORAWAN_ACT_OTAA,
.dev_eui = LORAWAN_DEV_EUI,
.join_eui = LORAWAN_JOIN_EUI,
.app_key = LORAWAN_APP_KEY,
.nb_trials = 3
};

if (lorawan_start()) {
printk("LoRaWAN stack启动失败\n");
return;
}

if (lorawan_join(&join_cfg)) {
printk("OTAA入网失败\n");
return;
}

printk("OTAA入网成功\n");
}
注意: 实际使用时需要替换 DEV_EUI, JOIN_EUI 和 APP_KEY 为你的设备凭证。

2. 上行数据加密传输

LoRaWAN 使用 AES-128 加密算法对传输数据进行端到端加密。

发送加密数据

void send_encrypted_data(void)
{
uint8_t data[] = {0x48, 0x65, 0x6C, 0x6C, 0x6F}; // "Hello"
int ret;

ret = lorawan_send(2, data, sizeof(data), LORAWAN_MSG_CONFIRMED);

if (ret < 0) {
printk("发送失败: %d\n", ret);
} else {
printk("数据已发送\n");
}
}

接收加密数据

static void lorawan_rx_handler(uint8_t port, bool data_pending,
int16_t rssi, int8_t snr,
uint8_t len, const uint8_t *data)
{
printk("收到端口 %d 的数据:\n", port);
printk("RSSI: %ddB, SNR: %ddB\n", rssi, snr);
printk("数据长度: %d\n", len);

for (int i = 0; i < len; i++) {
printk("%02x ", data[i]);
}
printk("\n");
}

void main(void)
{
// ... OTAA 入网代码 ...

// 设置接收回调
lorawan_register_rx_callback(lorawan_rx_handler);

while (1) {
k_sleep(K_SECONDS(30));
send_encrypted_data();
}
}
重要: 确保你的 LoRaWAN 网络服务器和应用服务器使用相同的 AppKey 来解密数据。

调试技巧

  • 使用 CONFIG_LORAWAN_LOG_LEVEL_DBG=y 启用调试日志
  • 检查天线连接和射频参数配置
  • 验证设备 EUI 和密钥是否正确
  • 确保网关覆盖范围足够
客服小姐姐(优先添加)
访问我们的店铺
客服微信
联系客服微信