2017년 7월 13일 목요일

SIM5320E으로 3G 통신

SIM5320E는 SIMCOM이라는 회사에서 나온 3G 통신모듈이다.



다만 이 모듈을 구해도 바로 사용하기 힘들기 때문에 Adafruit에서 이 모듈의 breakout 보드를 구했다.
정확한 명칭은 Adafruit FONA 3G module로 사이트에 가 보면 US용과 EU용 두가지 버젼이 있는데 국내에서 사용하려면 꼭 EU 버젼으로 구해야 한다. 3G 주파수가 EU는 국내와 동일하게 2100MHz인데 비해 미국용은 1900MHz라 국내에서 사용할 수가 없다. 그리고 보드를 구매해도 딱 보드만 들어있기 때문에 별도로 2.1GHz 안테나와 GPS안테나를 구입해야만 사용할 수 있다. (단 GPS안테나는 옵션)



사진에서 볼 수 있는것처럼 보드의 위쪽에 커넥터와 SIM5320 모듈이 붙어있고 보드의 아래쪽에는 USIM 카드를 장착할 수 있는 소켓이 장착되어 있다.
저 보드는 휴대폰에서 마이크/스피거, 액정화면, 버튼이 빠진거라고 생각하면 된다. 즉 빠진 부품만 붙이면 완벽한 휴대폰을 만들어 줄 수도 있는 것이다.

저 모듈은 시리얼 포트를 통해 모뎀과 마찬가지로 AT 명령으로 모듈을 제어할 수 있으므로 아두이노같은마이크로 프로세서를 연결해 동작을 제어할 수 있다.


동작을 시켜보려면 휴대폰과 동일하게 개통된 USIM이 있어야 한다. 저 모듈은 일반크기의 USIM을 꼽아야 하므로 USIM adapter를 사용했다.


  먼저 보드의 아래쪽에 있는 USIM 소켓을 열어준다.


방향을 맞춰 USIM을 꼽아준다.


꼽은 다음 소켓을 닫아주면 된다. 위의 사진은 USIM이 장착 완료된 것이다.


 이제 사진의 화살표 부분에 마이크로USB 케이블을 꼽아 컴퓨터와 연결해준다. 단 Mac OS X에서는 디바이스 드라이버가 없어 장치가 인식되지 않고 윈도우와 리눅스에서만 인식된다. 여러개의 시리얼 포트로 인식되는데 만일 인식되지 않으면 디바이스 드라이버를 설치해 줘야 한다. 


케이블이 연결되면 USB커넥터와 오른쪽의 검은색 커넥터 사이에 있는LED가 빠르게 깜빡인다. 이때는 아직 전원이 켜지기 전이라 컴퓨터에는 장치가 인식되지 않고 전원을 켜 줘야만 인식된다. 오른쪽 검은색 커넥터 옆에 있는 PWR key라는 버튼을 눌러주면 모듈의 전원을 켜 주는 것이다.

 

전원이 켜지면 빠르게 깜빡이던 LED가 켜져있게 되고 컴퓨터에서는 새로운 시리얼 포트가 보이게 된다.



컴퓨터에서 시리얼 터미널 프로그램을 실행해 시리얼 포트를 연결해서 명령을 주면 모듈을 제어할 수 있는 상태가 된 것이다.
이제 여기서는 SimTech HS-USB AT Port 9000 (COM7) 포트를 열어준다. 일반 모뎀과 동일하게 AT 명령어를 사용하면 되고 사용할 수 있는명령 목록은 문서를 참고하면 된다.

SIM5320E AT command set

매우 많은 명령이 있어 아주 세밀하게 조작이 가능하지만 전화기로 사용하려면 몇개의 명령만으로도 충분하다.

시리얼 포트를 연 다음 전화를 걸고 받는걸 직접 해 보도록 하겠다. 단 전화 통화를 해야 하므로 마이크가 달려있는 이어폰을 모듈에 먼저 꼽아줘야 한다. 아래가 명령과 그에 대한 응답을 캡춰한 것이다. 굵은 글씨체가 내가 직접 입력한 명령들이고 나머지가 모듈이 출력하는 메시지이다.


