Telegram

LTE CATM1 모뎀을 Telegram Bot으로 만들기

장병남 2023. 12. 6. 20:04

IoT통신을 위해서는 IoT Device와 IoT Device와 통신할 수 있는 IoT서버가 모두 준비되어 있어야 합니다.

출처 : TTA https://terms.tta.or.kr/mobile/dictionaryView.do?subject=%EC%82%AC%EB%AC%BC+%EC%9D%B8%ED%84%B0%EB%84%B7

 
어디서나 통신이 가능한 LTE CATM1 모뎀을 이용해서 사용자의 실시간 위치를 확인하려고 목적의 서비스를 구현하려고 가정하면 IoT Device는 LTE CATM1 모뎀과 데이터를 처리할 MCU(CPU) 그리고 위치를 파악하기 위한 GPS모듈이 준비되어 있어야 합니다. GPS모듈에서 얻은 실시간 위치(위도, 경도)를 정해진 시간주기로 서버로 전달합니다.
 
서버에서는 IoT Device에서 전달받은 현재 위치를 저장하고 지도에 표시하기 위해 구글, 네이버, 카카오를 포함한 다양한 웹서비스 업체에서 제공하는 지도 API를 선택해서 저장한 위치를 지도에 표시해서 사용자가 웹이나 앱을 통해 확인할 수 있도록 서비스를 구성해야 합니다. 
 
위치를 실시간으로 파악하는 IoT Device를 만들기도 쉽지 않은데 지도에 표시하는 서비스까지 구성하려고 하면 해야 할 작업이 만만치가 않습니다. 만약 이 모든 것을 혼자해야 한다면 서비스를 만들어보기도 전에 포기하는 일도 생길 수 있습니다. 하지만 아래와 같이 메시지로 위치를 표시한다면 어떨까요?

 
해당 메시지를 클릭하면 바로 구글맵을 통해 위치를 확인할 수 있습니다.

메시지 --> 구글맵 연동

 
잘 정리된 웹서비스 정도는 아니지만 메시지를 통해 사용자의 위치를 확인할 수 있습니다.
 
SMS서비스의 경우 IoT 유심에서는 제공하지 않거나 제공하더라도 건당 별도요금을 지불해야 하므로 사용하는 데 비용 부담이 있습니다. 하지만 텔레그램 메신저의 경우 Web API를 공개해서 텔레그램 메신저를 사용하는 누구든지 Web API를 이용해서 메신저와 소통할 수 있도록 기능을 제공하고 있습니다.

Telegram 메신저

 
해당 기능을 WIFI통신을 사용하는 IoT 디바이스에서 손쉽게 사용할 수 있도록 구현된 오픈소스 프로젝트 중 하나인 Universal-Arduino-Telegram-Bot 은 전 세계 많은 사용자들을 통해 기능 구현과 검증이 완료된 프로젝트입니다. 

Universal-Arduino-Telegram-Bot (https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot)

 
CodeZoo에서 서버를 따로 구축하지 않고 스마트폰으로 LTE CATM1 모뎀과 연결된 IoT 디바이스의 데이터를 수집하고 직접 제어하기 위해 Universal Arduino Telegram Bot 프로젝트 포팅 작업을 진행했고 1.0.0 버전을 릴리즈 했습니다. 
https://github.com/codezoo-ltd/Universal-Arduino-Telegram-Bot-Type1SC

 

GitHub - codezoo-ltd/Universal-Arduino-Telegram-Bot-Type1SC: Use Telegram on ESP-IoT Board

Use Telegram on ESP-IoT Board. Contribute to codezoo-ltd/Universal-Arduino-Telegram-Bot-Type1SC development by creating an account on GitHub.

github.com

 
위 프로젝트를 LTE CATM1 모뎀 + ESP32 IoT 보드에서 사용하는 방법 및 예제를 동작시키는 방법을 설명드리겠습니다. 
 
1. 텔레그램 메신저의 Bot을 사용하기 위해 먼저 Bot Token과 Chat Id를 얻어야 합니다.
처음 해보시는 분들은 복잡하실 수 있으므로 잘 정리된 글을 소개합니다. 
 

 

[Telegram] Bot Token 및 Chat Id 얻기

텔레그램을 이용하여 홈 서버나 NAS에서 메시지를 받을 수 있는데 이 때 필요한 것이 Bot Token 및 Chat Id 이다. Telegram API 를 이용하여 Bot Token(발신인) 이 Chat Id(수신인) 으로 메시지를 보내는 것이다.

gabrielkim.tistory.com

참고로, BotFather는 텔레그램 앱에서도 검색이 가능합니다. 

 
Bot Token과 Chat Id는 example에 직접 입력해야 하므로 잘 기록해 둡니다.
 
2. Universal-Arduino-Telegram-Bot-Type1SC의 example를 빌드하기 위해서 아래 3가지 라이브러리가 Arduino IDE에 설치되어 있어야 합니다. 
 
ArduinoJson 6.21.3 (Tested) : Arduino Managed Library
TYPE1SC 1.0.2 (Tested) : https://github.com/codezoo-ltd/TYPE1SC
ppposclientSecure 1.0.0 (Tested) : https://github.com/codezoo-ltd/ppposclientSecure
 
