Lwip PPP 모뎀

HiveMQ TLS Free MQTT 클러스터와 LTE CATM1모뎀으로 어디서나 제어할 수 있는 스마트릴레이 만들기

장병남 2024. 5. 25. 03:51

예전 회사에서 함께 IT일을 했던 동료가 몇 년 전 귀농을 했습니다.
한번 놀러 오라는 이야기에 직접 내려가서 이것저것 이야기 하던 중 비닐하우스로 재배를 하는데 날씨가 더우면 하우스 창문을 열어줘야 하고 비가 오거나 바람이 심하게 불면 닫아 줘야 하는데 이걸 직접 가서 해야 하니 다른 일이라도 하고 있거나 멀리 나와 있을 때도 있어서 여간 귀찮은 일이 아니라며 편리하게 쓸만한 도구 좀 만들어 달라고 이야기했습니다.
 
전원코드가 연결되어 있는 상태에서 스위치만 켜주면 동작시킬 수 있게 준비되어 있다고 하면 LTE CATM1 모뎀을 이용해서 원격제어가 가능할 것 같다는 생각을 했습니다. 하지만 여기서 통신모뎀만큼 중요한 한 가지가 더 있습니다. 제어명령을 전달해 줄 나만의 안전한 서버입니다. 물론 AWS, Azure, Google Cloud와 같은 상용서비스를 사용할 수도 있지만 처음 시작하는 단계에서 비용을 최소화해서 할 수 있는 방법이 없을까 해서 계속 찾고 있었습니다. 
 
