-
CZ-ME310G1모뎀으로 AWS-IoT 쉽게 사용하기AWS IoT 2026. 6. 14. 03:29
CZ-ME310G1 모뎀을 사용해서 AWS-IoT를 MCU에서 직접 다루는 것보다 훨씬 쉽고 간단하게 사용할 수 있습니다.
AWS-IoT Core와 통신하기 위한 SSL, MQTT 소프트웨어 스택이 모두 CZ-ME310G1 모뎀 내부에 구축되어 있어서 AT커맨드 명령어만 사용해도 손쉽게 AWS-IoT 프로비저닝, AWS-IoT MQTT 통신을 할 수 있습니다.

https://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/what-is-aws-iot.png
AWS-IoT를 사용하기 위해서는 먼저 AWS 계정을 만들어야 합니다. 순서대로 천천히 따라 하시면 됩니다.
https://aws.amazon.com/iot-core
1. 계정을 만들고 로그인 후 IoT Core로 이동합니다.
2. 보안 --> 정책 이동합니다.
3. 정책생성 버튼을 누릅니다.
4. 원하는 정책이름을 쓰고 아래 JSON버튼을 누릅니다.
5. 정책문서 폼이 나오면 아래 내용을 복사해서 넣고 생성버튼을 누릅니다.{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iot:Publish",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iot:Receive",
"Resource": "*"
}
]
}
6. 아래와 같은 정책이 생성된 것을 확인할 수 있습니다.
7. 관리 --> 사물을 선택합니다.
8, 사물 생성 버튼을 누릅니다.
9. 단일 사물 생성 --> 다음 버튼을 누릅니다.
10. 원하는 사물 이름을 작성하고 다음을 누릅니다.
11. 새 인증서 자동 생성(권장)을 선택하고 다음을 누릅니다.
12. 5에서 만든 정책을 선택하고 사물 생성 버튼을 누릅니다.
13. 사물 생성이 완료되면 인증서 및 키 다운로드 화면이 나옵니다. 가장 중요한 내용 입니다. 아래와 같이 디바이스 인증서, 프라이빗 키 파일, Amazon 신뢰 서비스 엔드포인트(RSA 2048비트 키)를 각각 다운로드합니다. 해당 키는 보안의 핵심요소로 지금만 다운로드할 수 있습니다. 엄격한 관리하에 잘 보관해 두어야 합니다. (퍼블릭 키 파일은 지금 사용하지 않지만 함께 다운로드합니다.)
14. 아래와 같이 저장공간에 잘 저장해 두었습니다.
이제 복잡한 AWS-IoT 사물 만들기 작업이 마무리되었습니다.
15. 마지막으로 우리가 접속할 IoT Core 엔드포인트 주소를 확인합니다.
관리 --> MQTT 클라이언트 연결 --> 엔드포인트 주소를 확인하고 잘 메모해 놓아야 합니다.
이제 example을 통해 위의 과정을 통해 만들어진 RootCA1.pem, certificate.pem.crt, private.pem.key를 모뎀에 저장합니다.
ME310G1 Arduino Library가 0.1.8 버전 이상인지 확인합니다. 낮은 버전이면 업데이트합니다.
Examples --> ME310G1 --> mqtts_cert_Write를 선택합니다.
예제를 실행하면 RootCA 내용은 있지만 deviceCert, privateKey의 내용은 없습니다. 해당 내용은 certificate.pem.crt, private.pem.key값을 각각 넣어주면 됩니다. 윈도 사용자의 경우 여기서 주의해야 할 내용이 있습니다.
줄끝 문자(EOL) 변환이 Unix 형태로 되어 있어야 합니다. 윈도는 줄 바꿈시 \r\n을 사용하지만 유닉스의 경우 \n을 사용하기 때문에 정확하게 동작시키기 위해서는 유닉스로 줄바꿈 처리가 되어 있어야 합니다. https 인증서를 윈도에서 다운로드할 때도 꼭 확인해서 줄 바꿈이 Windows면 꼭 Unix형태로 변경해서 저장해야 인증서 통신 에러를 막을 수 있습니다.
소스코드에 디바이스 인증서, 개인키를 복사 후 펌웨어를 업로드합니다.
시리얼 모니터에서 출력되는 내용 중 VERIFY 뒤에 나오는 Root CA, Deivce Cert, Private Key 값과 소스코드에 입력한 값이 맞는지 최종 확인 합니다. (보안을 위해 키 내용을 삭제했습니다.)...
[VERIFY] Root CA:
[SEND] AT#SSLSECDATA=1,2,1
AT#SSLSECDATA=1,2,1
#SSLSECDATA: 1,1
-----BEGIN CERTIFICATE-----
MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF
ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv
b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj
ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM
9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw
IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6
VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L
93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm
jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA
A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI
U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs
N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv
o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU
5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy
rqXRfboQnoZsG4q5WTP468SQvvG5
-----END CERTIFICATE-----
OK
--- Processing Device Certificate ---
...
[VERIFY] Device Certificate:
[SEND] AT#SSLSECDATA=1,2,0
AT#SSLSECDATA=1,2,0
#SSLSECDATA: 1,0
-----BEGIN CERTIFICATE-----
MIIDWTCCAkGgAwIBAgIUWLxaJNLtPbkb/3Bc1Cf4xcLZvLgwDQYJKoZIhvcNAQEL
BQAwTTFLMEkGA1UECwxCQW1hem9uIFdlYiBTZXJ2aWNlcyBPPUFtYXpvbi5jb20g
...
bFAFtA4z2XFQdGScWS9vFiRIa+7cKE6qq4eVdGfg8avMWD/7q2CJBu+Wu9Na
-----END CERTIFICATE-----
OK
--- Processing Private Key ---
...
[VERIFY] Private Key:
[SEND] AT#SSLSECDATA=1,2,2
AT#SSLSECDATA=1,2,2
#SSLSECDATA: 1,2
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAoZ2PuRFxVQPCQdrHDTkQc+NpsDz0Ap8JNBgeDGfUq9vbuDRg
4zBf5y2UfdXhVmufGWZjswKE5lNadSySTdglHNnfj//ZFkk8PT8yEYLjxmNopM86
CfPexsYurEziPbSFa0A0zPLU0S+8cQF+7q+QMx2ZSDsyWSTWOJgjx0XUIQBn2HFT
q40tRtayZQUOk4j92rN4XJmZ2O3529VCTBW6zg9qQXLxQWO0IzKjoIXYxVB0cJz1
...
bRP58xkG1gCLS7cgSlyZlhefumpLd8E0hT8PKJX/G8JqgZ4bHgPwGg==
-----END RSA PRIVATE KEY-----
OK
=== All Provisioning Done ===
ME310G1 Modem Power Off
이제 AWS-IoT MQTT 예제를 돌려 보겠습니다.
Examples --> ME310G1 --> AWS_IoT_Mqtt_Test를 실행합니다.
소스코드에서 수정할 부분이 2군데 있습니다.
첫 번째는 이전에 IoT Core에서 확인한 엔드포인트 주소를 HOSTNAME에 넣어주셔야 하고, 두 번째는 CLIENT_ID를 사용하시는 고유이름으로 변경해야 합니다. 만약 5개의 모뎀을 같은 엔드포인트에 접속하신다고 하면 M01, M02, M03, M04, M05와 같이 이름을 변경해 주셔야 프로비저닝에 문제가 발생하지 않습니다. 하나의 엔드포인트에는 같은 이름의 클라이언트 동시접속을 허용하지 않습니다.
아래 MQTT_PUB, MQTT_SUB이 있는데,
MQTT_PUB은 이 코드가 동작하는 CZ-ME310G1모뎀이 IoT Core로 데이터를 Publish 하는 토픽입니다.
MQTT_SUB은 IoT Core에서 접속한 모뎀에 메시지를 보낼 때 사용하는 토픽입니다.
이 토픽들을 MQTT 테스트 클라이언트 --> 주제 구독 --> 주제 필터에 구독시켜 둡니다.
일단 모뎀에서 전송되는 메시지를 받아야 하니 test/reply를 선택해 둡니다.
이제 소스코드를 업로드합니다.
절차대로 초기화 후 SSL설정하고 MQTT로 AWS IoT Core 엔드포인트에 접속합니다.
PUB 토픽에 Hello AWS, Hello\n AWS123을 각각 보내고 수신모드로 대기합니다.AT
AT
AT
AT$GPSP=1
AT$GPSP=0
[CLEANUP] Disconnecting MQTTS Session...
AT#MQDISC=1
AT#MQEN=1,0
AT#SGACT=1,0,"",""
======================================
ME310G1 AWS IoT MQTTS Secure Test
======================================
AT+CMEE=2
AT+CPIN?
[NET] Defining PDP Context...
AT+CGDCONT=1,"IP","simplio.apn"
[NET] Checking LTE Network Registration (CEREG)...
[TX] AT+CEREG?
AT+CEREG?
+CEREG: 0,5
OK
[SUCCESS] LTE Network Attach successful!
[NET] Activating data session context...
AT#SGACT=1,1
[NTP] Syncing modem clock with Google NTP Server...
AT#NTPCFG=1,0
-> NTP Configuration OK.
AT#NTP="216.239.35.0",123,1,5,36
-> NTP Configuration OK.
[MQTT] Checking MQTT Enable Status...
AT#MQEN?
[MQTT] Enabling MQTT Instance 1...
AT#MQEN=1,1
[SSL] Applying AWS IoT Security Parameters via Native Library APIs...
AT#SSLEN=1,0
AT#MQCFG=1,"(주소생략).amazonaws.com",8883,1,1
AT#SSLSECCFG=1,0,2
AT#SSLSECCFG2=1,3,1,1,1
AT#SSLCFG=1,1,300,90,100,50,0,0,1,0
AT#MQCFG2=1,60,1
-> Native SSL/TLS APIs Applied Successfully.
[MQTT] Connecting to AWS IoT Core Broker...
AT#MQCONN=1,"codezoo","",""
[SUCCESS] MQTTS Connected to AWS!
[TX] AT#MQCONN?
AT#MQCONN?
#MQCONN: 1,1
OK
[MQTT] Subscribing to topic...
AT#MQSUB=1,"test/topic"
[MQTT] Publishing test messages...
AT#MQPUBS=1,"test/reply",0,0,"Hello AWS"
AT#MQPUBS=1,"test/reply",0,0,"Hello
AWS123"
>>> Setup Complete. Entering Asynchronous URC Listening Mode within setup()...
IoT Core에 Hello AWS, Hello\nAWS123 각각 2초 가격으로 수신된 것을 확인할 수 있습니다.
이제 IoT Core에서 모뎀으로 메시지를 보내겠습니다.
test/topic을 선택하고 메시지는 준비된 메시지 그대로, 게시버튼을 누릅니다.
IoT Core에서 메시지를 보내고 몇 초 후 시리얼 모니터에서 아래와 같이 메시지가 도착한 것을 확인할 수 있습니다.
예제는 메시지 수신 1회 후 자동으로 통신 종료 하도록 구현되어 있습니다.
동작영상
LTE-CATM1 내장형 모뎀 대량 구매 상담, 외주 개발, 협업 문의, vodafone IoT유심 문의
(주)코드주
장병남 대표 010-8965-1323 rooney.jang@codezoo.co.kr
코드주 LTE-CatM1 내장형 모뎀 CZ-ME310G1 / GNSS(GPS) 지원 / 외장 LTE 안테나 포함 / Zephyr 및 Arduino 지원
메카솔루션 공식 쇼핑몰
www.mechasolution.com
iot유심 : codezoo
[codezoo] IoT Global SIM, IoT Connectivity, IoT Device
smartstore.naver.com
'AWS IoT' 카테고리의 다른 글
여러 대의 AWS IoT 디바이스를 연결할 때 확인해야 할 정보 (3) 2024.08.06 LTE CATM1 모뎀에서 AWS IoT 모든 기능을 사용할 수 있습니다. (5) 2024.03.31 2023한국전자전 Murata IoT 스마트팜 전시품 제작 (0) 2023.10.09 LTE CATM1 내장형모뎀을 활용한 스마트팜 데모 영상 (0) 2022.06.17 AWS IoT SiteWise Example 오픈소스 업로드 (0) 2022.02.19