AWS IoT

여러 대의 AWS IoT 디바이스를 연결할 때 확인해야 할 정보

장병남 2024. 8. 6. 15:39
 

LTE CATM1 모뎀에서 AWS IoT 모든 기능을 사용할 수 있습니다.

대부분 AWS IoT 기능을 설명할 때, TLS통신과 MQTT를 활용해서 AWS IoT Core에 접속해서 MQTT로 데이터를 송수신하는 기능을 지원한다고 이야기합니다. LTE CATM1 내장형 모뎀의 경우도 AT커맨드로 AWS IoT 접

codezoo.tistory.com

 AWS IoT SDK로 제작되어 AWS를 통해 공식배포된 esp-aws-iot 오픈소스 프로젝트 (https://github.com/espressif/esp-aws-iot)에 LTE CATM1 내장형 모뎀을 PPP로 연결한 위 프로젝트를 많은 개발자분들이 사용하고 계시는데, 본격적으로 디바이스를 생산해서 대규모 서비스를 시작할 때 확인해야 할 정보를 소개드립니다.
 
어제 블로그 댓글을 통해 질문받은 내용입니다. 

지금까지는 1세트로만 이것저것 구현을 하다가
최근 2세트로 하고 있는데
aws iot에 things 2개 생성해서 인증서까지 다 받았는데
A세트가 잘 동작을 하다가 B세트가 붙어 publish를 하는 순간
A세트가 아래와 같은 에러가 발생을 합니다...

이럴 땐 어떤 부분을 체크해봐야 하는지 조언 좀 부탁드립니다.

인증서는 받아서 certs에 넣어서 빌드했고
topic을 다르게도 같이도 해봤는데 B세트가 publish 하는 순간 A가 끊어집니다.
도와주세요~~
E (127603) coreMQTT: Call to receiveSingleIteration failed. Status=MQTTRecvFailed
E (127603) coreMQTT: MQTT_ProcessLoop returned with status = MQTTRecvFailed.
I (127603) coreMQTT: Disconnecting the MQTT connection with a1zcovl13ul9qv-ats.iot.us-east-1.amazonaws.com.
I (127623) coreMQTT: Disconnected from the broker.
I (127623) coreMQTT: Short delay before starting the next iteration....

I (132633) main_task: Returned from app_main()

 
이전에 AT커맨드 방식으로 AWS-IoT를 연결할 때도 비슷한 질문을 받았던 적이 있어서 새로운 Things을 만들 때 생성된 디바이스 인증서와 개인키로 교체해서 다시 빌드해서 펌웨어 업로드하면 동작될 거라고 답변드렸습니다. 
아래와 같은 답변이 다시 달렸습니다.

분명히 2개의 사물을 생성하고
각각의 client.crt, private.key를 받아서 vscodeProject/main/certs/client.crt 와 client.key에 넣고 Full clean -> bulild -> flash 했는데도 동일하네요... 두 프로젝트의 client.crt/private.key의 내용을 봐도 상이합니다...
제가 어떤 부분을 놓친 걸까요?

 
저도 무언가 놓친 것이 있는 것 같아 AWS IoT 사이트로 이동해서 테스트용 사물을 2개 생성했습니다. 

AWS_IOT_PPP, MCU_AI_Things 두개의 사물을 만들었습니다.

 
먼저 각각 사물의 디바이스 인증서와 개인키를 넣고 AWS-IoT 프로젝트를 빌드해서 동작시켜 보았습니다. 
(!) 문제없이 잘 동작되는 것을 확인했습니다. 
 
그렇다면 이제 동시에 연결해서 동작시켜 보았습니다. 
아래와 같이 MQTTRecvFailed 에러가 발생했습니다. 

AWS-IoT MQTT 예제의 경우 AWS-IoT Core에 접속 후 provisioning 후 데이터를 전송하고 연결을 종료하는 루프로 구성되어 있는데, 한쪽의 AWS-IoT 디바이스가 접속되어 있을 때 반대쪽 디바이스가 접속하려고 하면 위와 같은 에러가 발생하며 접속되지 않는 것을 확인했습니다. 
 
관련해서 AWS-IoT example의 SDK 설정에서 아래와 같은 내용을 발견했습니다. 

"이 예제에서 사용된 MQTT 클라이언트 식별자입니다. 각 클라이언트 식별자는 고유해야 하므로 동일한 브로커에 연결하는 두 클라이언트가 동일한 클라이언트 식별자를 사용하지 않도록 필요에 따라 편집하세요."
 
이런 내용이 있는 것을 확인했습니다. MQTT client를 고유한 이름으로 지정해 주어야 한다는 내용입니다. 
이전 AT커맨드 방식의 AWS-IoT 예제와 구현의 차이에 의해 여기서는 필수사항이 되었습니다. (!!)
MQTT client를 각각 client01, client02로 각각 다르게 지정해 주고 각각의 인증서와 개인키를 빌드한 펌웨어를 업로드 후 동작시켰더니 위 문제가 깔끔하게 해결되었습니다. 
 

Murata Type1SC 모듈 구매, 자료 관련 문의
(주)아성코리아
전지만 이사 010-5418-8812 mlcc@asung.com
박상인 수석 010-6556-5405 sipark@asung.com

LTE-CATM1 내장형 모뎀 구매 상담, 외주 개발, 협업 문의
(주)코드주
장병남 대표 010-8965-1323 rooney.jang@codezoo.co.kr
 

 

LTE-CatM1 내장형 모뎀 / 사물인터넷 통신모듈

사물인터넷 개발을 위한 LTE 모듈입니다. / CodeZoo / 사물인터넷 통신모듈 / 유심은 상품상세의 링크에서 별도 구매가 필요합니다.

www.devicemart.co.kr

 

LTE CATM1 ESP32 IoT 보드 : codezoo

[codezoo] IoT Global SIM, IoT Connectivity, IoT Device

smartstore.naver.com

 

Vodafone Global IoT SIM Card : codezoo

[codezoo] IoT Global SIM, IoT Connectivity, IoT Device

smartstore.naver.com