跳到主要内容

Raspberry Pi 开发说明

本章节包含以下部分,请按需阅读:

配置开发环境

1. 安装和配置

  • 关于树莓派系统安装与使用可以参考这个链接
  • 成功开机后,进行树莓派环境配置

2. 下载程序

sudo apt install cmake -y
sudo apt install -y liblgpio-dev
cd ~
#国内用gitee下载
git clone https://gitee.com/waveshare/core2021-xf.git
#国外用github下载
git clone https://github.com/waveshare/core2021-xf.git
cd core2021-xf/examples/raspberrypi

3. 打开树莓派 SPI 接口

  • 在树莓派终端输入命令:sudo raspi-config nonint do_spi 0

硬件连接

参考下表进行连接

Core2021-XFRaspberry Pi (BCM)
CLK11
MISO9
MOSI10
CS25
IRQ17
RESET22
BUSY24

示例程序

  • Raspberry Pi 示例程序位于 示例程序包core2021-xf/examples/raspberrypi 目录中。
  • 示例 01,02,03 都需要两个 Core2021-XF 模块,一个发送,一个接收。
示例程序基础例程说明依赖库
01_lr2021_txLR2021 发送RadioLib
02_lr2021_rxLR2021 接收RadioLib
03_lr2021_pingpongLR2021 PingPongRadioLib
04_lr2021_tx_cwLR2021 以 CW 模式发送RadioLib
05_lr2021_LoRaWANLoRaWANRadioLib

01_lr2021_tx

【程序说明】

  • 基于 树莓派 + Core2021-XF 模块,使用中断方式实现 LoRa 数据包周期性发送
  • 专用硬件引脚配置,适配树莓派 SPI 与 GPIO 接口
  • 采用非阻塞发送机制,运行高效稳定
  • 每 1 秒自动发送一包带序号的测试数据,适合长期稳定运行

【脚本说明】

  • build.sh:工程编译脚本,自动创建构建目录、生成 Makefile、编译项目,输出可执行文件
  • clean.sh:工程清理脚本,快速删除编译生成的文件,还原工程目录

【代码分析】

  • PiHal* hal = new PiHal(0, SPI_FREQ_HZ):树莓派硬件初始化,配置 SPI 总线与时钟
  • radio.irqDioNum = 11:配置 LR2021 模块中断映射引脚
  • radio.XTAL = true:开启外部晶振,保证通信频率精度
  • setFlag(void):中断回调函数,发送完成后自动标记状态
  • radio.setPacketSentAction(setFlag):绑定发送完成中断
  • radio.startTransmit():启动 LoRa 数据包异步发送
  • radio.finishTransmit():发送完成后关闭射频电路,确保稳定低功耗
  • 主循环:检测发送完成 → 打印日志 → 延时 → 发送下一包数据

【程序使用】

  • 进入到lr2021_tx目录,执行编译运行:
cd ~/core2021-xf/examples/raspberrypi/lr2021_tx
chmod +x *
./build.sh
./build/01_lr2021_tx

【运行效果】

  • 编译运行后终端实时打印发送状态与数据包序号,可搭配接收模块完成通信测试

02_lr2021_rx

【程序说明】

  • 基于 树莓派 + Core2021-XF 模块,使用中断方式实现 LoRa 数据包无线接收
  • 专用硬件引脚配置,适配树莓派 SPI 与 GPIO 接口
  • 采用非阻塞监听模式,实时接收数据,运行高效稳定
  • 接收成功后自动打印数据长度、RSSI、SNR、HEX 及字符串格式,便于调试

【脚本说明】

  • build.sh:工程编译脚本,自动创建构建目录、生成 Makefile、编译项目,输出可执行文件
  • clean.sh:工程清理脚本,快速删除编译生成的文件,还原工程目录

【代码分析】

  • PiHal* hal = new PiHal(0, SPI_FREQ_HZ):树莓派硬件初始化,配置 SPI 总线与时钟
  • radio.irqDioNum = 11:配置 LR2021 模块中断映射引脚
  • radio.XTAL = true:开启外部晶振,保证通信频率精度
  • setFlag(void):中断回调函数,接收完成后自动标记状态
  • radio.setPacketReceivedAction(setFlag):绑定接收完成中断
  • radio.startReceive():启动 LoRa 异步监听模式
  • radio.readData():读取接收到的数据包,支持 HEX 与字符串解析
  • radio.getRSSI() / radio.getSNR():获取信号质量参数
  • 主循环:检测接收完成 → 解析数据 → 打印信息 → 重新开启监听

【程序使用】

  • 进入到lr2021_rx目录,执行编译运行:
cd ~/core2021-xf/examples/raspberrypi/lr2021_rx
chmod +x *
./build.sh
./build/02_lr2021_rx

【运行效果】

  • 编译运行后终端实时打印接收状态、数据内容、信号质量,可搭配发送模块完成完整通信测试

03_lr2021_pingpong

