-
ppposclient 에서 TYPE1SC 라이브러리를 사용하고 싶어요Lwip PPP 모뎀 2022. 5. 10. 03:11
외부에 설치한 디바이스를 LTE CATM1을 이용해서 원격으로 제어하기 위해 PPP 통신 방식으로 ESP32와 LTE CATM1 내장형 모뎀을 ppposclient 라이브러리로 동작할 수 있도록 이전에 제작하여 공개하였습니다.
참고 글 https://codezoo.tistory.com/28
제공한 두 가지 MQTT와 TCP 예제는 서버와 연결을 지속하기 위해 서버와 연결이 끊어질 경우 자동으로 연결할 수 있도록 코드가 구현되어 있습니다. MQTT 예제의 경우 Callback 메소드를 통해 외부의 제어신호를 실시간으로 처리할 수 있는데 ESP32 GPIO 25번에 LED를 연결해서 외부에서 on, off 명령을 전송하며 해당 명령을 인식해서 동작하도록 구현되어 있습니다. 메시지 루프를 참고해서 향후 다양한 응용 예제들을 제작하실 수 있습니다.
void callback(char *topic, byte *payload, unsigned int length) {
// Allocate the correct amount of memory for the payload copy
byte *p = (byte *)malloc(length);
// Copy the payload to the new buffer
memcpy(p, payload, length);/* 메시지 루프 */
// DebugSerial.print("Message arrived [");
// DebugSerial.print(topic);
// DebugSerial.print("] ");
// for (int i = 0; i < length; i++) {
// DebugSerial.print((char)payload[i]);
// }
// DebugSerial.println();
if (strstr((char *)p, "on")) {
digitalWrite(25, HIGH);
client.publish(PUB_TOPIC, p, length);
} else if (strstr((char *)p, "off")) {
digitalWrite(25, LOW);
client.publish(PUB_TOPIC, p, length);
} else if (strstr((char *)p, "dis")) {
PPPOS_stop();
atMode = true;
if (TYPE1SC.setAT() == 0) {
DebugSerial.println("Command Mode");
} else {
atMode = false;
}
}
// client.publish(PUB_TOPIC, p, length);
free(p);
}ppposclient의 경우 Type1SC에서 제공하는 AT 커맨드 중 PPP모드로 동작시키기 위한 최소한의 명령어만 예제에 있는 간단한 String Parser로 처리하도록 구현되어 있는데, TYPE1SC에 있는 다양한 명령어들을 ppposclient에서 불러다가 사용할 수 있도록 처리해달라는 요청을 받아서 관련 작업을 진행하게 되었습니다.
두 라이브러리 기능을 묶는 작업은 여러 가지가 있는데, 복잡한 두 라이브러리가 서로 섞이지 않게 하는 방법이 가장 나을 거라고 판단하게 되었습니다.
그래서 TYPE1SC 라이브러리에 아래 두가지 기능만 추가 했습니다.
CodeZoo에서 제작한 TYPE1SC 라이브러리의 경우 Command and Response 구조이기 때문에 커맨드 호출이 필요한 pppos 셋업 단계에서 사용하기에 충돌 우려가 없어서 해당 라이브러리에 PPP통신 모드 설정과 AT통신 모드 설정 기능만 추가했습니다.
ppposclient 라이브러리 예제 중 하나인 type1sc_simple_pppos_with_mqtt.ino를 살펴보면,
아래와 같이 선언부를 추가하였고,
#include "TYPE1SC.h"
...
#define DebugSerial Serial
#define M1Serial Serial2 // ESP32TYPE1SC TYPE1SC(M1Serial, DebugSerial, PWR_PIN, RST_PIN, WAKEUP_PIN);
아래와 같은 방식으로 이전과 동일하게 TYPE1SC 라이브러리 기능을 사용할 수 있습니다.
// put your setup code here, to run once:
M1Serial.begin(SERIAL_BR);
DebugSerial.begin(SERIAL_BR);
DebugSerial.println("TYPE1SC Module Start!!!");
/* TYPE1SC Module Initialization */
if (TYPE1SC.init()) {
DebugSerial.println("TYPE1SC Module Error!!!");
}
/* Network Regsistraiton Check */
while (TYPE1SC.canConnect() != 0) {
DebugSerial.println("Network not Ready !!!");
delay(2000);
}
/* Get Time (GMT, (+36/4) ==> Korea +9hour) */
char szTime[32];
if (TYPE1SC.getCCLK(szTime, sizeof(szTime)) == 0) {
DebugSerial.print("Time : ");
DebugSerial.println(szTime);
}
delay(1000);...
위와 같은 방법으로 ppposclient 라이브러리를 메인으로 사용해도 단말기의 설정 정보, 통신감도 외 다양한 명령들을 기존 TYPE1SC 라이브러리를 호출해서 사용하실 수 있습니다.
전체 동작영상을 첨부합니다.
펌웨어 Upload시 --------..............--------- 하는 현상이 있는데 이때 boot 버튼을 누르고 있으면 펌웨어가
잘 업로드 됩니다.
마지막으로 ESP32에서 ppposclient 라이브러리를 동작시키기 위해서는 esp32 2.0.0 버전 이하를 사용해야 하는데,
이유는 Espressif Systems에서 Arduino ESP32 배포 시 LWIP에서 PPP기능을 disable 시키고 빌드한 lwip라이브러리를 배포 버전에 포함시켜 두었기 때문입니다. 해당 이슈 관련해서 lwip 라이브러리에서 ppp기능을 살리고 빌드해서 포함시키는 방법을 고민하고 있습니다. 물론 ESP32-IDF를 사용할 경우 해당 문제가 깔끔하게 클리어 됩니다. 현재 최신 버전인 2.0.3 버전 기준으로 확인 후 다시 리포트 하겠습니다.
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 CATM1, PPPOS, MQTT로 실외 MCU 디바이스 제어 (2) 2022.04.19