IT

WD-N522S (우리넷 LTE Cat.M1 외장형모듈) 사용후기 및 데이터시트 공유

번개애비 2024. 6. 21. 15:23

 

우리넷에서 개발/공급하는 Cat.M1 관련 모듈들의 자료를 구하기가 너무 어려워서 이렇게 포스팅으로 남긴다.

제조사 자료실에도 없고... 따로 단말기 개발신청을 통해서만 구할 수 있는듯.

하드웨어 매뉴얼.pdf
1.06MB
SKT_AT_Commands_v2.0.pdf
1.31MB

 

 

 

WD-N522S의 경우 UART(RS232)로 통신을 해야하는데 참고로 위 사진상의 UART to USB 칩은 CP2105 이다.

컴퓨터의 USB로 AT Command 통신을 직접 날려서 테스트하기 위해서 CP2105 칩에 대한 드라이버를 필수적으로 설치해야함!

 

아래 운영체제에 맞춰서 설치하면 정상적으로 UART 디바이스가 인식이 가능하다.

일부 해외포럼에서 애플실리콘기반의 MacOS에서는 CP2105 드라이버 인식이 불가하다고 하는데, 나는 왜 잘될까 ㅋㅋㅋ

(아마 MacOS의 경우 설치과정에서 시스템설정 > 개인정보 보호 및 보안 > 응용프로그램이 허용되지 않아서 생긴 문제인듯 함)

CP210x_Universal_Windows_Driver.zip
0.27MB
Mac_OSX_VCP_Driver.zip
1.89MB

 

 

 

 

맥에서 사용하는 기준으로 여러 시리얼 프로그램을 사용해봤는데 역시 중국인이 개발한 프로그램이 그나마 쓸만했다.

아마 대부분의 하드웨어제품들이 중국에서 개발되고 생산되다보니 관련 소프트웨어도 이제 중국제가 쓰기 편해진듯

 

 

 

 

 

참고로 시리얼 연길시 USB to UART가 2개가 신규로 잡히는데 뒤에 숫자값이 들어가 있는 포트로 연결하면 된다.

(엉뚱한 시리얼 포트 연결하고 AT Command 전송해도 응답이 없으니 주의바람)

 

내 기준으로는 아래와 같이 셋팅하고 연결했다.

- 시리얼포트 : SLAB_USBtoUART9

- 밴드레이트 : 115,200

- 데이터비트 : 8

- FlowContorl : None

- StopBits : 1

- Parity : None

 

 

 

그리고 대충 몇가지 AT Command를 사용해본 결과....

단말기 정보를 불러오기

제조사, 모델명, 펌웨어버전, 하드웨어버전, 그리고 가장 중요한 개통에 필요한 IMEI 코드를 확인할 수 있다.

ATI

 

 

가입자번호등 유심과 관련된 정보 구하기

결과데이터의 쉼표 순서대로

모델명, 개통된 전화번호, 단말기의 IMEI, 유심의 ICCID번호

AT*MINFO

 

 

 

 

 

보다 구체적인 사용방법에 대한 매뉴얼은 위쪽 첨부파일 중 SKT_AT_Commands 를 다운로드 받으면 확인이 가능하다.

AT Command로 이용할 수 있는 주요 통신은 다음과 같다.

  • TCP 소켓통신 (웹소켓 아님ㅋㅋ)
  • UDP 소켓통신
  • HTTP 통신
  • HTTPS 통신 (LetsEncrypt로 발급받은 인증서의 경우 TLS버전문제로 인증서도 따로 올려줘함)
  • SMS 수/발신
  • MQTT 통신
  • MQTTS 통신
  • PING 테스트
  • DNS 쿼리

위 통신들이 된다고 해서 WD-N522S 가 서버의 역할을 할 수 있는게 없음.

서버는 따로 구성해야되고 WD-N522S 는 단순 접속용 클라이언트 역할만 가능함.

(오피셜로는 SKT가 IPv6 기반이라 안된다고 하는데 내가보기에 SKT향 이동통신 자체가 아이피가 수시로 바꿔되서 그런듯)

 

 

 