【程序说明】

  • 基于 树莓派 + Core2021-XF 模块,实现 LoRa 自动乒乓收发(一问一答) 双向通信
  • 专用硬件引脚配置,适配树莓派 SPI 与 GPIO 接口
  • 中断驱动非阻塞模式,自动切换发送 / 接收状态
  • 两块设备即可互发互收,无需手动控制,适合双向链路验证

【脚本说明】

  • build.sh:工程编译脚本,自动创建构建目录、生成 Makefile、编译项目,输出可执行文件
  • clean.sh:工程清理脚本,快速删除编译生成的文件,还原工程目录

【代码分析】

  • PiHal* hal = new PiHal(0, SPI_FREQ_HZ):树莓派硬件初始化,配置 SPI 总线与时钟
  • radio.irqDioNum = 11:配置 LR2021 模块中断映射引脚
  • radio.XTAL = true:开启外部晶振,保证通信频率精度
  • setFlag(void):通用中断回调,发送/接收完成都会触发
  • INITIATING_NODE:宏定义,用于区分主动发起节点
  • radio.startTransmit():启动数据包发送
  • radio.startReceive():切换模块到监听状态
  • radio.readData():读取接收的 LoRa 数据包并解析
  • 主逻辑:发送完成→进入接收;接收完成→延时回复→再次发送

【程序使用】

  • 进入到lr2021_pingpong目录,执行编译运行:
cd ~/core2021-xf/examples/raspberrypi/lr2021_pingpong
chmod +x *
./build.sh
./build/03_lr2021_pingpong

【运行效果】

  • 两块树莓派设备自动互发互收,终端实时打印收发状态、数据、RSSI、SNR

04_lr2021_tx_cw

【程序说明】

  • 基于 树莓派 + Core2021-XF 模块,实现 LoRa 固定频率连续载波发射
  • 专用硬件引脚配置,适配树莓派 SPI 与 GPIO 接口
  • 输出纯净连续射频信号,无数据包格式,用于仪器校准、频段测试、信号检测
  • 发射频率:868MHz,发射功率:22dBm
  • 上电后立即持续发射,程序稳定无额外操作

【脚本说明】

  • build.sh:工程编译脚本,自动创建构建目录、生成 Makefile、编译项目,输出可执行文件
  • clean.sh:工程清理脚本,快速删除编译生成的文件,还原工程目录

【代码分析】

  • PiHal* hal = new PiHal(0, SPI_FREQ_HZ):树莓派硬件初始化,配置 SPI 总线与时钟
  • radio.XTAL = true:开启外部晶振,保证载波频率精度
  • OUT_HZ 868000000UL:定义连续发射频率(868MHz)
  • radio.setOutputPower(22):配置发射功率为 22dBm
  • radio.transmitDirect(OUT_HZ):进入直接连续发射模式,输出固定频率载波

【程序使用】

  • 进入到04_lr2021_tx_cw目录,执行编译运行:
cd ~/core2021-xf/examples/raspberrypi/04_lr2021_tx_cw
chmod +x *
./build.sh
./build/04_lr2021_tx_cw

【运行效果】

  • 程序运行后模块立即输出固定频率连续载波信号,可使用频谱仪或接收设备检测到稳定射频信号

05_lr2021_LoRaWAN

【程序说明】

  • 基于 树莓派 + Core2021-XF 模块,实现 LoRaWAN OTAA 入网 + 周期性上报 + 下行接收
  • 使用文件 lorawan_state.bin 持久化保存会话信息,掉电重启可快速恢复,无需重复入网
  • 专用硬件引脚配置,完美适配树莓派 SPI / GPIO 接口
  • 每 5 分钟自动上传随机测试数据,支持下行指令解析
  • 实时打印入网状态、信号质量、上下行数据,便于调试与部署

【脚本说明】

  • build.sh:工程编译脚本,自动创建构建目录、生成 Makefile、编译项目,输出可执行文件
  • clean.sh:工程清理脚本,快速删除编译生成的文件,还原工程目录

【代码分析】

  • PiHal* hal = new PiHal(0, SPI_FREQ_HZ):树莓派硬件初始化,SPI0 + 8MHz 时钟
  • radio.irqDioNum = 11:配置 LR2021 中断映射,确保通信稳定
  • radio.XTAL = true:开启外部晶振,保证 LoRaWAN 频点精度
  • saveLoRaWANState():将会话数据保存到本地文件,实现持久化
  • restoreLoRaWANState():从文件恢复会话,支持快速重连
  • node.beginOTAA() / node.activateOTAA():OTAA 入网关键函数
  • node.sendReceive():发送上行数据并监听服务器下行
  • printHex / printAscii:格式化打印下行数据

【程序使用】

  • 进入到05_lr2021_LoRaWAN目录,执行编译运行:
cd ~/core2021-xf/examples/raspberrypi/05_lr2021_LoRaWAN
chmod +x *
./build.sh
./build/05_lr2021_LoRaWAN

【运行效果】

  • 程序运行后自动完成 OTAA 接入,周期性上报数据并接收服务器下行
  • 终端实时打印入网状态、上传记录、信号质量、下行内容,运行稳定可靠