ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 : FreeRTOS
    IP : LWIP(LightWeight IP)
     
    LwIP 프로토콜 구조 (출처: https://naudhizb.tistory.com/943)
    해당 기술 기반으로 GSM을 PPP로 동작시키기 위해 제작된 PPPOS 프로젝트를 이용해서 CodeZoo LTE CATM1에서 동작하도록 작업했습니다.
    아시는 분도 계시겠지만, ESP32는 이미 ESP-IDF를 통해 FreeRTOS로 잘 구현 되어 있고, 네트웍 스택을 동작시키기 위한 LWIP를 포함한 소프트웨어 스택들이 잘 준비되어 있습니다.
    해당 기능을 최대한 이용해서 동작시키고, 그 위에 아두이노로 살짝 랩핑만 해두면 RTOS 시스템을 잘 모르시는 분들도 손쉽게 외부에서 접근해서 LTE CATM1을 통해 디바이스 제어가 가능합니다. ^^
     
    이제 작업 내용을 하나하나 정리해 보도록 하겠습니다. 
    사용한 개발 보드 : ESP32 Devkit version4
     
    0. 실습을 위한 하드웨어 구성
    아래와 같이 배선했고 LED 전구는 25번에 설치 했습니다.
    하드웨어 배선
    LTE CATM1 하드웨어 PINOUT
     
     
    1. 해당 보드를 아두이노에서 사용하기 위해서는 아래와 같이 보드매니저 정보를 업데이트 해야 합니다.
    스케치를 실행하고
    파일 -> 환경설정 -> 추가적인 보드 매니저 URLs 
     

    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json 입력 후 OK

    추가적인 보드 매니저 URLs

    2. 설정 후 아두이노 스케치를 재시작하시고,툴 -> 보드 -> 보드 매니저에서 ESP32를 입력합니다.

    2.0.0 버전을 설치합니다.  

    esp32 2.0.0 installed

    툴 -> 보드 -> ESP32 Arduino -> ESP32 Dev Module을 선택

    ESP32 Dev Module 선택

     

    3. 이제 작업한 소스코드를 다운로드합니다.  Download ZIP을 실행합니다.

    https://github.com/codezoo-ltd/ppposclient

    CodeZoo LTE CATM1 내장형모뎀에서 동작할 수 있도록 수정한 라이브러리 및 예제 다운로드

    라이브러리를 설치합니다.

    ZIP라이브러리 추가
    ppposclient-main.zip 설치(열기)
    라이브러리가 추가되었습니다

     

    4. 예제를 실행합니다.  예제 -> PPPOSClient -> type1sc_simple_pppos_with_mqtt

    type1sc_simple_pppos_with_mqtt 예제 선택

    APN을 사용하는 APN으로 변경 후 빌드합니다. 스케치 -> 확인/컴파일

    아래와 같이 에러가 발생합니다. (기존에 PubSubClient가 설치되어 있으면 에러 발생하지 않습니다)

    빌드에러

    스케치 -> 라이브러리 포함하기 -> 라이브러리 관리

    라이브러리 추가

     pubsubclient를 입력하고 최신 버전을 설치합니다

    PubSubClient 라이브러리 최신버전 설치

    빌드가 정상적으로 완료되었습니다. 

    5. 펌웨어 업로드를 실행합니다.

    SIM이 정상적으로 설치되어 있고 APN 입력이 틀리지 않으면 아래와 같이 부팅 후 PPP모드로 전환해서 IP획득 후 

    MQTT Broker에 접속된 상태를 확인할 수 있습니다. 업로드가 잘 되지 않으면 boot버튼을 누르고 있으면 업로드가

    진행됩니다. 

    부팅, ppp접속을 통해 IP획득 후 서버 연결

    이제 테스트할 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.kr

     

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

     

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

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

    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

     

     

Designed by Tistory.