HiveMQ(https://www.hivemq.com)에서 AWS Cluster 기반의 TLS가 지원되는 Free Serverless 환경을 100개의 연결/월 10GB의 트래픽까지 무료로 제공하고 있다는 정보를 입수했습니다. 
 
이제 LTE CATM1 모뎀과 ESP32 릴레이 보드, 그리고 HiveMQ에서 제공하는 TLS Free MQTT클러스터로 어디서나 원격제어할 수 있는 스마트릴레이 솔루션을 함께 만들어 보도록 하겠습니다. 
 
전체 구조를 간단히 정리해 보았습니다.  
HiveMQ TLS MQTT 서비스, LTE CATM1과 결합한 스마트릴레이, 사용자,  MQTT 토픽, MQTT 앱에 대한 내용은 뒤에서 하나하나 다루도록 하겠습니다. 

스마트릴레이 서비스 전체 구조도 (dgm.sh)


 
시작하기에 앞서 동작 데모영상을 함께 감상하겠습니다.
 

스마트 릴레이 테스트 영상

 
- 스마트릴레이는 LTE CATM1 모뎀이 연결되어 있어서 동작시키는 사람이 같은 공간에 있을 필요는 없지만 촬영을 위해서 같은 장소에서 MyMQTT 스마트폰 앱으로 릴레이를 동작시켰습니다.
- 4 채널 릴레이의 각각의 릴레이를 멀티탭의 콘센트당 한 개씩 연결해서 콘센트에 연결된 장비들을 개별제어 할 수 있도록 준비했습니다.
 
자 이제 순서대로 하나씩 제작해 보도록 하겠습니다.
먼저 TLS Free MQTT 클러스터입니다.
아래 사이트로 이동합니다. 

https://www.hivemq.com/pricing/

 

 
Get Started를 선택합니다.
계정이 없으면 만들라고 나오는데 저는 google메일을 선택해서 계정을 만들었습니다.
 
이제 Free Clusters를 활성화합니다. 우측상단에 Create버튼을 누릅니다.

 
생성이 완료되면 아래와 같은 클러스터 내역을 확인할 수 있습니다.

위 정보 중 Port 정보와 TLS MQTT URL은 디바이스 펌웨어 코드에 입력해야 합니다.
 
 상단 두 번째 탭인 ACCESS MANAGEMENT를 선택하고 내가 사용할 MQTT 계정에 Username과 Password를 지정합니다. 입력을 마친 후 CREATE CREDENTIAL 버튼을 누릅니다.

아래 정보를 보면 Username과 Permission type을 확인할 수 있습니다. 아무나 내 계정에 들어와서 내 장비들을 제어할 수 없게 꼭 Username과 Password를 지정하시기 바랍니다. 

 
이후 디바이스 동작테스트 할 때  상단의 네 번째 메뉴인 WEB CliENT를 이용해서 테스트합니다. 

 
토픽을 구독한 상태에서 구독한 토픽에 Publish Message를 하면 제일 하단에 순서대로 올라오는 메시지 정보를 확인할 수 있습니다. 

 
참고로 스마트릴레이는 아래와 같이 두 개의 토픽을 사용합니다.
type1sc/100/test 외부에서 스마트릴레이에 명령을 내리는 목적으로 type1sc/100/status 스마트릴레이에서 명령대로 잘 수행했는지 외부에서 확인하기 위해 사용됩니다.

명령 Topic: type1sc/100/test 응답 Topic: type1sc/100/status
relay1:1 RELAY1 On.
relay1:0 RELAY1 Off.
relay2:1 RELAY2 On.
relay2:0 RELAY2 Off.
relay3:1 RELAY3 On.
relay3:0 RELAY3 Off.
relay4:1 RELAY4 On.
relay4:0 RELAY4 Off.

 
실제 WEB CLIENT에서 테스트 중 확인 한 메시지 결과입니다.

 
스마트폰 앱으로도 명령 및 응답을 확인할 수 있는데, 접속할 때 TLS MQTT URL을 Host에 넣고 포트값을 넣고 SSL을 체크 후 Username과 Password를 입력 후 Connect버튼을 누릅니다. 

MQTT앱의 자세한 사용방법은 이전글 https://codezoo.tistory.com/67 을 참고하시기 바랍니다.
 
펌웨어 작업을 하기 앞서서 하드웨어 셋업을 진행하겠습니다. 
ESP32가 탑재된 4 채널 릴레이입니다.
회로도를 이전에 다운로드 받아서 출력해 두었는데, 새로 받으려고 검색을 해봐도 찾을수가 없어서 인쇄물을 캡쳐해서 업로드 합니다.

ESP32_X8_Relay.jpg
2.47MB

 
핀헤더를 연결해 줍니다. 

LTE CATM1 모뎀은 아래와 같이 실드 액세서리를 연결해서 준비합니다. 

릴레이보드의 펌웨어 업데이트와 디버그 메시지를 확인하기 위해 USB TTL보드를 준비합니다. 
 

ESP32 모듈 아래 좌측 3번째 GND에 USB TTL GND를 연결하고 4번째 RXD0에 USB TTL TXD, 5번째 TXD0에 USB TTL RXD를 연결합니다. 릴레이보드 뒷면에 핀이름이 표기되어 있으니 참고하시기 바랍니다.  

위 사진 우측하단에 두 개의 버튼이 있는데 펌웨어 업데이트할 때와 보드를 재시작할 때 두 개의 버튼을 조작합니다. EN버튼은 리셋버튼입니다. 평소에 리셋할 때 눌러 주시면 됩니다. 펌웨어 업데이트 할 때는 IO0를 누르고 있는 상태에서 EN버튼을 클릭해 주시고 IO0버튼을 누르고 계시거나 약간 지연 후 떼시면 펌웨어 업데이트 모드로 전환되어 펌웨어가 업데이트됩니다. 다른 ESP32 보드와 달리 버튼 두 개로 수동으로 해줘야 하므로 잘 기억하고 있어야 합니다. 
 
LTE CATM1 모뎀과 릴레이보드를 연결합니다. 
LTE CATM1 모뎀은 아래와 같이 0, 1, 2, GND, 5V, IO_REF에 각각 점퍼선을 연결합니다. 

0, 1, 2, GND, 5V, IO_REF에 각각 점퍼선 연결

 
왼쪽 상단 좌측 3.3V핀에 IO_REF 점퍼선을 연결하고 왼쪽 하단 좌측 GND핀에는 GND, 왼쪽 우측 5V핀에는 5V 점퍼선을 각각 연결합니다. 
오른쪽 위에서부터 6번째 좌측 17핀에는 1, 우측 16핀에는 0, 16핀 한 칸 위인 5핀에는 2 점퍼선을 각각 연결합니다.
릴레이보드 뒷면에 핀이름이 표기되어 있어서 확인하면서 연결합니다.  

 
마지막으로 연결해야 하는 선을 정리하면 아래와 같습니다.

릴레이보드 핀번호 CATM1 실드 핀번호 릴레이보드 핀번호 CATM1 실드 핀번호
17 1 3.3V IO_REF
16 0 5V 5V
5 2 GND GND

 
추가로 릴레이보드에는 전원 LED 외 사용자 LED가 한 개 더 있습니다. 
D13 LED는 전원 LED이고 D14 LED는 사용자 LED입니다. 사용자 LED는 GPIO23에 연결되어 있습니다. 사용자 LED는 릴레이보드가 CATM1 모뎀을 이용해서 MQTT서버 접속 후 구독까지 완료되어 명령을 받을 준비를 마쳤을 때 켜지도록 코드를 구성해 두었습니다. 코드 설명은 뒤에서 다루겠습니다. 

 
이제 릴레이와 연결된 GPIO번호를 소개하겠습니다. 

Relay1 GPIO32
Relay2 GPIO33
Relay3 GPIO25
Relay4 GPIO26

 
릴레이보드는 3개의 전원 입력방법을 제공합니다. 
1. N, L 터미널에 220V 교류 전원 연결
2. 3구 터미널에 7-30V 직류 전원 연결
3. 3구 터미널에 5V 직류 전원 연결
 
테스트는 1을 사용해서 진행했지만 안전을 위해 2 또는 3 전원 입력을 추천합니다.
 
마지막으로 펌웨어 코드를 소개합니다.
이전에 LTE CATM1 모뎀을 사용할 수 있게 포팅한 esp_modem 코드에 SSL example로 추가해서 코드를 작성했습니다.
ESP-IDF SDK를 이용한 개발환경이 구축되어 있지 않으시면 https://codezoo.tistory.com/79 내용을 참고해서 개발환경을 먼저 구축하시기 바랍니다.
 
아래 프로젝트를 유저 디렉터리에 클론 또는 ZIP으로 다운로드합니다.
https://github.com/codezoo-ltd/esp-protocols 

 

GitHub - codezoo-ltd/esp-protocols: Collection of ESP-IDF components related to networking protocols

Collection of ESP-IDF components related to networking protocols - codezoo-ltd/esp-protocols

github.com

 
 vscode를 실행하고 File --> Open Folder를 선택하고 아래 경로를 오픈합니다.
esp-protocols/components/esp_modem/examples/ssl

 
아래 메뉴로 좌측 포트부터 순서대로 설정합니다. 

 
톱니바퀴를 눌러서 SDK설정화면에 들어가면 Broker URL에 HiveMQ TLS MQTT URL를 mqtts:// 이후에 넣습니다.

 
설정을 저장합니다.
 
빌드하기 전 main/app_main.c의 60, 61번 라인에 HiveMQ에서 지정한 User name과 Password를 " 안에 " 입력합니다.

 
이제 준비가 마무리되었습니다. 
펌웨어를 올려서 테스트하시기 바랍니다. 업데이트 전 IO0 누르고 있는 상태에서 EN을 클릭해서 리셋해서 다운로드 모드로 변경하는 것 잊지 마시기 바랍니다. 

펌웨어 업데이트 후에는 EN버튼을 눌러서 릴레이보드를 RESET 하시기 바랍니다.



마지막으로 스마트릴레이 부팅 후 ios mqtt앱과 HiveMQ Web Client를 이용해서 테스트 하는 영상 입니다.


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

LTE-CATM1 내장형 모뎀 구매 상담, 외주 개발, 협업 문의
(주)코드주
장병남 대표 010-8965-1323 rooney.jang@codezoo.co.kr
 
https://www.devicemart.co.kr/goods/view?no=14077527

 

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

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

www.devicemart.co.kr

https://www.devicemart.co.kr/goods/view?no=14077525

 

LTE-CatM1 쉴드보드

CodeZoo LTE-Cat M1 전용 쉴드 보드 입니다.

www.devicemart.co.kr

https://smartstore.naver.com/codezoo/products/7153689192

 

Vodafone Global IoT SIM Card : codezoo

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

smartstore.naver.com