LoRa - 3. LoRa 실습 - 기본 통신 구현 (3-1. LoRa 모듈 간 기본 통신)

2025. 2. 25. 12:48프로그래밍/시스템

🔹 3-1. LoRa 모듈 간 기본 통신

LoRa 모듈을 활용하여 두 개의 장치 간 데이터 송수신을 실습합니다.
이 실습을 통해 LoRa를 사용한 기본적인 무선 통신 방법을 이해하고, 장거리 데이터 전송이 어떻게 이루어지는지 배울 수 있습니다.


📌 실습 목표

두 개의 LoRa 모듈을 이용하여 간단한 데이터 송수신 구현
송신기(Transmitter) 에서 "Hello, LoRa!" 메시지 전송
수신기(Receiver) 에서 수신된 메시지를 시리얼 모니터에 출력


📌 1. 실습을 위한 준비물

LoRa 모듈을 직접 연결하여 데이터 송수신을 실습하려면 아래 장비가 필요합니다.

✅ 필수 장비 목록

1️⃣ LoRa 모듈 2개 (예: RFM95, SX1276, Heltec LoRa)
2️⃣ 개발 보드 2개 (예: Arduino Uno, Mega, ESP32 등)
3️⃣ 점퍼 와이어 (SPI 통신용)
4️⃣ USB 케이블 (PC와 Arduino 연결)
5️⃣ Arduino IDE 또는 VS Code + PlatformIO

✅ LoRa 모듈과 Arduino 핀 연결

LoRa 모듈 핀 Arduino 핀 (SPI 통신)
VCC 3.3V
GND GND
SCK 13 (SPI SCK)
MISO 12 (SPI MISO)
MOSI 11 (SPI MOSI)
NSS (CS) 10
RST (리셋 핀) 9
DIO0 (인터럽트 핀) 2

LoRa 모듈은 3.3V 전원을 사용해야 하므로, Arduino의 3.3V 핀에 연결해야 합니다!
SPI 통신을 사용하기 때문에 SCK, MISO, MOSI 핀 연결이 필수적입니다.


📌 2. LoRa 송신기(Transmitter) 코드

아래 코드를 실행하면 "Hello, LoRa!" 메시지를 5초마다 전송합니다.

#include <SPI.h>
#include <LoRa.h>

#define SS 10
#define RST 9
#define DI0 2

void setup() {
  Serial.begin(9600);
  while (!Serial);
  LoRa.setPins(SS, RST, DI0);

  if (!LoRa.begin(920E6)) { // 한국 주파수 (920~923MHz)
    Serial.println("LoRa 초기화 실패");
    while (1);
  }
  Serial.println("LoRa 초기화 성공");
}

void loop() {
  Serial.println("메시지 전송: Hello, LoRa!");
  LoRa.beginPacket();
  LoRa.print("Hello, LoRa!");
  LoRa.endPacket();
  delay(5000);
}

이 코드는 5초마다 "Hello, LoRa!" 메시지를 전송합니다.
LoRa.begin(920E6) → 한국의 ISM 대역(920~923MHz)을 사용하도록 설정
LoRa.beginPacket() → LoRa.endPacket() 사이에 전송할 데이터를 작성


📌 3. LoRa 수신기(Receiver) 코드

아래 코드를 실행하면 송신기에서 전송된 "Hello, LoRa!" 메시지를 수신하여 시리얼 모니터에 출력합니다.

#include <SPI.h>
#include <LoRa.h>

#define SS 10
#define RST 9
#define DI0 2

void setup() {
  Serial.begin(9600);
  while (!Serial);
  LoRa.setPins(SS, RST, DI0);

  if (!LoRa.begin(920E6)) { // 한국 주파수 (920~923MHz)
    Serial.println("LoRa 초기화 실패");
    while (1);
  }
  Serial.println("LoRa 초기화 성공");
}

void loop() {
  int packetSize = LoRa.parsePacket();
  if (packetSize) {
    Serial.print("수신된 메시지: ");
    while (LoRa.available()) {
      Serial.print((char)LoRa.read());
    }
    Serial.println();
  }
}

송신기로부터 메시지를 수신하면 Serial.print()를 이용해 화면에 출력
LoRa.parsePacket(): 새로운 LoRa 패킷이 도착했는지 확인
LoRa.read(): 수신된 데이터를 한 글자씩 읽어오기


📌 4. 실습 결과 확인 (Arduino 시리얼 모니터)

🔹 송신기 (Transmitter) 출력 결과

LoRa 초기화 성공
메시지 전송: Hello, LoRa!
메시지 전송: Hello, LoRa!
메시지 전송: Hello, LoRa!
...

🔹 수신기 (Receiver) 출력 결과

LoRa 초기화 성공
수신된 메시지: Hello, LoRa!
수신된 메시지: Hello, LoRa!
수신된 메시지: Hello, LoRa!
...

수신기가 메시지를 정상적으로 받으면 시리얼 모니터에 출력됨
두 장치가 LoRa 신호를 통해 데이터 송수신이 가능함을 확인


📌 5. LoRa 통신이 안 될 경우 문제 해결 (디버깅)

🚨 1️⃣ 주파수 확인

  • LoRa.begin(920E6); → 한국에서는 920~923MHz 범위를 사용해야 함
  • 미국(915MHz), 유럽(868MHz) 등 각국 ISM 주파수를 확인하고 설정할 것

🚨 2️⃣ 핀 연결 확인

  • SPI 핀(SCK, MISO, MOSI), NSS(10), RST(9), DIO0(2) 핀 연결 확인
  • LoRa 모듈은 3.3V 전원을 사용해야 하므로, 5V 전원을 사용하면 손상될 수 있음!

🚨 3️⃣ LoRa 안테나 장착

  • LoRa 모듈에 안테나가 연결되지 않으면 송수신 거리가 극도로 짧아질 수 있음
  • 안테나 없이 송신하면 모듈 손상 위험

🚨 4️⃣ 거리 및 장애물 영향

  • LoRa는 가시선(LOS, Line of Sight)이 확보될 때 최적의 성능을 발휘
  • 벽, 건물 등이 많으면 신호 감쇠 발생 → 실외에서 실험 추천

🚨 5️⃣ 코드 오류 확인

  • 시리얼 모니터에서 "LoRa 초기화 실패"가 나오면 → 핀 연결 및 주파수 설정 재확인
  • 송신기는 정상 작동하는데 수신기에서 메시지가 안 보이면 → 두 장치가 동일한 주파수를 사용 중인지 확인

📌 정리 (LoRa 기본 통신 요약)

단계  설명
송신기 설정 "Hello, LoRa!" 메시지를 5초마다 송신
수신기 설정 송신된 메시지를 수신 후 시리얼 모니터에 출력
주파수 설정 LoRa.begin(920E6); (한국: 920~923MHz)
필수 확인 사항 핀 연결, 주파수 일치, 안테나 장착, 장애물 영향

LoRa 모듈 두 개를 이용한 기본적인 데이터 송수신을 구현
Arduino 시리얼 모니터를 통해 메시지가 정상적으로 송수신되는지 확인