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 口。我刚开始学的时候,经常选错端口,编译上传半天没反应,后来养成习惯:插线前看一眼设备管理器,确认端口号。
注意:Windows 用户如果插上板子没识别,大概率是没装 CH340 或 CP2102 驱动。去官网下载对应驱动装一下就好。Mac 用户一般免驱。

3.3 LoRa 库的导入

库是 LoRa 通信的灵魂。Arduino 生态里最常用的是 LoRa.h 这个库,由 Sandeep Mistry 维护。安装方法很简单:

  1. 打开 Arduino IDE,点击「工具 → 管理库」。
  2. 搜索框输入 "LoRa by Sandeep Mistry"。
  3. 点击安装,版本选最新的稳定版就行。

装完之后,你可以打开示例代码验证一下:文件 → 示例 → LoRa → LoRaSender。如果能正常编译,说明库已经装好了。

这里有个坑:有些国产 LoRa 模块(比如安信可的 Ra-01)用的是 SX1278 芯片,和 LoRa.h 库完全兼容。但如果你用的是 Ebyte 的 E32 系列,那得用专门的 EBYTE.h 库。我踩过这个坑,买回来发现库不通用,又折腾了半天。

小技巧:如果你不确定自己的模块用哪个库,看模块上的芯片型号。SX1276/SX1278 用 LoRa.h,SX1262 用 RadioLib,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 模块不接天线也能初始化,但通信距离会差很多。
我的习惯:每次焊好模块后,先用万用表量一下 VCC 和 GND 之间的电压,确认没有短路。然后再上电。这个习惯帮我省了不少烧模块的钱。

3.7 本章小结

到这步,你的开发环境应该已经跑起来了。Arduino IDE 能编译 LoRa 代码,串口能看到调试信息,硬件连接也验证通过。下一章咱们开始写真正的 LoRa 收发程序,让两个节点互相通信。

如果你在搭建过程中遇到问题,别急着放弃。LoRa 开发就是这样,环境配置是最枯燥的一步,但跨过去之后,后面就顺畅了。我当年第一次调通 LoRa 通信时,看到串口里跳出 "Hello from node",那种成就感,到现在还记得。