-
CATM1, PPPOS, MQTT로 실외 MCU 디바이스 제어Lwip PPP 모뎀 2022. 4. 19. 02:43<주의>해당 내용은 experimental한 작업입니다. 코드주에서 장비 제어와 해킹에 따른 책임을 지지 않습니다.공개한 개발 리소스는 디바이스 동작에 대한 완결성을 확보했다고 보장할 수 없고 상용 서비스를 위해보안기능 추가하고 충분히 검토 후 사용 하셔야 합니다. - 코드주 -LTE CATM1 내장형모뎀을 사용하는 개발자들에게 최근 계속 요청 받았던 S/W는 외부에서 CATM1 모뎀에 접근해서 다양한 제어에 활용하고 싶다는 내용이었습니다. 관련해서 어떻게 구현하면 좋을지 저 또한 계속 고민하고 있었습니다.하지만 문제 해결을 위해 몇가지를 고려해야 합니다.1. 동시성 문제 해결: 동시성 처리가 가능한 RTOS 또는 GPOS를 사용해야 합니다. 쉽게 설명드리자면 시스템이 다른 동작을 하고 있을때도 언제든지 외부에서 호출할 수 있기 때문 입니다.2. 프로그램 구조변경 : OS 스케쥴러를 사용하기 때문에 기존의 단일분기 형태가 아닌 각각 독립된 태스크 구조를 가지고 있어야 합니다.3. 통신방식 변경 : 여러가지 이유로 AT커맨드에서는 즉각적인 응답성을 보장하기가 어렵기 때문에 모뎀의 또다른 동작 방식인 PPP(Point to Point Protocol)통신 방식으로 동작시켜야 합니다. 이 경우 데이터가 stream방식으로 동작되기 때문에 이를 처리할 Network Stack이 필요합니다.1,2,3의 이슈를 깔끔하게 해결해 줄 수 있는 방식은리눅스 기반 시스템 입니다. 관련된 내용은 이전에 포스팅한 바 있습니다. https://codezoo.tistory.com/26이번에는 MCU기반 환경에서 동작 시키려는 목표를 정했습니다.MCU기반이라 RTOS를 사용해야 하고, IP통신을 위한 소프트웨어 스택도 사용해야 하는 경우라 어떤 플랫폼을 선택해야 할지 고민이 되었는데, 딱 좋은게 있어서 적용 및 코드 수정을 통해서 구동에 성공했습니다.플랫폼 : ESP32 (ESP32-IDF)RTOS : FreeRTOSIP : LWIP(LightWeight IP)해당 기술 기반으로 GSM을 PPP로 동작시키기 위해 제작된 PPPOS 프로젝트를 이용해서 CodeZoo LTE CATM1에서 동작하도록 작업했습니다.아시는 분도 계시겠지만, ESP32는 이미 ESP-IDF를 통해 FreeRTOS로 잘 구현 되어 있고, 네트웍 스택을 동작시키기 위한 LWIP를 포함한 소프트웨어 스택들이 잘 준비되어 있습니다.해당 기능을 최대한 이용해서 동작시키고, 그 위에 아두이노로 살짝 랩핑만 해두면 RTOS 시스템을 잘 모르시는 분들도 손쉽게 외부에서 접근해서 LTE CATM1을 통해 디바이스 제어가 가능합니다. ^^이제 작업 내용을 하나하나 정리해 보도록 하겠습니다.사용한 개발 보드 : ESP32 Devkit version40. 실습을 위한 하드웨어 구성아래와 같이 배선했고 LED 전구는 25번에 설치 했습니다.1. 해당 보드를 아두이노에서 사용하기 위해서는 아래와 같이 보드매니저 정보를 업데이트 해야 합니다.스케치를 실행하고파일 -> 환경설정 -> 추가적인 보드 매니저 URLs
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json 입력 후 OK
2. 설정 후 아두이노 스케치를 재시작하시고,툴 -> 보드 -> 보드 매니저에서 ESP32를 입력합니다.
2.0.0 버전을 설치합니다.
툴 -> 보드 -> ESP32 Arduino -> ESP32 Dev Module을 선택
3. 이제 작업한 소스코드를 다운로드합니다. Download ZIP을 실행합니다.
https://github.com/codezoo-ltd/ppposclient
라이브러리를 설치합니다.
4. 예제를 실행합니다. 예제 -> PPPOSClient -> type1sc_simple_pppos_with_mqtt
APN을 사용하는 APN으로 변경 후 빌드합니다. 스케치 -> 확인/컴파일
아래와 같이 에러가 발생합니다. (기존에 PubSubClient가 설치되어 있으면 에러 발생하지 않습니다)
스케치 -> 라이브러리 포함하기 -> 라이브러리 관리
pubsubclient를 입력하고 최신 버전을 설치합니다
빌드가 정상적으로 완료되었습니다.
5. 펌웨어 업로드를 실행합니다.
SIM이 정상적으로 설치되어 있고 APN 입력이 틀리지 않으면 아래와 같이 부팅 후 PPP모드로 전환해서 IP획득 후
MQTT Broker에 접속된 상태를 확인할 수 있습니다. 업로드가 잘 되지 않으면 boot버튼을 누르고 있으면 업로드가
진행됩니다.
이제 테스트할 broker 환경을 설정하겠습니다. 테스트는 Hivemq broker를 사용했습니다.
6. Chrome Extension 설치
PC환경에서 MQTT broker에 원하는 토픽을 구독(subscribe)하고 발행(Publish)하기
위해 크롬 확장 프로그램 설치합니다.MQTTBox 프로그램을 설치합니다.
https://chrome.google.com/webstore/detail/mqttbox/kaajoficamnjijhkeomgfljpicifbkaf/support?hl=ko
7. MQTTBox 설정하기
앱 클릭 -> MQTTBox -> Create MQTT Client
Protocol: mqtt/tcp, Host: broker.hivemq.com:1883, QoS 0 입력 및 선택 -> SAVE
아래와 같이 두 개의 Topic을 사용해서 구현했습니다.
type1sc/100/test : 외부에서 디바이스 제어 용도
type1sc/100/status : 명령을 받은 디바이스가 현재 상태를 보고
8. 동작 영상
MQTTBox와 더불어서 아이폰에도 MQTT Client 프로그램을 설치해서 PC와 모바일에서 각각 디바이스를 제어했습니다.
디바이스의 상태는 MQTTBox에서 확인했습니다.
Murata Type1SC 모듈 구매, 자료 관련 문의
(주)아성코리아
전지만 이사 010-5418-8812 mlcc@asung.com
박상인 차장 010-6556-5405 sipark@asung.com
LTE-CATM1 내장형 모뎀 대량 구매 상담, 외주 개발, 협업 문의
(주)코드주
장병남 대표 010-8965-1323 rooney.jang@codezoo.co.krhttps://www.devicemart.co.kr/goods/view?no=14077527
https://smartstore.naver.com/codezoo/products/7153689192
'Lwip PPP 모뎀' 카테고리의 다른 글
함께 도전하고 만들어갑니다. ESP-IDF(esp_modem) (0) 2024.07.02 HiveMQ TLS Free MQTT 클러스터와 LTE CATM1모뎀으로 어디서나 제어할 수 있는 스마트릴레이 만들기 (11) 2024.05.25 ppposclient, RS485 장치를 동시에 사용하는 경우 (예제 포함) (2) 2024.05.16 ESP32, LTE CATM1 모뎀으로 nano iot gateway 제작 (0) 2024.03.17 ppposclient 에서 TYPE1SC 라이브러리를 사용하고 싶어요 (0) 2022.05.10