TCP 소켓 테스트 해보기

저용량 데이터요금제를 쓸려고해서 높은 계층의 프로토콜이 아니라 TCP/IP 쌩 소켓으로 테스트를 해봤다.

서버는 Oracle Cloud에 Golang을 심플하게 작성했고, 소켓서버가 정상적으로 동작되는지를 확인하기 위해 LTE Cat.M1에서 테스트하기전에 맥북에서 먼저 테스트를 진행해봤다.

"telnet 아이피나도메인 포트번호"를 입력하면 맥북이나 다른 PC에서도 간단하게 테스트가 가능하다.

 

 

아래는 WD-N522S에서 AT Command로 TCP서버에 연결하고 데이터를 보내고 받는 예시이다.

ATE0  #에코모드 끄기
AT$$STAT?  #유심상태확인, 유심이 있으면 READY반환
AT+CEREG?  #네트워크연결확인, 연결되면 +CEREG: 0,1반환
AT*RNDISDATA=1  #RNDIS Device 사용, OK반환
AT+WSOCR=0,도메인이나아이피,포트번호,1,0  #소켓서버설정, OK반환
AT+WSOCO=0  #소켓서버연결, 연결성공시 OPEN_CMPL반환, 실패시 OPEN_FAIL반환
AT+WSOWR=0,33,this message is from LTE Cat M.1  #데이터전송, 성공시 OK반환
AT+WSOCL=0  #연결종료

참고로 내가 테스트로 구현한 TCP서버는 에코서버라서 전송한 데이터를 그대로 다시 반환해준다.

 

 

 

TCP 소켓이 통신연결상태나 서버다운등의 이유로 중간에 연결해제될때 아래와 같이 연결이 해제됨을 바로 확인이 가능하다

갑자기 시리얼에서 +WSOEVT:0,DIS_IND 값이 반환되면 0번 소켓연결이 해제된 것이다.

 

 

IoT제품의 개발을 할때 전송할 데이터의 종류(데이터의 길이)와 전송할 주기가 굉장히 중요하다.

1시간에 한번씩만 간단한 데이터를 받아도 되는 프로젝트에서는 HTTPS 통신으로 구현하는게 현실적이고

실시간성으로 데이터를 주고 받아야되는 목적이 있다면 TCP 소켓통신을 추천한다.

 

문제는 TCP소켓통신이 살아있는 쌩 평문을 보내기 때문에 평문을 암호화 처리해줘야되는데,

암호화처리가 싫다고 한다면 MQTTS로 구현하는것을 권장한다.

(SKT 담당왈, 80%정도가 MQTT(S)로 구현한다고 함)

 

우리는 월 5MB만 사용할 예정인데다 양방향 실시간 통신으로 개발할 예정이라

MQTT를 쓰지 않고 TCP소켓에서 별도의 암호문을 주고 받아야할듯 ㅠㅠ

 

보통(?) 통신방식별 데이터양

HTTPS >> HTTPS >>> MQTTS >> MQTT >>>>>>> TCP

 

통신방식별 통신방식

통신방식 서버에서 단말로 데이터 전송 단말에서 서버로 데이터 전송 서버측 구현방식
HTTP(S) 불가 가능 개쉬움. Spring, React, php 등등... 홈페이지처럼 만들면됨. 주로 JSON형태로 데이터를 변환하여 전송함.
MQTT(S) 가능 가능 별도 MQTT 브로커서버를 설치하거나 HiveMQ와 같은 서비스를 구독해서 쓰면 됨.
TCP 가능 가능 직접 코드를 짜서 서버를 구현해야됨.

 

서버측 개발난이도

TCP >>>>>>>>>>>> MQTT(S) >>>>>>>>>>> HTTP(S)

 

 

 

여기까지 테스트로 뻘짓한 내용들을 기록으로 남겨본다.

다 쓰고 나니 뭔가 주저리주저리 정신없이 쓴거 같네.