LoRa - 6. 실전 프로젝트 - IoT 서비스 구축 (6-1. 스마트 환경 모니터링 시스템)

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

🔹 6-1. 스마트 환경 모니터링 시스템

이 실습에서는 LoRa를 이용하여 온습도 데이터를 무선으로 전송하는 스마트 환경 모니터링 시스템을 구축합니다.
LoRaWAN을 활용하면 장거리에서 저전력으로 데이터를 송신할 수 있으며, 데이터를 클라우드(TTN, Node-RED, Grafana)와 연동하여 시각화할 수 있습니다.


📌 실습 목표

LoRa 노드를 이용해 온습도 데이터를 수집하고 무선 전송
LoRaWAN 게이트웨이를 통해 데이터를 The Things Network(TTN)으로 전송
TTN에서 Node-RED와 Grafana를 이용해 데이터를 시각화


📌 1. 구성 요소

이 프로젝트를 위해 다음과 같은 하드웨어 및 소프트웨어가 필요합니다.

✅ 1-1. 하드웨어 목록

1️⃣ DHT11 온습도 센서 (또는 DHT22)
2️⃣ LoRa 지원 개발 보드 (Heltec LoRa, TTGO LoRa32, Arduino + RFM95 등)
3️⃣ LoRaWAN 게이트웨이 (RAK7244, Dragino LPS8, Multitech Conduit 등)
4️⃣ 인터넷 연결 (Wi-Fi 또는 Ethernet)

DHT11 센서가 온도와 습도를 측정하여 LoRa 노드로 전달
LoRa 노드는 센서 데이터를 LoRaWAN 게이트웨이로 송신
게이트웨이는 데이터를 TTN 서버로 전송


✅ 1-2. 소프트웨어 목록

1️⃣ Arduino IDE 또는 VS Code + PlatformIO (LoRa 노드 프로그래밍)
2️⃣ The Things Network (TTN) (LoRaWAN 서버)
3️⃣ Node-RED (데이터 처리 및 MQTT 연동)
4️⃣ Grafana (데이터 시각화)

TTN을 이용해 LoRaWAN 데이터를 클라우드로 전송 가능
Node-RED를 이용해 데이터를 Grafana로 변환하여 시각화


📌 2. 데이터 흐름

스마트 환경 모니터링 시스템의 데이터 흐름은 아래와 같습니다.

[센서 데이터] → [LoRa 모듈] → [LoRaWAN 게이트웨이] → [TTN 서버] → [Node-RED] → [Grafana 시각화]

✅ 데이터 흐름 상세

1️⃣ DHT11 센서가 온습도 데이터를 측정
2️⃣ LoRa 노드(Heltec, TTGO LoRa 등)가 센서 데이터를 LoRaWAN 게이트웨이로 전송
3️⃣ LoRaWAN 게이트웨이가 TTN(The Things Network)으로 데이터를 업로드
4️⃣ TTN에서 MQTT를 통해 데이터를 Node-RED로 전달
5️⃣ Node-RED가 데이터를 가공하여 Grafana에서 시각화

무선으로 실시간 온습도 데이터를 수집하여 클라우드에 저장하고 시각화 가능


📌 3. LoRa 노드 설정 (DHT11 + LoRa)

LoRa 노드가 DHT11 센서에서 데이터를 읽고 LoRaWAN을 통해 전송하도록 설정합니다.

✅ 3-1. LoRa 노드 코드 (DHT11 + LoRa)

아래 코드는 DHT11 센서를 통해 온습도 데이터를 측정하고 LoRaWAN을 통해 TTN으로 전송하는 예제입니다.

#include <CayenneLPP.h>  // LoRaWAN 데이터 포맷 라이브러리
#include <lmic.h>        // LoRaWAN 네트워크 라이브러리
#include <hal/hal.h>
#include <DHT.h>         // 온습도 센서 라이브러리

#define DHTPIN 4        // DHT 센서가 연결된 핀
#define DHTTYPE DHT11   // DHT11 또는 DHT22 선택
DHT dht(DHTPIN, DHTTYPE);

