3. 开发环境搭建:Keil/Arduino IDE安装、LoRa库导入、串口调试工具配置、硬件连接验证
好,咱们正式开始动手了。这一章我带你把开发环境搭起来。别小看这一步,我见过太多人卡在环境配置上,代码写好了却编译不过,或者板子连不上电脑。咱们一步步来,稳一点。
3.1 开发工具的选择:Keil 还是 Arduino IDE?
做 LoRa 农业节点,主流的方案有两个:用 Keil 开发 STM32,或者用 Arduino IDE 开发 ESP32/AVR。我个人更推荐初学者从 Arduino IDE 入手。为什么?因为 LoRa 库在 Arduino 生态里最成熟,你写几行代码就能发数据。Keil 当然也能做,但配置复杂,适合量产项目。
不过话说回来,如果你手头只有 STM32 开发板,那还是得用 Keil。我两种都讲,你根据自己情况选。
| 对比项 | Arduino IDE | Keil MDK |
|---|---|---|
| 上手难度 | 低,即装即用 | 高,需配置芯片包 |
| LoRa库支持 | 丰富(LoRa.h、RadioLib等) | 需手动移植 |
| 调试功能 | 串口打印为主 | 支持JTAG/SWD硬件调试 |
| 适用场景 | 原型验证、教学 | 产品开发、工业级 |
3.2 Arduino IDE 安装与配置
先讲 Arduino IDE。去官网下载最新版,我写教程时用的是 2.x 版本,界面比老版清爽不少。安装过程很简单,一路 Next 就行。
装完之后,记得做两件事:
- 安装开发板支持包:如果你用 ESP32,在「文件 → 首选项」里添加开发板管理器网址:
https://espressif.github.io/arduino-esp32/package_esp32_index.json。然后去「工具 → 开发板 → 开发板管理器」搜索 ESP32 安装。 - 选择正确的端口:插上 USB 线后,在「工具 → 端口」里选对 COM 口。我刚开始学的时候,经常选错端口,编译上传半天没反应,后来养成习惯:插线前看一眼设备管理器,确认端口号。
3.3 LoRa 库的导入
库是 LoRa 通信的灵魂。Arduino 生态里最常用的是 LoRa.h 这个库,由 Sandeep Mistry 维护。安装方法很简单:
- 打开 Arduino IDE,点击「工具 → 管理库」。
- 搜索框输入 "LoRa by Sandeep Mistry"。
- 点击安装,版本选最新的稳定版就行。
装完之后,你可以打开示例代码验证一下:文件 → 示例 → LoRa → LoRaSender。如果能正常编译,说明库已经装好了。
这里有个坑:有些国产 LoRa 模块(比如安信可的 Ra-01)用的是 SX1278 芯片,和 LoRa.h 库完全兼容。但如果你用的是 Ebyte 的 E32 系列,那得用专门的 EBYTE.h 库。我踩过这个坑,买回来发现库不通用,又折腾了半天。
3.4 Keil MDK 的安装与 LoRa 库移植
如果你坚持用 Keil,那流程会复杂一些。首先安装 Keil MDK,注意版本要 5.38 以上,否则不支持新芯片。装完后安装对应的芯片包(比如 STM32F1xx_DFP)。
LoRa 库在 Keil 里没有现成的包,需要手动移植。我一般从 GitHub 下载 sandeepmistry/arduino-LoRa 的源码,然后把 src 目录下的 .cpp 和 .h 文件复制到 Keil 工程里。记得还要移植 SPI 驱动,因为 LoRa 模块是通过 SPI 通信的。
嗯,这里要提醒你:Keil 下的 LoRa 库移植,本质上是把 Arduino 的 API 映射到 STM32 的 HAL 库上。如果你对 HAL 库不熟,建议先用 Arduino 做原型验证,再移植到 Keil。
3.5 串口调试工具配置
串口调试是嵌入式开发的「眼睛」。我推荐两个工具:
- Arduino IDE 自带的串口监视器:简单够用,波特率设置好就能看数据。
- SSCOM(串口调试助手):功能更强,支持 HEX 显示、自动发送、文件发送。我调试 LoRa 数据包时喜欢用这个,因为能看到原始字节。
配置要点:
- 波特率:LoRa 节点一般用 115200 或 9600,和代码里 Serial.begin() 保持一致。
- 数据位:8,停止位:1,无校验。这是最通用的配置。
- 流控:关掉。LoRa 模块不需要硬件流控。
避坑指南:我曾经在调试时发现串口打印乱码,折腾了半天,最后发现是 USB 转串口模块的 TX/RX 接反了。记住:模块的 TX 接板子的 RX,模块的 RX 接板子的 TX。交叉连接,别搞错。
3.6 硬件连接验证
环境搭好了,库也导入了,接下来验证硬件连接。以最常见的 ESP32 + SX1278 模块为例,接线如下:
| ESP32 引脚 | SX1278 模块 | 说明 |
|---|---|---|
| 3.3V | VCC | 供电,注意是 3.3V 不是 5V |
| GND | GND | 共地 |
| GPIO18 | SCK | SPI 时钟 |
| GPIO19 | MISO | 主入从出 |
| GPIO23 | MOSI | 主出从入 |
| GPIO5 | NSS | 片选,可自定义 |
| GPIO14 | RST | 复位,可自定义 |
| GPIO2 | DIO0 | 中断引脚,可自定义 |
接好线后,上传一个简单的 LoRa 初始化代码,看串口输出:
#include <LoRa.h>
void setup() {
Serial.begin(115200);
while (!Serial);
Serial.println("LoRa Sender Test");
if (!LoRa.begin(433E6)) { // 433MHz 频段
Serial.println("LoRa init failed!");
while (1);
}
Serial.println("LoRa init success!");
}
void loop() {
// 发送一个测试包
LoRa.beginPacket();
LoRa.print("Hello from node");
LoRa.endPacket();
delay(5000);
}
如果串口打印出 "LoRa init success!",说明硬件连接没问题。如果打印 "LoRa init failed!",别慌,检查这几项:
- 供电电压是不是 3.3V?我见过有人接了 5V 把模块烧了。
- SPI 引脚有没有接错?尤其是 NSS 和 RST,代码里定义的引脚要和实际接线一致。
- 天线接了吗?LoRa 模块不接天线也能初始化,但通信距离会差很多。
3.7 本章小结
到这步,你的开发环境应该已经跑起来了。Arduino IDE 能编译 LoRa 代码,串口能看到调试信息,硬件连接也验证通过。下一章咱们开始写真正的 LoRa 收发程序,让两个节点互相通信。
如果你在搭建过程中遇到问题,别急着放弃。LoRa 开发就是这样,环境配置是最枯燥的一步,但跨过去之后,后面就顺畅了。我当年第一次调通 LoRa 通信时,看到串口里跳出 "Hello from node",那种成就感,到现在还记得。