Air720D 모듈을 이용한 MQTT 통신 (AT Command)

오늘은 제가 오래전에 사두고 쓰지 않고 있던 모듈을 한번 사용해보았습니다.

Luat Air720D

Air720D를 구입하게 된 이유는, 가격이 매우 저렴한게 가장 컸습니다. 약 $14.13으로 저렴한 편에 속합니다. 물론 GNSS 기능은 탑재하지 않고 있습니다.

Air720 Series는 여러 모델이 출시되고 있는데, 제조사 홈페이지(http://www.openluat.com)에 Air720D 모델에 대한 소개가 없는 것으로 보아 단종된 모델이 아닌가 조심스레 추측해 봅니다. 하지만 Aliexpress에서는 아직 계속 판매하고 있습니다.

시리즈 별 스펙에 대한 내용은 아래 자료를 참고하시기 바랍니다.

模块型号

Air720x(3229 封装)

Air720H

Air720HA

Air720G

Air720GA

Air720D

Air720DA

Air720

分集接收

지원 주파수

GSM

B3

B8

WCDMA

B1

B8

TD-SCDMA

B34

B39

 LTE-TDD

B38

B39

B40

B41

LTE-FDD

B1

B3

√*(1)

B5

√*(2)

B8

√*(1)

GPIO

18

37

(U)SIM

1

Flash

128Mb

DDRRAM

256Mb

USB

1

UART

2

SPI (Master/Slave)

1

I2C (Master)

1

ADC

2(12bit)

封装

LCC

*注 : (1) B3,B8 较早批次的 Air720D 不支持,具体请咨询相关销售人员。
         (2) Air720分集不支持B5
Specification of Air720 Series
Specification of Air720 Series (Source: https://ask.openluat.com/wiki/6?wiki_page_id=1777)

이 모듈은 제가 사용을 해보려고 여러 번 시도를 해봤는데 때마다 실패를 했었고, 인터넷 검색을 해보니 LTE-TDD만 지원한다는 듯한 뉘앙스의 자료를 발견해서 모듈을 잘못 구입 했다고 생각했습니다.

위 자료를 보시면 “*注:(1)B3,B8较早批次的Air720D不支持,具体请咨询相关销售人员。”라는 문구가 있습니다. 제 번역이 맞는지 모르겠습니다만 저는 “초기 버전의 Air720D는 B3, B8 밴드를 지원하지 않을 수 있다. 자세한 것은 셀러에게 물어봐라” 정도로 이해 했습니다.

하지만 오늘 재시도 해보니 제가 가지고 있는 모듈은 B3, B8 밴드를 지원하는 것이 맞더라고요 ^^

오늘 성공한 내용들을 담아서 포스팅 합니다.

모듈 소개

이 모듈은 GSM900/DCS1800, FDD: B3/B8, TDD: B34/B38/B39/B40/B41 을 지원합니다. 하지만 한국은 LTE-FDD B3/B8만 해당되고 나머지는 서비스를 하고 있지 않습니다. B3/B8 대역은 한국 기준으로 SK와 KT가 서비스 중입니다.

SKT: B1/B3/B5/B7
KT: B1/B3/B8/B26
LG U+: B1/B5/B7
* 진하게: 주대역, 취소선: 주파수는 보유하고 있으나 서비스 안 하는 중

이 모듈에 ThingsMobile의 SIM을 장착하였습니다. SKT SIM카드[SK7Mobile 선불유심]의 경우는 AT+CREG=0,3 을 뱉어냅니다. 즉, Registration denied. 같은 SIM카드로 SIM7600E, SIM7080G는 이용가능했습니다. 등록이 거부된 원인을 아직까지는 모르겠습니다. 지속적으로 재시도를 하니 SKT SIM카드(SK7Mobile)도 정상작동 확인하였습니다. KT SIM카드[kt 선불유심]는 정상 작동 하였습니다.

통신 방식과 주파수 설정

일단 한국에 맞추어 모듈의 통신 방식(LTE)과 주파수(FDD B3/B8)를 고정시키겠습니다.

AT*BAND=5,1,1,482,132,1,2,2
// "LTE전용, LTE B3/B8, FDD우선, 로밍허용"

여기서 한 가지 골치아픈 일이 있었는데, 영문 매뉴얼에 AT*BAND의 <roamingConfig> 파라미터의 값이 잘못 기재되어 있었습니다. 영문 매뉴얼(AT COMMAND Set for Luat 4G Modules_V3.89)에는 <roamingConfig> 0: support, 1: not support, 2: no change로 되어 있지만, 중문 메뉴얼(Luat4G模块AT命令手册V4.3.5)에는 0과 1이 반대였습니다. 영문 매뉴얼이 잘못된 것이고 중문 매뉴얼 내용이 맞습니다. (0: 로밍불가, 1: 로밍가능)

APN 설정

APN을 설정하려 하니, 이미 자동으로 잘 세팅이 되어 있네요. SIM7080G도 APN 설정이 별도로 필요하지 않았는데, SIM7600E는 수동으로 설정해줘야 했습니다.

AT+CGDCONT?

+CGDCONT: 5,"IP","tm.mnc050.mcc234.gprs","10.193.196.37",,,80211003010010810608080808830608080404000d0408080808000d0408080404

OK

자! 이제 모든 준비가 완료됐습니다. 이제 MQTT 통신을 시작해보겠습니다.

MQTT 통신

영문 AT Command 매뉴얼에는 MQTT 통신에 관한 내용이 담겨 있지 않습니다. 따라서 중문 매뉴얼을 참고해야 합니다. 대략 알아볼 수 있도록 제가 중문 매뉴얼의 MQTT 부분을 국문으로 번역을 해논 자료가 있습니다. 아래 예제에 포함되지 않은 다른 부분들도 더 나와 있으니 필요하신 분은 참고하시기 바랍니다.

먼저 접속 정보(서버 주소, 포트, 토큰, topic)를 입력해보겠습니다.

MQTT 관련 매개변수 설정: AT+MCONFIG

AT+MCONFIG=<client id>,<username>,<password>

<client id>는 해당 접속 건에 대한 ID입니다. 임의의 문자열로 지정하시면 됩니다. Thingsboard의 경우는 <username>이 Token에 해당이 됩니다. 해당 DEVICE의 Token 값을 여기에 입력하시면 됩니다. Thingsboard에서 <password>는 빈칸으로 두시면 됩니다. 문자열은 큰 따옴표(“)로 묶어서 입력하시면 되고, 빈칸은 “”으로 입력하시면 됩니다.

TCP 연결 설정: AT+MIPSTART

AT+MIPSTART=<svraddr>,<port>

<svraddr>에는 서버 주소를, <port>에는 포트번호를 입력하면 됩니다. MQTT의 기본 포트를 사용하신다면 포트번호는 “1883”이 되겠군요.

클라이언트에서 서버로 연결 요청: AT+MCONNECT

AT+MCONNECT=<clean session>,<keepalive>

<clean session>은 세션을 초기화 할지 여부에 관한 매개 변수입니다. 저는 클라이언트, 서버를 모두 초기화할 것이므로 1을 입력하였습니다. <keepalive>는 해당 접속을 유지할 최대 시간을 의미합니다. 저는 60초를 입력하겠습니다.

이 부분에 대해서 잘 모르는 분들은 저 처럼 1, 60을 입력하시면 됩니다.

메시지 게시: AT+MPUB

이제 실제 데이터를 IoT Platform으로 MQTT 프로토콜을 이용해 전송해 보겠습니다.

AT+MPUB=<topic>,<qos>,<retain>,<message>

<qos>와 <retain>은 제겐 중요하지 않아서 매뉴얼에 나와있는 0,0을 그대로 입력했습니다.

Thingsboard에서 <topic>은 URL을 의미합니다. “v1/devices/me/telemetry”로 정해져 있습니다. 실제 전송할 이름(name)과 값(value)은 JSON의 형태로 <message>에 담깁니다. 저는 아래와 같은 정보를 전달할 것입니다.

{"air720d": ok"}

하지만 <message>를 큰 따옴표(“)로 묶어서 전송하기 때문에, 메시지 내용의 큰 따옴표와 겹치게 되는 문제가 발생합니다. 매뉴얼에는 이 경우 큰 따옴표를 “\22″로 입력하라고 권하고 있습니다. 따라서 저는 다음과 같이 전송하였습니다.

AT+MPUB="v1/devices/me/telemetry",0,0,"{\22air720d\22: \22ok\22}"

자 그러면 이제 모든 전송 작업이 끝났습니다! Thingsboard에 들어가서 확인을 해볼까요?

성공적으로 전송된 모습을 확인할 수 있습니다.

따라하시는데 있어서 참고하시라고 제 로그 기록을 아래 첨부합니다. 사소한 오타 때문에 몇 시간을 낭비하신 기억들이 있을 것입니다. 특히 큰 따옴표를 넣어야 하는지, 띄어쓰기를 해야 하는지 여부 등이 매번 헷갈리죠. 아래 로그가 그런 문제 발생 시 도움을 줄 것으로 생각됩니다.

02:09:43.038 -> RDY
02:09:44.862 ->
02:09:44.862 -> 8944501205200712305f
02:09:44.862 ->
02:09:44.862 -> ^SIMST: 0
02:09:44.862 ->
02:09:44.862 -> ^CARDMODE: 2
02:09:45.749 ->
02:09:45.749 -> +CPIN: READY
02:09:45.749 ->
02:09:45.749 -> ^SIMST: 1
02:09:45.749 ->
02:09:45.749 -> ^CARDMODE: 2
02:09:48.272 ->
02:09:48.272 -> SMS READY
02:09:51.920 -> AT+CREG?
02:09:51.920 ->
02:09:51.920 -> +CREG: 0,0
02:09:51.920 ->
02:09:51.920 -> OK
02:09:58.098 -> AT+COPS?
02:09:58.098 ->
02:09:58.098 -> +COPS: 0,2,"45005",7
02:09:58.098 ->
02:09:58.098 -> OK
02:10:01.050 -> AT+CSQ
02:10:01.050 ->
02:10:01.050 -> +CSQ: 24,99
02:10:01.050 ->
02:10:01.050 -> OK
02:10:06.395 -> AT+CREG?
02:10:06.395 ->
02:10:06.395 -> +CREG: 0,0
02:10:06.395 ->
02:10:06.395 -> OK
02:10:09.110 -> AT+CREG=1
02:10:09.110 ->
02:10:09.110 -> OK
02:10:11.264 -> AT+CREG?
02:10:11.264 ->
02:10:11.264 -> +CREG: 1,0
02:10:11.264 ->
02:10:11.264 -> OK
02:10:18.007 ->
02:10:18.007 -> +CREG: 5
02:10:18.007 ->
02:10:18.007 -> +CGEV: EPS PDN ACT 5
02:10:18.007 ->
02:10:18.007 -> +NITZ: PLMN Short Name: SKTelecom,
02:10:20.629 ->
02:10:20.629 -> +NITZ: 20/12/31,17:10:18+36,0
02:10:29.298 -> AT+CREG?
02:10:29.298 ->
02:10:29.298 -> +CREG: 1,5
02:10:29.298 ->
02:10:29.298 -> OK
02:20:09.609 -> AT+CREG=0
02:20:09.609 ->
02:20:09.609 -> OK
02:20:10.542 -> AT+CREG?
02:20:10.542 ->
02:20:10.542 -> +CREG: 0,5
02:20:10.542 ->
02:20:10.542 -> OK
02:20:13.900 -> AT+MCONFIG=0,"5Lk9ra*******C4iS62",""
02:20:13.900 ->
02:20:13.900 -> OK
02:20:18.652 -> AT+MIPSTART="thing****.*****e.kr","1883"
02:20:18.652 ->
02:20:18.652 -> OK
02:20:20.892 ->
02:20:20.892 -> CONNECT OK
02:21:03.792 -> AT+MCONNECT=1,60
02:21:03.792 ->
02:21:03.792 -> OK
02:21:04.633 ->
02:21:04.633 -> CONNACK OK
02:21:08.971 -> AT+MPUB="v1/devices/me/telemetry",0,0,"{\22air720d\22: \22ok\22}"
02:21:08.971 ->
02:21:08.971 -> OK
02:21:09.761 ->
02:21:55.552 -> AT+CGDCONT?
02:21:55.552 ->
02:21:55.552 -> +CGDCONT: 5,"IP","tm.mnc050.mcc234.gprs","10.***.***.37",,,80211003010010810608080808830608080404000d0408080808000d0408080404
02:21:55.599 ->
02:21:55.599 -> OK

KT 유심을 사용했을 때의 로그도 첨부합니다.

15:33:02.802 -> AT+CREG?
15:33:02.802 -> 
15:33:02.802 -> +CREG: 0,0
15:33:02.802 -> 
15:33:02.802 -> OK
15:33:04.806 -> 
15:33:04.806 -> +CGEV: EPS PDN ACT 5
15:33:04.852 -> 
15:33:04.852 -> +NITZ: PLMN Long Name: KT, 
15:33:04.852 -> 
15:33:04.852 -> +NITZ: PLMN Short Name: KT, 
15:33:07.556 -> 
15:33:07.556 -> +NITZ: 21/01/01,06:33:05+36,0
15:33:09.286 -> 
15:33:09.286 -> SMS READY
15:33:16.299 -> 
15:33:16.299 -> +CMT:,60
15:33:16.299 -> 07912801929190454400a17d04121010513341632f0605040b840b84010603c4af876509f4f09a4ff55f1e27e7c8ca78ba5a02d800000022190a636f6d2e6b742e696d73
15:33:25.019 -> AT+CREG?
15:33:25.019 -> 
15:33:25.019 -> +CREG: 0,1
15:33:25.019 -> 
15:33:25.019 -> OK
15:33:49.556 -> 
15:33:49.556 -> +CMT:,123
15:33:49.556 -> 07912801929190450403a111f40008121010513384636c005b005700650062bc1cc2e0005d000a005b004b0054c548b0b4005d0020c790ae09b2e8b9d0c7400020d1b5d654002f004d004d0053002fb370c774d1300020c11cbe44c2a4c7580020d488c9c80020cc28c774ac000020c788c7440020c2180020c788c2b5b2c8b2e4002e

다음은 SKT(SK7Mobile 알뜰폰 선불유심) 사용 시의 로그입니다.

21:41:29.868 -> +NITZ: PLMN Short Name: SKTelecom, 
21:41:32.365 -> 
21:41:32.365 -> +NITZ: 21/01/01,12:41:29+36,0
21:41:32.365 -> AT+CREG?
21:41:32.365 -> 
21:41:32.365 -> +CREG: 0,1
21:41:32.365 -> 
21:41:32.365 -> OK
21:46:29.230 -> AT+MCONFIG=0,"5Lk**********iS62",""
21:46:29.230 -> 
21:46:29.230 -> OK
21:46:32.325 -> AT+MIPSTART="thin**************r","1883"
21:46:32.325 -> 
21:46:32.325 -> OK
21:46:32.557 -> 
21:46:32.557 -> CONNECT OK
21:46:35.133 -> AT+MCONNECT=1,60
21:46:35.133 -> 
21:46:35.133 -> OK
21:46:35.180 -> 
21:46:35.180 -> CONNACK OK
21:46:42.810 -> AT+MPUB="v1/devices/me/telemetry",0,0,"{\22air720d\22: \22ok\22}"
21:46:42.810 -> 
21:46:42.810 -> OK
21:46:48.570 -> AT+CGDCONT?
21:46:48.570 -> 
21:46:48.570 -> +CGDCONT: 5,"IP","lte.sktelecom.com.mnc005.mcc450.gprs","10.***.**.129",,,802110030100108106ac19e3078306ac1b38aa000d04ac19e307000d04ac1b38aa
21:46:48.570 -> 
21:46:48.570 -> OK

혹시나 하고 LG U+ USIM(에스원안심모바일 알뜰폰 후불)도 테스트 해보았습니다. BAND를 LG U+에서 서비스 하는 B1/B5/B7로 고정하고 AT+COPS=?를 여러번 시도해 보았는데, 전파가 전혀 잡히지 않습니다. 애초 Air720D는 B1/B5/B7은 지원 안 하기 때문에 당연한 결과입니다 ^^.

이것도 조만간 Arduino Library, MBlock 5 확장블럭으로 만들어야 겠습니다.

음.. 매번 포스팅 하는 시간이 새벽이네요. 2021년 새해부턴 늦게 안 자려고 했는데 ㅠㅠ 이만 저는 자러갑니다. 궁금한 내용은 댓글 달아주세요 ~~^^


답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다