개발 가이드

IoT Portal 서비스 개발에 필요한 개발 가이드 입니다.

LoRa 디바이스 개발하기 공통

SKT LoRa 디바이스 개발 유의사항

LoRa 디바이스를 개발할 때, 유의해야 할 점은 대표적으로 사용할 LoRa 모듈 및 Class 선택, MCU에서 필수로 구현되어야 하는 부분이 있습니다.

LoRa 모듈 별 차이점

SKT LoRa 모듈을 이용하여 LoRa 디바이스를 개발할 때, 와이솔, 솔루엠 모듈 간의 차이점은 네 가지가 있습니다.

첫 번째로 LoRa 모듈의 시리얼 포트를 설정할 때, Baud rate이 다릅니다. 와이솔 모듈의 경우 115,200으로 설정해야 하며, 솔루엠 모듈의 경우 38,400으로 설정해야 합니다.

두 번째로 LoRa 모듈이 Uplink 할 때의 메시지 형식이 다릅니다. 와이솔 모듈의 경우 메시지 입력 형식이 아스키 형식이며, 솔루엠 모듈의 경우 Hex 형식 입니다. 또한 ThingPlug에 저장되는 형식은 Hex 형식 이므로, 데이터를 Uplink 할 때 이와 같은 부 분을 고려하여 Uplink 해야 합니다.

예를 들어, ‘abc123’라는 값을 보내야 한다고 할 때, 와이솔 모듈은 Uplink 시 메시지를 입력하는 부분에 ‘abc123’을 입력하여 보내면 ThingPlug에는 Hex 형식으로 ‘616263313233’ 값이 저장 됩니다. 솔루엠 모듈은 ‘abc123’을 보내야 한다면 Hex로 변경한 값 ‘616263313233’로 변경한 후 Uplink해야 합니다. ThingPlug의 데이터 형식 또한 Hex이므로 ‘616263313233’ 그대로 저장 됩니다.

세 번째로 LoRa 모듈을 제어하기 위한 Command 형식이 다릅니다. 와이솔 모듈의 경우 CLI Command를 사용하며 ‘LRW [Command ID] [Option] CR LF’와 같이 사용합니다.

솔루엠 모듈의 경우 AT Command를 사용하며 ‘AT+[Command Name] [Option] CR LF’와 같이 사용합니다. 자세한 내용은 https://www.sktiot.com/iot/developer/guide/techDocument 에서 해당 LoRa 모듈에 해당하는 펌웨어 자료를 받으시면 확인하실 수 있습니다.

와이솔, 솔루엠 모듈을 리셋하는 Command를 예로 들면 다음과 같습니다.

개발가이드 설명
모듈 Command
와이솔 LRW 70\r\n
솔루엠 AT RST\r\n

네 번째로 Sleep mode에서 Wake-up 처리 방식이 다릅니다. 본 내용은 Class A를 사용하실 경우에만 해당하며 Class에 대한 내용은 다음 순서에서 설명 드리겠습니다.

와이솔 모듈의 경우 Sleep 모드에서 UART 인터페이스를 사용하기 위해서는 Wake-Up 시켜야 합니다. 모듈을 Wake-Up 시키기 위해서는 Pin 39를 Rising edge 해야 하며, 최소 3.5usec 이상 high 상태를 유지하고 최소 1msec 이후 UART 입력을 해야 합니다.

또한 Pin 12의 상태를 확인하여 모듈이 Sleep 상태인지, Wake-up 상태인지 확인할 수 있습니다. Pin 12가 Low이면 Sleep 상태이고, High면 Wake-up 상태로 판단하면 됩니다. 자세한 내용은 https://www.sktiot.com/iot/developer/guide/techDocument 에서 와이솔 모듈에 해당하는 펌웨어 자료를 받으시면 확인하실 수 있습니다. (LOM102A_V105\LOM102A_Document\UserManual 위치에서 WISOLUserManual_LOM102A_20170317)

솔루엠 모듈의 경우 와이솔 모듈과 달리 특정 Pin을 Wake-up 처리 하지 않아도 Sleep 모드에서 UART 인터페이스를 사용할 수 있습니다.

LoRa Class 차이점

LoRa Specification에 정의된 LoRa Class는 A, B, C 지만, SKT LoRa의 경우 Class A와 C를 지원합니다. Class를 선택하실 때의 기준은 LoRa 디바이스가 Downlink 수신 가능 시간에 따라 정하시면 됩니다.

Class A의 경우 LoRa 디바이스가 Uplink 후, 1초 간격으로 2번 4ms동안 Downlink를 수신 가능하며 이 상태를 ‘RX1’, ‘RX2’라고 표기합니다. Uplink, RX1, RX2 외에는 Sleep 상태가 되므로 배터리를 사용하는 LoRa 응용에 적합 합니다.

또한, LoRa 디바이스가 Uplink를 해야만 Downlink를 받을 수 있으므로, LoRa 디바이스의 Uplink 주기가 60초라고 가정하면 Downlink 시 최대 60초 정도의 지연 시간이 있을 수 있습니다.

