LoRa/RF Gateway MQTT

LoRa/RF 게이트웨이 시스템

장거리 다중 센서 데이터를 안정적으로 수집하고 클라우드로 전송하는 게이트웨이 시스템

문제 정의

공장/농장 등 넓은 공간(~1km)에 분산된 20~30개 센서 노드의 데이터를 실시간 수집해야 하는 상황에서:

  • Wi-Fi/Ethernet 인프라 구축 비용 과다
  • LoRa 통신 시 패킷 중복 수신과 누락 발생
  • 게이트웨이 단일 장애점 문제
  • 서버로 데이터 전송 중 연결 끊김 처리 필요

시스템 구성

[센서 노드 1-30]           [듀얼 게이트웨이]              [클라우드]
   (ESP32 + LoRa)    →    Gateway A (Main)     →    MQTT Broker
   SF7/BW125/CR4/5        Gateway B (Sub)            ↓
   10분 주기 전송          중복 제거 로직          InfluxDB
   배터리 동작            타임스탬프 기준         ↓
                          재전송 버퍼             Web Dashboard
                        

하드웨어:

  • 센서 노드: ESP32 + SX1276 (LoRa), 온습도/조도/토양수분 센서
  • 게이트웨이: Raspberry Pi 4 + SX1302 (8채널 동시 수신)

소프트웨어:

  • 센서: Arduino framework, 저전력 슬립 모드
  • 게이트웨이: Python, LoRaWAN packet parser, MQTT client
  • 서버: Node.js, Mosquitto, InfluxDB, Grafana

핵심 기술

1. 통신 파라미터 최적화

  • SF7 (Spreading Factor 7): 1km 거리에서 충분한 신뢰성, 전송시간 단축
  • BW125 (Bandwidth 125kHz): 간섭 최소화
  • CR4/5 (Coding Rate): 에러 정정 능력 확보
  • 결과: 패킷 전송시간 ~200ms, 수신성공률 98%

2. 중복 패킷 제거 알고리즘

// 타임스탬프 + Node ID 기반 중복 제거
if (packet.timestamp - last_packet[node_id].timestamp < 5000ms):
    if (packet.payload == last_packet[node_id].payload):
        discard_duplicate()
else:
    process_and_forward()

3. 재전송 버퍼

  • MQTT 브로커 연결 실패 시 로컬 SQLite에 임시 저장
  • 연결 복구 시 순차 재전송 (최대 1시간 데이터 보관)

4. 듀얼 게이트웨이 Failover

  • Main 게이트웨이 Health check (30초 주기)
  • 응답 없으면 Sub 게이트웨이 자동 활성화

결과

패킷 손실률

15% → 2%

중복 제거 알고리즘 적용 후

통신 거리

~1.2km

실외 개활지 기준, 안정적 수신

무정지 운영

30일+

듀얼 게이트웨이 Failover 동작

노드 배터리

6개월+

18650 3400mAh, 10분 주기

확장 가능 항목

  • LoRaWAN Class A/C 프로토콜 지원으로 양방향 제어
  • NB-IoT 백홀 추가로 원격지 게이트웨이 운영
  • Edge AI 추가로 이상 패턴 로컬 감지
  • Solar Panel 통합으로 완전 자급자족형 노드
MQTT WebSocket Real-time

MQTT WebSocket 실시간 뷰어

브라우저에서 MQTT 메시지를 실시간 모니터링하고 알람 규칙을 설정하는 대시보드

문제 정의

  • 수십 개 센서의 실시간 데이터를 한눈에 모니터링 필요
  • MQTT 클라이언트 설치 없이 웹 브라우저에서 즉시 확인
  • 임계값 초과 시 즉시 알람 (이메일/SMS)
  • 데이터 저장 없이 순수 실시간 스트리밍 뷰어

시스템 구성

[센서 노드] → [MQTT Broker] → [WebSocket 브릿지] → [브라우저]
                (Mosquitto)      (Node.js)           (Chart.js)
                                   ↓
                              [알람 엔진]
                            (임계값 체크)
                        

핵심 기술

1. MQTT → WebSocket 브릿지

// Node.js + Socket.IO
mqtt.on('message', (topic, message) => {
    const data = JSON.parse(message);
    io.emit('sensor_data', {
        topic: topic,
        value: data.value,
        timestamp: Date.now()
    });
});

2. 실시간 차트 업데이트

  • Chart.js 라이브 업데이트 (최대 100개 데이터 포인트)
  • 멀티 센서 동시 표시 (최대 10개 차트)
  • 자동 스케일 조정

