Arduino 与 LoRa 模组的接口


在这篇文章中,我们将了解如何将 Arduino 与 LoRa 模组 E32 连接。LoRa 代表远距离。它使用免许可的亚 GHz 射频频段进行操作。这些频段在不同国家/地区有所不同。在印度,允许的频段是 865-867 MHz。由于其远距离和低功耗,LoRa 非常适合物联网应用。但是,可实现的数据速率有限(0.3 到 27 kbit/秒)。距离越远,数据速率越低。

我们将使用的 E32 模组如下所示。根据频率的不同,模组的版本也会发生变化。例如,下面显示的模组是 E32-TTL-100,工作频率为 410-441 MHz。同样,工作频率为 862 到 893 MHz 的 E32 模组是 E32-868T30D。类似地,其他频率可能还有其他版本。

E32 模组通过 UART 工作(从模组上的 RX 和 TX 引脚可以看出)。它基于 SEMTECH 的 SX1276 射频芯片。有两个配置引脚(M0 和 M1),它们一起确定四种工作模式。

您可以在用户手册中找到这些模式的更详细说明。在本教程中,我们只使用普通模式,接收器和发射器都使用普通模式,即我们将 M0 和 M1 都设置为 0。

配置 E32 模组

请注意,E32 模组只能在以下模式下配置:

  • M0 和 M1 都设置为 1 (HIGH)

  • 串行配置为 8N1,波特率为 9600。

E32 的参数设置命令长 6 个字节。这些字节是:

  • **字节 0** - 它可以是 0xC0 或 0xC2。C0 告诉模组即使在断电后也必须保留设置。C2 表示断电后无需记住设置。

  • **字节 1 和 2** - 它们指示模组的地址。字节 1 是地址的高字节,字节 2 是地址的低字节。您可以保留任何您希望的值。但请为不同的模组保留不同的值。

  • **字节 3** - 此字节指示数据传输参数(UART 和空中数据传输)。可以在用户手册中获得各个位的描述。

  • **字节 4** - 此字节指示 LoRa 的工作频率。对于不同的模组,默认频率不同。例如,模组 868T30D 的默认频率为 868 MHz,但频率范围为 862 到 893 MHz。要将频率调整为除默认值以外的其他数字,请使用此字节。每个模组的用户手册都会告诉您如何调整此字节以获得所需的频率。通用规则也提到了全局用户手册中。

  • **字节 5** - 此字节包含各种与传输相关的参数,例如模式(透明或固定)、传输功率等。您可以参考用户手册了解更多详细信息(详细信息太大,无法在此处复制)。但是,此字节通常可以保留为默认值(对于大多数模组,默认值为 0x44,但您可以查看特定型号的用户手册)。

电路图

下面显示了一端(发射器)的电路图。接收端的电路将完全相同。

请注意,您需要为 LoRa 模组的频率范围获取天线。在本例中,我们使用的是 433 MHz 模组 (E32-TTL-100)。如果您使用的是不同频率的模组,则可能需要相同频率的天线。

Arduino 和 LoRa 模组之间的连接非常简单。M0、M1、RXD 和 TXD 需要连接到 4 个 GPIO(我们分别将其连接到 11、10、9 和 8)。Vcc 连接到 5V,GND 连接到 GND。请注意,在 Arduino 上,引脚 8 将是 RX(因为它连接到 LoRa 模组的 TX),引脚 9 将是 TX。

代码演练

代码如下所示(如果您使用的是 Arduino Uno 以外的板,则并非所有数字引脚都支持 SoftwareSerial。请此处阅读 SoftwareSerial 的限制):

// (Send and Receive)
#include <SoftwareSerial.h>
SoftwareSerial loraSerial(8,9); //RX, TX

#define M0 11
#define M1 10

void setup() {
   Serial.begin(9600);
   pinMode(M0, OUTPUT);
   pinMode(M1, OUTPUT);

   //Set M0 and M1 to high for parameter setting
   digitalWrite(M0, HIGH);
   digitalWrite(M1, HIGH);

   loraSerial.begin(9600);
   while (loraSerial.available() && loraSerial.read());

   //Send configuration commands to the module
   uint8_t config_struct[6];
   config_struct[0] = 0xC0; //Store in internal flash
   config_struct[1] = 0x00; // Address High, set a different value on the receiving side
   config_struct[2] = 0x00; //Address Low
   config_struct[3] = 0x35; //8N1, 57600 Baud rate, 19.2 kbps Air data rate
   config_struct[4] = 0x17; //433 MHz
   config_struct[5] = 0x44; //Default Options

   loraSerial.write(config_struct,6);
   delay(2000);

   Serial.println("Config Complete");
   digitalWrite(M0, LOW);
   digitalWrite(M1, LOW);
   loraSerial.begin(57600);

}

void loop() {
   if(Serial.available() > 0){
      char input = Serial.read();
      loraSerial.print(input);
   }

   if(loraSerial.available() > 0){
      char input = loraSerial.read();
      Serial.print(input);
   }
}

如您所见,在 setup 中,我们首先将 M0 和 M1 设置为 HIGH,因为我们想要配置 LoRa 模组。config 结构体(或更确切地说是数组)被构建(请记住在接收端设置不同的地址值)。注释解释了每个字节值的含义。您还可以参考E32-TTL-100 的用户手册以了解更多说明。设置参数后,M0 和 M1 引脚设置为 LOW(普通模式),LoRa 的波特率更改为 57600(因为这是通过参数配置的)。

在循环中,我们从用户那里获取串行输入。用户发送的内容将通过 LoRa 传输,通过 LoRa 接收到的内容将打印在串行监视器上。因此,如果您向 Arduino 提供串行输入,则相同的文本应打印在接收端的串行监视器上,如果他们输入一些内容,则它应该显示在您的串行监视器上。

继续探索 LoRa 模组的不同配置,以及您可以发送给模组的不同命令。

更新于:2021-07-30

2K+ 阅读量

开启您的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.