Class A 수신 가능 시간

Class C의 경우 LoRa 디바이스가 Uplink 하는 시간 외에는 Downlink를 수신 가능합니다. 이처럼 Sleep 상태가 되지 않으므로 Class A에 비해 소비되는 전류가 크므로 별도의 전원이 있는 LoRa 응용에 적합 합니다. 또한, 항상 Downlink를 수신 가능하기 때문에 Downlink 시 지연 시간이 짧습니다.

Class C – Downlink 수신 가능 시간
설명. RX1, 2가 항시 오픈 되어 있으므로 Transmit 이외 시간에는 전부 Receive 가능

MCU 보드에서 필수로 구현되어야 하는 부분

LoRa 디바이스를 개발 하실 때 MCU 보드에서 필수로 구현되어야 하는 부분이 네 가지 있습니다.

첫 번째는 서버에서 리셋 명령을 LoRa 디바이스로 Downlink 했을 때, MCU 보드는 LoRa 모듈이 수신한 리셋 로그 중 일부를 파싱하여 LoRa 모듈을 리셋 하도록 구현해야 합니다. 이와 같은 부분은 SKT 텔레콤 측에서 LoRa 디바이스가 이상 동작을 한다고 판단 했을 때, 해당 LoRa 디바이스를 리셋 시키기 위하여 필수로 구현 되어야 합니다. 또한 리셋 명령의 경우 Confirmed 메시지 타입이므로 LoRa 디바이스가 리셋 명령을 수신하고 ACK 메시지를 보내는 시간, 약 5초 정도 대기한 후 리셋을 수행해야 합니다.

와이솔 모듈이 리셋 명령을 Downlink 받았을 때의 로그는 다음과 같습니다.

개발가이드 설명
와이솔 모듈 리셋 로그
RX2CH Open: freq 921900000, SF 12, BW 0, TO 25[2017-12-22 10:12:24 982]:, RXC 1
[2017-12-22 10:12:40 636]:OnRadioRxDone[2017-12-22 10:12:40 643]:: MType: FRAME_TYPE_DATA_CONFIRMED_DOWN / Ver: 0
OnRadioRxDone: ADR OFF, ADRACKReq 0, ACK 0 Fpending 0 FOptsLen 0 FCnt 4 P 222
[2017-12-22 10:12:40 651]:Rx_MSG 222 : 008000

[2017-12-22 10:12:40 658]:AppDataProcessWithThingPlug: RCV 128
DevReset
[2017-12-22 10:12:40 666]:PrepareFrame[2017-12-22 10:12:40 672]:: MType: FRAME_TYPE_DATA_UNCONFIRMED_UP / Ver: 0
PrepareFrame: ADR ON, ADRACKReq 0, ACK 1 Fpending 0 FOptsLen 0 FCnt 4 P 4
[2017-12-22 10:12:40 693]: SEND : Freq: 923300000 DR: 0 PWR: 0

솔루엠 모듈이 리셋 명령을 Downlink 받았을 때의 로그는 다음과 같습니다.

개발가이드 설명
솔루엠 모듈 리셋 로그
RSSI -89, SNR 28
RX DONE
MSG_TYPE : 0x80, PAYLOAD_LEN : 0
SKT_DEV_RESET
DUMMY TX
ACK
Event mode
txDone
OnRadioTxDone

두 번째는 LoRa 디바이스에 전원이 인가 되었을 때, 임의의 지연 시간을 대기한 후 Join 과정을 수행 하도록 구현해야 합니다.

이는 한 지역에 여러 대의 LoRa 디바이스가 정전과 같은 이유로 전원이 꺼졌다가 전원이 인가 되었을 때, 동시에 여러 대의 LoRa 디바이스가 Join 하는 것을 막기 위함입니다.

세 번째는 최소 전송 주기에 대한 부분 입니다. SKT LoRa 망을 사용할 경우 LoRa 디바이스는 최소 전송 주기가 10초 이상이어야 합니다. SKT LoRa 망을 이용하여 모니터링 하는 응용의 경우를 예로 들어 설명 드리겠습니다. 일반 적인 상황에서 LoRa 디바이스는 1분 주기로 Uplink하고 특정 이벤트를 감지하면 Uplink를 수행한다고 가정하겠습니다. 이 때 최소 전송 주기가 10초 이상이라는 조건을 만족하기 위해서는, LoRa 디바이스가 Uplink한 직후에 특정 이벤트를 감지하더라도 최소 10초 이후에 Uplink를 수행해야 합니다.

마지막으로 Uplink 관련 ERROR 메시지에 관한 부분입니다. Uplink 진행 시에 Max Payload는 65bytes 입니다. 해당 bytes가 넘어가는 경우에는 ERROR 메시지를 출력하는 내용을 구현해야 합니다.

위에서 설명 드린 첫 번째의 경우는 OTB 인증 시 확인 하며, 두 번째, 세 번째, 네 번째의 경우는 QA 망연동 테스트 시, 확인 하는 부분이므로 필수로 구현해야 합니다.

top