본 문서에서는 Arm MBED 기반 개발 환경에서 WIZnet IoT shield와 ST Nucleo-L476RG 보드를 이용하여 Cat.M1 단말의 ThingPlug 에 연결하고 데이터를 송신하는 방법에 대한 가이드를 제공합니다.
Cat.M1과 같은 Cellular IoT 디바이스는 통신 서비스 사업자의 운영 기준 및 규정에 따라 모듈 펌웨어 및 동작 방식에 차이가 있을 수 있습니다. 본 문서는 한국 SK Telecom Cat.M1 서비스 를 기준으로 작성되었습니다.
아래 가이드는 Arm MBED 기반에서 Cat.M1 모듈이 ThingPlug 연동하는 내용에 대해 설명하고 있습니다. ThingPlug 사용법에 대한 보다 자세한 설명은 ~를 확인하세요
MCU Board | IoT Shield Interface Board |
---|---|
ST Nucleo-L476RG | WIoT-QC01 (BG96) |
ThingPlug 는 고객의 IoT 디바이스의 관제/제어와 빅데이터 비즈니스를 제공하는 SKT의 IoT 플랫폼입니다. 사용자가 ThingPlug를 활용하여 IoT 서비스를 손쉽게 구현할 수 있도록 지원하고 있습니다.
Cat.M1 모듈 및 외장형 모뎀은 UART 인터페이스를 통해 활용하는 AT 명령어로 제어하는 것이 일반적입니다. 또한 SKT 인증 Cat.M1 모듈에는 ThingPlug와 쉽게 연동할 수 있는 AT 명령어가 구현되어 있고, 이 명령어를 사용해 쉽게 ThingPlug와 연결할 수 있습니다.
이번 ThingPlug 연동 예제는 Arm MBED 환경에서 ThingPlug AT 명령어를 활용한 Cat M1 모듈의 데이터 송수신을 확인하실 수 있습니다.
AT+SKTPCON
status: disconnected // 초기 상태 disconnected
OK
AT+SKTPCON=1,"MQTT","test.sktiot.com",1883,120,1,"simple_v1","a0149f60b*********","svc01","dev02"
OK
+SKTPCON: 0 // 접속에 성공하면 +SKTPCON: 0 수신
AT+SKTPCON
status: connected // 접속 상태가 connected로 변경됨
OK
AT+SKTP // 연결 정보 확인
version: 1.0.0
status: connected
protocol: MQTT
host: test.sktiot.com
port: 1883
keep-alive: 120
cleansession: 1
api_version: simple_v1
device_token: ....b1dc
service_id: svc01
device_id: dev02
client_id: 866425035073255_dev02
OK
AT+SKTPDAT=1,"telemetry",0 // 데이터 타입 telemetry로 전송시
> {"temperature":12, "humidity":34} // '>' 프롬프트 이후에 데이터 입력, 입력 완료는 Ctrl+Z
OK
AT+SKTPDAT=1,"attribute",0 // 데이터 타입 attribute로 전송시
> {"LED":"ON"} // '>' 프롬프트 이후에 데이터 입력, 입력 완료는 Ctrl+Z
OK
+SKTPCMD: tp_user,1815296803,1,[20,14] // RPC 수신
AT+SKTPRES=1,"tp_user",1815296803,0 // PRC에 대한 처리 결과 응답
> {"result":"success"}
OK
+SKTPCMD: tp_user,1815296803,3
+SKTPCMD: tp_user,1815296803,4
MBED 온라인 컴파일러에 Log in 하여 상단 메뉴의 Import
를 클릭합니다.
Programs
탭을 클릭 후 검색창에 다음 예제를 검색하여 나의 Program Workspace에 추가합니다.
Sample code | Link |
---|---|
WIZnet-IoTShield-BG96-ThingPlug | https://os.mbed.com/users/hkjung/code/WIZnet-IoTShield-BG96-ThingPlug/ |
Import Programs
팝업 창이 활성화 될 때, Import As 옵션이 Program으로 설정되어 있어야 합니다.
링크를 클릭하여 예제 프로젝트의 저장소를 방문한 경우, 오른쪽 상단 Repository toolbox
의 Import into Compiler
를 클릭하시면 나의 Program Workspace 해당 예제를 추가 할 수 있습니다.s
ThingPlug 연동을 위해 서비스ID, 디바이스ID, 디바이스Token과 디바이스 명세에 등록한 Telemetry, attribute를 변경해야 합니다.
/* THINGPLUG PRIVATE*/
#define THINGPLUG_SVC_NAME "svc01"
#define THINGPLUG_DEV_ID "dev02"
#define THINGPLUG_DEV_TOKEN "a0149f60b*********"
#define THINGPLUG_TELEMETRY1 "temperature"
#define THINGPLUG_TELEMETRY2 "humidity"
#define THINGPLUG_ATTRIBUTE "LED"
상단 메뉴의 Complie
버튼을 클릭합니다.
컴파일이 성공적으로 완료되면 project_name.bin
파일이 생성되어 download 됩니다. 이 파일을 Drag & Drop
하여 연결된 MBED target 보드에 삽입하면 firmware write가 완료됩니다.
예제 샘플 코드를 통해 Cat.M1 모듈의 ThingPlug 연결과 데이터 송/수신을 테스트 해볼 수 있습니다.
- 예제 샘플 코드는 보드가 부팅 되면, 미리 정의된 ThingPlug 정보를 바탕으로 ThingPlug에 접속합니다. 접속이 완료되면 telemetry와 attribute 데이터를 전송하고 제어명령 수신 상태로 동작하게 됩니다.
int8_t connectThingPlug_BG96(char* svc_id, char* dev_id, char* dev_token);
- ThingPlug에 접속합니다.
- ThingPlug에 접속하기 위한 파라메터인 서비스ID와 다비아스ID, 디바이스Token을 전달합니다.
int8_t sendThingPlugData_Json_BG96(char* type, char * data, int len);
- ThingPlug로 Json 타입의 데이터를 전송합니다.
- 데이터 타입(telemetry, attribute)와 데이터, 데이터의 길이를 파라메터로 전달합니다.
int8_t recvThingPlugCmd_BG96(char* cmd_type, unsigned int* rpc_id, char* msg);
- SMS 메시지의 수신 여부를 체크합니다. 만약 메시지가 수신되면 수신 메시지 index를 리턴합니다.
- ThingPlug의 제어명령 수신 여부를 체크합니다. 만약 제어명령이 있다면, true를 리턴합니다.
- 메인 루프 안에서 동작해야 합니다.
int8_t sendThingPlugResp_BG96(char* cmd_type, unsigned int rpc_id, int result, char* result_data, int result_len);
- 수신한 제어명령의 수행 결과를 ThingPlug로 전달합니다.
- recvThingPlugCmd_BG96()에서 수신한 제어명령의 cmd_type과 rpc_id를 수행결과의 파라메터로 전달해야 합니다.
- 접속 후 telemetry 1회 전송
- 제어명령 RPC 수신 후 결과 전송