3. 알람 규칙 엔진

rules = [
    {sensor: "temp_01", condition: "> 30", action: "email"},
    {sensor: "humid_02", condition: "< 40", action: "sms"}
]

if (evaluate_condition(data, rule)):
    trigger_alarm(rule.action)

결과

업데이트 지연

< 1초

센서 전송부터 화면 표시까지

동시 접속

50명

단일 서버에서 안정적 처리

알람 반응

즉시

임계값 초과 시 실시간 전송

서버 부하

CPU 15%

Raspberry Pi 4 기준

BLE Low Power ESP32

저전력 BLE 센서 모니터링

배터리로 6개월 이상 동작하는 BLE 온습도 센서 네트워크

문제 정의

  • 창고/냉장고 등 10~20개 공간의 온습도를 배터리로 장기 모니터링
  • 전원 공사 없이 자석으로 부착 가능한 소형 디바이스
  • CR2032 코인셀 배터리로 6개월 이상 동작
  • BLE 게이트웨이로 자동 수집 → 클라우드 전송

시스템 구성

[BLE 센서 노드]          [BLE Gateway]           [서버]
ESP32-C3               ESP32 (Central)      MQTT Broker
+ SHT31 (온습도)         BLE Scan             + Database
+ CR2032 (220mAh)       → MQTT Publish       + Dashboard
5분 주기 광고            최대 30개 노드 수집
Deep Sleep
                        

핵심 기술

1. 딥슬립 슬롯 설계

void loop() {
    // Wake up
    read_sensor();              // ~50ms
    ble_advertise(data, 1sec);  // ~1sec
    esp_deep_sleep(5min);       // 평균 전류 ~80μA
}

// 전류 프로파일:
// Deep Sleep: 10μA
// Active: 80mA × 1.05sec = 84mAs
// Average: 80μA

2. BLE 광고 패킷 최적화

  • Custom Manufacturer Data (20바이트)
  • 센서 ID(2) + 온도(2) + 습도(2) + 배터리(2) + CRC(1)
  • 광고 주기: 1초, 1초간만 활성화

3. 게이트웨이 스캔 전략

// 연속 스캔 + 중복 제거
scan_window = 1sec
scan_interval = 1sec  // 100% duty cycle

if (new_device_detected):
    parse_manufacturer_data()
    publish_mqtt()

4. 배터리 모니터링

  • ADC로 배터리 전압 측정 (Vbat / 2)
  • 2.0V 이하 시 "배터리 교체" 알람
  • 대시보드에 배터리 잔량 % 표시

결과

배터리 수명

8개월+

CR2032 220mAh, 5분 주기

평균 전류

80μA

Deep Sleep 최적화 후

통신 거리

~15m

실내 벽 1~2개 관통

센서 정확도

±0.3°C

SHT31 센서 기준

확장 가능 항목

  • BLE Mesh 프로토콜로 중계 기능 추가 (거리 확장)
  • 이산화탄소, 조도, 기압 센서 추가
  • E-ink 디스플레이로 로컬 표시
  • NFC 태그로 스마트폰 직접 확인

더 많은 프로젝트

IoT 제어

NeoPixel 스마트 조명 제어

문제: 앱 기반 조명 밝기/색상 제어와 시간대별 자동 예약

구성: ESP32 + WS2812B 300LED + MQTT + 모바일 앱(Flutter)

결과: 300개 LED 개별 제어, 앱 반응속도 100ms 이내, 16가지 프리셋 효과

로봇 · SLAM

SLAM 기반 자율 탐색 시스템

문제: 실내 환경 자동 매핑과 장애물 회피 경로 생성

구성: LiDAR (RPLiDAR A1) + IMU + Jetson Nano + ROS Melodic + Cartographer SLAM

결과: 50㎡ 공간 5분 내 매핑, 충돌 없이 자율 주행, 5cm 위치 정확도

헬스케어

BCG 측정 디바이스 개념 검증

문제: 비접촉 심박/호흡 측정을 위한 고감도 센서 신호 처리

구성: 압전 필름 센서 + ADS1299 ADC (250Hz) + STM32 + FFT 필터링

결과: 심박수 오차 ±3bpm, 호흡수 오차 ±1rpm, 실시간 파형 시각화

유사한 프로젝트가 필요하신가요?

현장 환경과 요구사항을 정확히 파악하여, 최적의 솔루션을 제안합니다

프로젝트 문의하기