Raspberry Pi Pico 使用
本章节包含以下部分,请按需阅读:
配置开发环境
1. 安装和配置
- 关于 Raspberrypi Pico 的环境搭建跟基本使用,请参考以下链接:
- 环境搭建完成后,即可连接传感器,下载示例程序
硬件连接
参考下表进行连接
| Core2021-XF | Raspberry Pi Pico/Pico2 |
|---|---|
| CLK | 10 |
| MISO | 11 |
| MOSI | 12 |
| CS | 13 |
| IRQ | 15 |
| RESET | 5 |
| BUSY | 14 |
示例程序
- Raspberry Pi Pico 示例程序位于 示例程序包 的
core2021-xf\examples\pico目录中。 - 示例 01,02,03 都需要两个 Core2021-XF 模块,一个发送,一个接收。
| 示例程序 | 基础例程说明 | 依赖库 |
|---|---|---|
| 01_lr2021_tx | LR2021 发送 | RadioLib |
| 02_lr2021_rx | LR2021 接收 | RadioLib |
| 03_lr2021_pingpong | LR2021 PingPong | RadioLib |
| 04_lr2021_tx_cw | LR2021 以 CW 模式发送 | RadioLib |
| 05_lr2021_LoRaWAN | LoRaWAN | RadioLib |
-
选择好芯片型号跟端口

-
上传完成后,打开串口监测器,就会输出相关的信息
01_lr2021_tx
【程序说明】
- 基于 树莓派 Pico + Core2021-XF 模块,使用 中断方式 实现 LoRa 数据包周期性发送
- 使用 Pico/Pico2 硬件 SPI1 端口,自定义 SPI 引脚映射
- 采用非阻塞发送机制,不占用主循环 CPU 资源
- 每发送完成一包数据,自动延时 1 秒后继续发送下一包
- 支持字符串数据发送,自带数据包序号,方便调试
【代码分析】
SPI1.setSCK / setRX / setTX:RP2040 硬件 SPI1 引脚重新映射SPI1.begin():启动树莓派 Pico 硬件 SPI1radio.irqDioNum = 11:配置 LR2021 模块中断映射引脚,必须在初始化前设置radio.XTAL = true:开启外部晶振,保证频率精度setFlag(void):中断回调函数,模块发送完成后自动触发,标记发送完成标志radio.setPacketSentAction(setFlag):绑定发送完成中断函数radio.startTransmit("内容"):启动 LoRa 异步发送,支持字符串 / 字节数组radio.finishTransmit():发送完成后收尾操作,关闭发射电路、复位模块状态loop()主逻辑:检测发送完成标志 → 打印状态 → 延时 → 发送下一包带序号的数据
【运行效果】
-
程序编译下载完成,打开串口监控可以看到打印发送完成的日志,如下图所示(搭配02_lr2021_rx):

02_lr2021_rx
【程序说明】
- 基于 树莓派 Pico + Core2021-XF 模块,使用中断方式实现 LoRa 数据包无线接收
- 使用 Pico/Pico2 硬件 SPI1 端口,支持自定义引脚映射
- 采用非阻塞监听模式,模块自动等待数据,不占用 CPU 资源
- 接收成功后自动解析数据,并打印数据包内容、RSSI 信号强度、SNR 信噪比
- 必须与发送端配置相同频率、扩频因子、带宽、编码率才能正常通信
【代码分析】
SPI1.setSCK / setRX / setTX:RP2040 硬件 SPI1 引脚重新映射配置SPI1.begin():初始化树莓派 Pico 硬件 SPI1 总线radio.irqDioNum = 11:配置 LR2021 模块中断映射引脚,必须在初始化前设置radio.XTAL = true:开启外部晶振,保证频率精度,提升接收稳定性setFlag(void):中断回调函数,模块接收到完整数据包后自动触发radio.setPacketReceivedAction(setFlag):绑定接收完成中断服务函数radio.startReceive():启动 LoRa 连续接收模式,进入等待数据状态radio.readData(str):读取接收到的无线数据,支持字符串格式解析radio.getRSSI()/radio.getSNR():获取信号质量参数,用于调试与链路评估loop()主逻辑:检测接收完成标志 → 读取数据 → 解析打印 → 继续监听
【运行效果】
-
程序编译下载完成,打开串口监控可以看到实时接收日志,包含数据内容、RSSI、SNR 信息,如下图所示(搭配01_lr2021_tx):

