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.