// TTN에서 제공받은 DevEUI, AppEUI, AppKey 설정
static const u1_t PROGMEM APPEUI[8] = { /* TTN AppEUI 입력 */ };
static const u1_t PROGMEM DEVEUI[8] = { /* TTN DevEUI 입력 */ };
static const u1_t PROGMEM APPKEY[16] = { /* TTN AppKey 입력 */ };

void os_getArtEui(u1_t* buf) { memcpy(buf, APPEUI, 8); }
void os_getDevEui(u1_t* buf) { memcpy(buf, DEVEUI, 8); }
void os_getDevKey(u1_t* buf) { memcpy(buf, APPKEY, 16); }

// 데이터 송신 함수
void do_send(osjob_t* j) {
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  CayenneLPP lpp(51);
  lpp.addTemperature(1, temperature);
  lpp.addRelativeHumidity(2, humidity);

  LMIC_setTxData2(1, lpp.getBuffer(), lpp.getSize(), 0);
  Serial.println("LoRa 데이터 전송 완료");
}

void setup() {
  Serial.begin(9600);
  dht.begin();
  os_init();
  LMIC_reset();
  do_send(&sendjob);
}

void loop() {
  os_runloop_once();
}

DHT11 센서에서 온습도 데이터를 측정하여 LoRaWAN을 통해 전송
CayenneLPP 포맷을 사용하여 데이터를 TTN에서 쉽게 분석 가능
TTN 서버에 DevEUI, AppEUI, AppKey를 설정해야 정상적으로 데이터 송신 가능


📌 4. TTN 서버에서 데이터 확인

LoRa 노드에서 데이터를 전송하면 TTN 콘솔에서 데이터를 확인할 수 있습니다.

✅ TTN 콘솔에서 데이터 확인 방법

1️⃣ TTN 콘솔 → Applications → 등록한 애플리케이션 선택
2️⃣ Devices 탭 → 등록한 LoRa 노드 선택
3️⃣ Data 탭에서 수신된 데이터 확인

LoRaWAN을 통해 TTN으로 데이터가 성공적으로 전송되었는지 확인 가능


📌 5. Node-RED 및 Grafana 설정

TTN에서 데이터를 MQTT로 전송하면, Node-RED와 Grafana를 활용하여 데이터를 시각화할 수 있습니다.

✅ 5-1. Node-RED 설정

1️⃣ Node-RED 설치 (npm install -g node-red)
2️⃣ TTN MQTT 노드 추가 (node-red-contrib-ttn)
3️⃣ TTN과 연결하여 데이터 수신 및 변환

🔹 Node-RED에서 MQTT를 통해 데이터 수신 예제

{
  "temperature": 25.5,
  "humidity": 60
}

Node-RED에서 TTN 데이터를 수신하여 JSON 형식으로 변환 가능


✅ 5-2. Grafana 대시보드 설정

1️⃣ Grafana 설치 (sudo apt install grafana)
2️⃣ InfluxDB 연결 (node-red-contrib-influxdb)
3️⃣ Node-RED에서 데이터 저장 후 Grafana에서 시각화

Grafana를 활용하면 실시간 온습도 데이터 대시보드 구축 가능
환경 데이터 분석 및 IoT 스마트 시티 구축에 활용 가능


📌 정리 (스마트 환경 모니터링 시스템 요약)

단계  설명
LoRa 노드 설정 DHT11 센서를 이용해 온습도 데이터를 측정
LoRaWAN 데이터 전송 LoRaWAN 게이트웨이를 통해 TTN으로 데이터 전송
TTN 서버 설정 TTN에서 데이터 수신 및 MQTT 연동
Node-RED 설정 MQTT 데이터를 변환하여 Grafana로 전달
Grafana 대시보드 실시간 온습도 데이터를 시각화

LoRaWAN을 활용하여 스마트 환경 모니터링 시스템 구축 가능
Node-RED, Grafana를 활용하여 실시간 데이터 시각화 가능