ArduinoJson은 아래와 같은 방법으로 검색 후 설치해야 합니다. 
Sketch → Include Library → Manage Libraries.. → 

ArduinoJson 검색 → INSTALL

 
TYPE1SC 1.0.2 (Tested) : https://github.com/codezoo-ltd/TYPE1SC
ppposclientSecure 1.0.0 (Tested) : https://github.com/codezoo-ltd/ppposclientSecure
 
Universal-Arduino-Telegram-Bot-Type1SC 1.0.0 : https://github.com/codezoo-ltd/Universal-Arduino-Telegram-Bot-Type1SC
 
TYPE1SC, ppposclientSecure,  Universal-Arduino-Telegram-Bot-Type1SC 라이브러리는 각각 해당 주소로 이동해서 아래와 같은 방법으로 설치합니다. 
Code 클릭 → Download ZIP → Library이름.ZIP (다운로드 디렉터리에 저장됨)

Sketch → Include Library → Add .ZIP Library.. → 다운로드된 디렉터리 Library이름.ZIP → OPEN(열기)

 
Arduino ESP32 패키지는 PPPOS를 사용해야 하므로 2.0.0 버전을 설치합니다.
자세한 내용은 아래 매뉴얼 22~24페이지 내용을 참고하시기 바랍니다. 

LTE-CATM1_ESP32_IoT보드_핸즈온.pdf
10.71MB

 
이제 Telegram Bot을 사용하기 위한 모든 준비가 끝났습니다. 
기본 예제인 EchoBot로 테스트해보겠습니다.

 
BOT_TOKEN에 1.과정에서 얻은 TOKEN값을 넣고 Upload 합니다. 

 
시리얼 모니터로 Retrieving time의 숫자까지 출력되면 ESP32 IoT 보드가 준비된 상태입니다.

 
EchoBot은 사용자가 텔레그램으로 보낸 메시지를 텔레그램봇이 받은 메시지 그대로 다시 사용자에게 보내는 예제입니다.

영문 메시지뿐 아니라 한글, 이모티콘 메시지도 그대로 전달되는 것을 확인할 수 있습니다.
 
다음은 사용자가 메시지를 보내지 않아도 Telegram Bot에서 사용자에게 메시지를 보내는 SendMessageFromEvent 예제를 동작시켜 보겠습니다.

 
해당 예제를 동작시키기 위해서는 BOT_TOKEN과 CHAT_ID 값을 함께 넣어줘야 합니다.  Upload 합니다.

 
사용자의 호출 없이 Bot이 부팅 후 사용자에게 Bot started up 메시지를 보내는 것을 확인할 수 있습니다.

 
SendMessageFromEvent 예제를 이용해서 사용자의 명령 없이 Bot에서 특정이벤트를 체크해서 사용자에게 메시지로 바로 상태값 전달이 가능합니다. 
 
이제 사용자 텔레그램 메신저로 텔레그램봇의 LED를 직접 제어하는 FlashLED 예제를 동작시켜 보겠습니다.
예제를 동작시키기 앞서 아래와 같은 RGB LED를 연결하여 사용했습니다.

구매링크 : https://mechasolution.com/shop/goods/goods_view.php?goodsno=577103&category=
 
ESP32 IoT 보드에 연결한 사진 (R: 23, G: 0, B: 2, GND: GND에 각각 연결)

 
FlashLED 예제를 선택 후 BOT_TOKEN 값을 입력 후 Upload 합니다.

 
/help를 입력하면 사용방법을 확인할 수 있습니다.

 
설명은 FlashLED 예제에서 수정할 수 있습니다. 
LED 명령 후 Bot에서 명령에 대한 응답메시지를 사용자에게 전달합니다. 

 
마지막으로 사용자의 위치를 Telegram Bot이 받아서 다시 전송하는 Location 예제를 동작시켜 보겠습니다.
Location 예제를 불러온 후 BOT_TOKEN 값을 넣고 Upload 합니다.

 
 
사용자 텔레그램에서 첨부파일 버튼을 누릅니다.

아래 위치 버튼을 누릅니다.

 
선택한 위치 보내기를 누릅니다.

 
사용자의 현재 위치가 Telegram Bot에게 전달되고 Telegram Bot에서 google map 검색링크로 작성되어 사용자에게 회신됩니다.

 
Location 예제의 핵심이 되는 코드는 아래와 같습니다.
위도와 경도의 좌표를 메시지 String으로 만들어서 텔레그램으로 전송하면 스마트폰에 탑재된 구글맵을 이용해서 확인할 수 있습니다. 

 
LTE CATM1 모뎀으로 동작시키는 Telegram Bot의 몇 가지 예제들을 살펴봤습니다. 다음에는 해당 예제들을 이용해서 ESP32 IoT 보드에 GPS모듈을 연결해서 사용자의 실시간 위치 트래킹과 예전에 진행했던 Azure IoT 클라우드와 연동해서 동작시켰던 자동차 도어록 및 배터리 상태 실시간 체크를 텔레그램 Bot과 연동시켜서 동작시켜 보겠습니다. 
 
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/8514695472

 

LTE CATM1 ESP32 IoT 보드 : codezoo

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

smartstore.naver.com

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

 

Vodafone Global IoT SIM Card : codezoo

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

smartstore.naver.com