03_lr2021_ping_pong
【程序说明】
- 基于 树莓派 Pico + Core2021-XF 模块,实现 LoRa 自动乒乓收发(一问一答)双向通信
- 使用 Pico/Pico2 硬件 SPI1 端口,支持任意引脚映射
- 两块模块即可完成互发互收,无需手动控制
- 开启
INITIATING_NODE为发起端,另一块为接收端 - 自动切换发送 / 接收状态,非阻塞中断驱动
【代码分析】
SPI1.setSCK / setRX / setTX:树莓派 Pico SPI1 引脚重映射SPI1.begin():初始化硬件 SPI1 总线radio.irqDioNum = 11:配置 LR2021 中断映射引脚,必须在初始化前设置radio.XTAL = true:开启外部晶振,保证通信频率精度setFlag(void):通用中断回调,发送完成或接收完成都会触发radio.setIrqAction(setFlag):绑定收发共用中断函数INITIATING_NODE宏定义:用于区分主动发起节点radio.startTransmit():启动数据包发送radio.startReceive():切换模块到监听接收状态radio.readData(str):读取接收到的 LoRa 数据包loop()主逻辑:发送完成 → 进入接收;接收完成 → 延时回复 → 再次发送
【运行效果】
- 两块模块分别烧录程序,一块打开
INITIATING_NODE宏定义 - 上电后自动互发互收,串口打印收发状态、数据、RSSI、SNR,如下图所示:

04_lr2021_tx_cw
【程序说明】
- 基于 树莓派 Pico + Core2021-XF 模块,实现 LoRa 直接载波发射(CW/Direct Transmit)
- 使用 Pico/Pico2 硬件 SPI1 端口,支持任意引脚映射
- 输出固定频率的连续载波信号,无数据包格式,用于频段测试、信号检测、仪器校准
- 固定频率 868MHz,发射功率 22dBm
- 上电后持续发射,无额外逻辑操作
【代码分析】
SPI1.setSCK / setRX / setTX:树莓派 Pico SPI1 引脚重映射配置SPI1.begin():初始化硬件 SPI1 总线radio.XTAL = true:开启外部晶振,保证载波频率精度OUT_HZ 868000000UL:定义直接发射频率(868MHz),可自行修改radio.setOutputPower(22):配置发射功率为 22dBmradio.transmitDirect(OUT_HZ):进入连续直接发射模式,输出固定频率载波loop():无业务逻辑,载波持续发射无需程序干预
【运行效果】
-
程序烧录后模块立即输出固定频率载波信号
-
串口打印初始化与发射启动状态,可使用频谱仪/接收模块检测到连续射频信号,如下图所示:

05_lr2021_LoRaWAN
【程序说明】
- 基于 树莓派 Pico + Core2021-XF 模块,实现 LoRaWAN OTAA 入网与上下行通信
- 使用 EEPROM 仿真存储 保存会话信息,掉电重启可快速恢复连接
- 自定义 SPI1 引脚映射,完全适配 Pico/Pico2 硬件设计
- 定时发送上行数据(默认 5 分钟),自动接收服务器下行消息
- 支持数据 HEX/ASCII 格式打印,便于调试与链路验证
【代码分析】
SPI1.setSCK/setRX/setTX:RP2040 硬件 SPI1 引脚重映射配置SPI1.begin():初始化树莓派 Pico 硬件 SPI1 总线radio.irqDioNum = 11:配置 LR2021 中断映射引脚,必须在初始化前设置radio.XTAL = true:开启外部晶振,保证 LoRaWAN 频点精度EEPROM.begin(256):初始化 RP2040 片上 Flash 模拟 EEPROMrestoreLoRaWANState():从 EEPROM 恢复会话信息,实现快速重连node.beginOTAA()/activateOTAA():OTAA 入网相关关键函数saveLoRaWANState():入网成功后保存会话信息到 EEPROMnode.sendReceive():发送上行数据并自动监听下行printHex/printAscii:格式化打印下行数据
【运行效果】
-
烧录程序后自动完成 OTAA 接入,周期性上报数据并接收下行
-
串口实时打印入网状态、上下行数据、信号质量等信息,如下图所示:
