LoRaWAN은 장거리(수~수십 km) 저전력 IoT 통신을 위한 LPWAN(Low Power Wide Area Network) 프로토콜이다. LoRa 물리 계층 위에 구축되며 LoRa Alliance가 표준을 관리한다.
LoRa vs LoRaWAN
LoRa: 물리 계층 (CSS 변조 방식, Semtech 독자)
LoRaWAN: MAC 계층 프로토콜 (LoRa 위에서 동작)
Chirp Spread Spectrum (CSS) 변조:
- 주파수가 시간에 따라 선형 증가하는 "처프" 사용
- 노이즈 내성이 매우 강함
- SNR -20dB에서도 통신 가능 (일반 WiFi: +10dB 필요)
LoRaWAN 아키텍처
디바이스 → 게이트웨이 → 네트워크 서버 → 애플리케이션 서버
(노드) (멀티채널) (The Things (MQTT/HTTP)
수신기 Network 등)
게이트웨이는 여러 디바이스의 신호를 동시 수신
네트워크 서버: 중복 제거, 보안, 디바이스 관리
디바이스 클래스
| 클래스 | 수신 창 | 배터리 | 용도 |
|---|
| A (All) | 업링크 후에만 | 매우 낮음 | 센서, 미터 |
| B (Beacon) | 슬롯 기반 주기적 | 낮음 | 밸브 제어 |
| C (Continuous) | 항상 열림 | 높음 | 가로등 |
LoRaWAN 보안
AES-128 기반 이중 암호화:
NwkSKey (네트워크 세션키): MIC 무결성 + 네트워크 암호화
AppSKey (앱 세션키): 페이로드 암호화 (단말-앱서버 end-to-end)
디바이스 식별:
DevEUI : 64비트 고유 디바이스 ID (EUI-64)
AppEUI : 64비트 애플리케이션 ID
DevAddr: 32비트 네트워크 주소 (OTAA/ABP로 할당)
Arduino LoRa 예시
cpp
# include <MKRWAN.h>
LoRaModem modem;
void setup() {
modem.begin(EU868); // 유럽 주파수 대역
// OTAA 접속
modem.joinOTAA("APP_EUI_HEX", "APP_KEY_HEX");
// 데이터 전송 (QoS=1, confirmed)
modem.beginPacket();
modem.write(temperature_bytes, 2);
modem.write(humidity_bytes, 2);
modem.endPacket(true); // confirmed uplink
}
LoRa 링크 버짓 계산
EIRP - 경로 손실 - 수신 감도 = 링크 마진
예: EU868, SF12, BW125kHz
- 수신 감도: -137dBm
- 송신 출력: +14dBm
- 안테나 이득: 3dBi
- 도시 경로 손실 (2km): 130dB
- 링크 마진: 14 + 3 - 130 - (-137) = 24dB ✓
관련 문서