at+creset
OK

START

+CPIN: READY

SMS DONE

+VOICEMAIL: INIT_STATE, 0, 0

PB DONE
at+creg
OK
at+creg?
+CREG: 0,1

OK
at+cops?
+COPS: 0,0,"KT",2

OK
atd[걸고자하는 전화번호];
OK

+WAP_PUSH: "REC UNREAD","114",,"17/07/13,11:40:56+36"
2406226170706C69636174696F6E2F766E642E7761702E6D6D732D6D65737361676500AF848C8298323376483744423134304746353030008D928A828E017C88058103093A8083687474703A2F2F642D6D6D73632E6B746677696E672E636F6D3A393038332F32337648374442313430474635303000

+WAP_PUSH: "REC UNREAD","114",,"17/07/13,11:40:56+36"
89078005EA31313400960EEAECA09CEBAAA9EC9786EC9D8C00

VOICE CALL: BEGIN

VOICE CALL: END: 000005

NO CARRIER

RING

RING

RING

RING

RING

MISSED_CALL: 01:23PM 07077374920
atd[걸고자하는 전화번호];
OK

VOICE CALL: BEGIN
at+chupVOICE CALL: END: 000015

OK
RING
ata
VOICE CALL: BEGIN

OK

VOICE CALL: END: 000007

NO CARRIER


먼저 AT+CRESET 명령으로 모듈을 리셋 시킨다. 잠시 기다리면 초기화 과정이 끝나고 PB DONE이라는 메시지가 나올 것이다. 그럼 AT+CREG? 명령을 입력해 모듈이 통신사 3G망에 등록되었는가를 확인한다. 망에 등록이 되어야만 통신(전화 걸기/받기, 문자 송/수신, 데이터 전송등)이 가능하다. AT+CREG? 명령의 응답이 '+CREG: 0,1' 이런식으로 나오는데 여기서 맨 마지막 숫자가 '1'이 나와야 정상적으로 통신사의 망에 등록이 된 것이다. 만일 이 값이 1이 아니면 등록이 안된 것이므로 다시 확인해 봐야 한다. 모듈에 해당 USIM을 처음 꼽으면 망에 등록이 안되는 경우가 있는데 이 경우는 AT+CRESET 명령을 두세번 실행한 다음 다시 확인해보면 될 것이다. 

AT+COPS? 명령으로 어느 통신사를 사용하는지 확인할 수 있다. 현재 테스트에 사용한 USIM은 에넥스텔레콤 것으로 KT망을 빌려쓰는 MVNO이므로 KT망에 등록된 걸 확인할 수 있다.

전화를 걸려면 ATD 명령을 사용하면 된다. ATD 바로 뒤에 원하는 전화번호를 쓰고 ';'를 붙여주면 된다. 즉 010-2345-6789번으로 전화를 걸고 싶으면 'ATD01023456789;'라고 입력하면 된다. ATD 명령을 내리면 실제로 전화가 걸리고 전화를 받으면 음성통화가 가능하다. 만일 통화중에 모듈쪽에서 전화를 끊고 싶으면 'AT+CHUP' 명령을 내려주면 된다. 어느쪽이 끊건 통화가 끝나면 'VOICE CALL:END:000015' 같이 통화가 끝났다는 메시지와 함께 통화시간을 알려준다.

명령을 내리지 않고 가만히 놔둬도 전화가 오면 RING이라는 메시지가 출력된다. 의도하지는 않았지만 070에서 스팸전화가 와서 받지 않고 놔뒀더니 상대방이 벨이 몇번 울린 후에 끊어서 MISSED_CALL 이라는 메시지와 함께 시간 및 발신자 전화번호가 출력되었다. 전화가 왔을 때 받으려면 ATA 명령을 내리면 된다.

일단 모듈을 연결해 가장 기본적인 음성통화를 해 보았다. 다음에는 SMS 발신 및 인터넷 연결 방법에 대해 설명하도록 하겠다.