【AI桌面硬件大赏】 nRF54L15 + Zephyr RTOS:加密的 LoRa P2P 振动和音频

【AI桌面硬件大赏】 nRF54L15 + Zephyr RTOS:加密的 LoRa P2P 振动和音频

大家好,我用 nRF54L15 Sense 和 Zephyr RTOS 构建了一个无线传感器节点,它通过 BLE 将音频 FFT 数据流传输到 WebUI,并通过 LoRa 传输 IMU 数据。
 
阅读时长:9分钟
图片[1]-【AI桌面硬件大赏】 nRF54L15 + Zephyr RTOS:加密的 LoRa P2P 振动和音频 - 盘古CG网-盘古CG网

预览
项目所需物料
硬件组件
Seeed Studio Wio-SX1262 适用于 XIAO×1
 
项目详情

nRF54L15 是目前功能最强大的无线 SoC 之一,但几乎没有相关文档……尽管如此,我还是决定利用现有资源和 Zephyr 操作系统,在没有任何 RTOS 开发经验的情况下,着手进行研究。我构建了这个项目,旨在探索它的全部潜力:BLE 6.0、PDM 麦克风和 IMU 同时运行在 Zephyr RTOS 上,并结合定制的 LoRa P2P 链路,实现无需任何云服务的远距离数据传输。完全通过点对点方式与另一个 SoC(ESP32-S3)通信,数据通过免许可频段发送。

该系统由两个节点组成:nRF54L15 Sense(SeeedStudio 开发板)作为传感器节点,ESP32-S3 作为 LoRa 接收器中心。传感器节点通过 BLE 将 IMU 和 FFT 音频数据流传输到 Web 用户界面,同时通过 868 MHz 的 AES-128 加密 LoRa P2P 协议传输 IMU 振动数据。

Web 用户界面可可视化实时加速度计数据,并在发送节点 (nRF54L15) 上显示实时 FFT 频谱瀑布图。在接收端,则显示 2D/3D 振动密度图,以及可配置的 RMS 值和电池电压报警阈值。

主要挑战在于如何在 Zephyr 上同时运行 PDM 音频、IMU、BLE 和 LoRa 并保持稳定的吞吐量,而我之前几乎找不到相关的文档。OLED 显示屏可以配置为显示实时 PDM 音频 FFT 或 IMU 仪表盘,可通过 Web UI 上的 POST/GET 请求进行控制。值得一提的是,SeeedStudio Sense 版本有一个未焊接的电阻,它物理断开了内部 I2C 总线与 SoC 的连接。这意味着 OLED 无法通过硬件 I2C 驱动。解决方案是通过 Zephyr 的 GPIO 驱动程序以软件方式进行位操作来控制 I2C,虽然可行,但需要占用更多 CPU 资源,并且在同时运行 BLE 和 LoRa 时仍存在一些延迟。

https://oscimg.oschina.net//AiCreationDetail/up-a31c98d44aa69898234bab493a6ca84a.png
# 适用于 nRF54L15 的 BLE + LoRa P2P 组合
# 关键:通过使用内置的mbedtls修复了NRF_SECURITY + BLE冲突

CONFIG_BT = y
CONFIG_BT_PERIPHERAL = y
CONFIG_BT_DEVICE_NAME = "nRF54L15 BLE+LoRa"
CONFIG_BT_MAX_CONN = 1
CONFIG_BT_MAX_PAIRED = 1
CONFIG_CMSIS_DSP = y
CONFIG_CMSIS_DSP_TRANSFORM = y
CONFIG_CMSIS_DSP_FASTMATH = y
CONFIG_CMSIS_DSP_COMPLEXMATH = y
CONFIG_CMSIS_DSP_STATISTICS = y
CONFIG_FPU = y
CONFIG_FPU_SHARING = y
CONFIG_AUDIO = y
CONFIG_AUDIO_DMIC = y
CONFIG_AUDIO_DMIC_NRFX_PDM = y
CONFIG_NRFX_PDM = y
CONFIG_CBPRINTF_FP_SUPPORT = y
CONFIG_NEWLIB_LIBC = y
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF = y
CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC = y
CONFIG_BT_NUS = y
CONFIG_PWM = y
CONFIG_SERIAL = y
CONFIG_CONSOLE = y
CONFIG_UART_CONSOLE = y
CONFIG_PRINTK = y
CONFIG_LOG = y
CONFIG_LOG_BACKEND_UART = y
CONFIG_LOG_PRINTK = y
CONFIG_ASSERT = y
CONFIG_MAIN_STACK_SIZE = 16384
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE = 8192
CONFIG_BT_RX_STACK_SIZE = 8192
CONFIG_BT_HCI_TX_STACK_SIZE_WITH_PROMPT = y
CONFIG_BT_HCI_TX_STACK_SIZE = 4096
CONFIG_BT_CTLR_TX_PWR_PLUS_8 = y
CONFIG_HEAP_MEM_POOL_SIZE = 32768
CONFIG_BT_BUF_ACL_TX_SIZE = 251
CONFIG_BT_L2CAP_TX_MTU = 247
# 从 32 减少到 8:IMU 现在是 10Hz(~100ms),8 个缓冲区就足够了。
# 32 × 251B = 8KB 的堆内存,90% 的内存使用率导致发送时出现 ENOMEM (-12) 错误。
CONFIG_BT_BUF_ACL_TX_COUNT = 8
CONFIG_BT_BUF_EVT_RX_COUNT = 32
CONFIG_I2C = y
CONFIG_I2C_GPIO = y
CONFIG_SENSOR = y
CONFIG_LSM6DSL = y
CONFIG_LSM6DSL_TRIGGER_NONE = y
CONFIG_ADC = y
CONFIG_ADC_NRFX_SAADC = y
CONFIG_BT_BAS = n
CONFIG_BT_DIS = n
CONFIG_LOG_DEFAULT_LEVEL = 2
CONFIG_LOG_MODE_DEFERRED = y
CONFIG_SPI = y
配置输入= y
CONFIG_INPUT_GPIO_KEYS = y
CONFIG_INPUT_GPIO_QDEC = y

# ========== LoRa P2P ==========
CONFIG_LORA = y
CONFIG_LORAWAN = n
CONFIG_LORA_SX126X = y
CONFIG_LORA_LOG_LEVEL_WRN = y
CONFIG_COMPILER_OPT = "-Wno-double-promotion"
CONFIG_FLASH = y
CONFIG_FLASH_MAP = y

# ========== MbedTLS & Crypto(兼容 BLE 和 LoRa AES-CTR) ==========
CONFIG_NRF_SECURITY = y
CONFIG_MBEDTLS_LEGACY_CRYPTO_C = y
CONFIG_MBEDTLS_CIPHER_MODE_CTR = y
CONFIG_MBEDTLS_ENABLE_HEAP = y
CONFIG_MBEDTLS_HEAP_SIZE = 8192

# ========== 系统监控与诊断(已禁用) ==========
# SYS_HEAP_RUNTIME_STATS、THREAD_MONITOR、INIT_STACKS 和 STACK_INFO
# 更改 nRF54L11 上的堆底部/线程结构布局,
# 破坏了与 MPSL 控制器的 BLE RPC 共享内存,导致
# 在 bt_enable() 期间发生总线故障 (BFAR 0x1000b)。

 

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容