본문 바로가기

ESP32

ESP32 SIM800L 문자 메시지(SMS 알림) 보내기

반응형

 

 

ESP32 SIM800L: 센서 판독값과 함께 문자 메시지(SMS 알림) 보내기;

 

이 프로젝트에서는 T-Call ESP32 SIM800L 모듈을 사용하여 센서 판독값이 특정 임계값을 넘거나 넘을 때 SMS를 보내는 SMS 알림 시스템을 만들 것입니다. 

 

ESP32 SIM800L 센서 판독값과 함께 문자 메시지(SMS 알림) 보내기

 

이 예에서는 DS18B20 온도 센서를 사용하고 온도가 28ºC를 넘을 때 문자 메시지를 보냅니다. 온도가 임계값 아래로 떨어지면 다른 SMS 알림을 보냅니다. ;

 

T-Call ESP32 SIM800L 모듈로 SMS를 보내려면 SIM800L 모듈에 대한 모뎀 객체를 초기화한 후(TinyGSM 라이브러리 사용) modem.sendSMS(SMS_TARGET, smsMessage)를 사용하면 됩니다. ;

 

중요: SIM800L은 2G 네트워크에서 작동하므로 2G 네트워크를 사용할 수 있는 경우에만 해당 국가에서 작동합니다. 해당 국가에서 2G 네트워크가 있는지 확인하세요. 그렇지 않으면 작동하지 않습니다.(한국 서비스 종료 2021. 6)

 

비디오 튜토리얼 보기;

전체 프로젝트 지침을 보려면 비디오 튜토리얼을 보거나 계속 읽어보세요.;

 

프로젝트 개요;

 

이 튜토리얼은 두 섹션으로 나뉩니다.;

 

  1. TTGO T-Call ESP32 SIM800L로 SMS 보내기: 간단한 "Hello World" 메시지를 보내는 방법을 알아봅니다.;
  2. 센서 판독값을 사용한 SMS 알림 시스템: 온도 판독값이 임계값을 넘을 때마다 메시지를 보냅니다. ;

 

T-Call ESP32 SIM800L 보드를 사용한 센서 판독값을 제공하는 SMS 알림 시스템

 

  • ESP32는 5초마다 새로운 온도 판독값을 받습니다.
  • 온도가 임계값을 초과하는지 확인합니다.
  • 임계값을 초과하면 현재 온도 값이 포함된 알림 SMS를 보냅니다.
  • 온도가 임계값 아래로 떨어지면 다른 알림을 보냅니다.
  • ESP32는 온도 판독값이 임계값을 넘을 때마다 SMS를 한 번만 보냅니다.

 

이 프로젝트를 특정 사례에 맞게 수정할 수 있습니다. 예를 들어 ESP32를 딥 슬립 모드로 전환하고 현재 온도 판독값 등이 포함된 SMS를 매시간 보내고 싶을 수 있습니다. 

 

다음도 마음에 드실 수 있습니다. ESP32에서 Wi-Fi 없이 클라우드에 데이터 게시(TTGO T-Call ESP32 SIM800L) 

 

TTGO T-Call ESP32 SIM800L

 

TTGO T-Call은 SIM800L GSM/GPRS 모듈을 결합한 새로운 ESP32 개발 보드입니다. 약 11달러에 구입할 수 있습니다.

 

TTGO T-Call ESP32 SIM800L 보드

 

Wi-Fi와 Bluetooth 외에도 SMS, 전화 통화를 사용하여 이 ESP32 보드와 통신하거나 인터넷에 연결할 수 있습니다. 이 튜토리얼에서는 SMS 알림을 보내는 방법을 알아봅니다. 

 

이 보드에 대한 전체 개요는 다음 기사를 읽어보세요. $11 TTGO T-Call ESP32 with SIM800L GSM/GPRS(개요) 

 

필수 조건;

 

1. ESP32 애드온 Arduino IDE

 

Arduino IDE를 사용하여 ESP32를 프로그래밍합니다. 따라서 Arduino IDE에 ESP32 애드온을 설치해야 합니다. 아직 설치하지 않았다면 다음 튜토리얼을 따르세요. 

 

Arduino IDE에 ESP32 보드 설치(Windows, Mac OS X, Linux)

 

2. 선불 SIM 카드(SMS 요금제)

 

TTGO T-Call ESP32 SIM800L 보드를 사용하려면 나노 SIM 카드가 필요합니다. 선불 또는 월간 요금제와 함께 SIM 카드를 사용하는 것이 좋습니다. 그러면 지출 금액을 정확히 알 수 있습니다. 

 

TTGO T-Call ESP32 SIM800L 나노 SIM 카드 삽입

 

3. 라이브러리

 

이 프로젝트의 경우 SIM800L 모듈과 인터페이스하기 위해 TinyGSM 라이브러리와 Paul Stoffregen의 One Wire 라이브러리, DS18B20 온도 센서에서 판독값을 얻기 위해 Dallas Temperature 라이브러리도 설치해야 합니다.

 

TinyGSM 라이브러리 설치

 

Arduino IDE를 열고 Sketch > Include Library > Manage Libraries로 이동합니다. 라이브러리 관리자가 열립니다. TinyGSM을 검색합니다. Volodymyr Shymanskyy의 TinyGSM 라이브러리를 선택합니다.

 

TinyGSM 라이브러리 Arduino IDE 설치

 

DS18B20 라이브러리 설치

 

Arduino IDE 라이브러리 관리자에서 검색 상자에 "onewire"를 입력하고 Paul Stoffregen의 OneWire 라이브러리를 설치합니다.

 

Arduino IDE에 Paul Stoffregen의 OneWire 라이브러리 설치

 

그런 다음 "Dallas"를 검색하여 Miles Burton의 DallasTemperature 라이브러리를 설치합니다.

 

Arduino IDE에 Miles Burton의 DallasTemperature 라이브러리 설치

 

라이브러리를 설치한 후 Arduino IDE를 다시 시작합니다.

 

필요한 부품

 

T-Call ESP32 SIM800L DS18B20 온도 센서 회로

 

이 튜토리얼을 따르려면 다음 부품이 필요합니다.

 

  • TTGO T-Call ESP32 SIM800L
  • SMS 플랜이 있는 Nano SIM 카드
  • USB-C 케이블
  • 안테나(선택 사항)
  • DS18B20 온도 센서(ESP32가 있는 DS18B20 센서 가이드)
  • 4.7kΩ 저항기
  • 브레드보드
  • 점퍼 와이어

 

이전 링크를 사용하거나 MakerAdvisor.com/tools로 바로 이동하여 프로젝트에 필요한 모든 부품을 최상의 가격으로 찾을 수 있습니다!

 

참고: 보드 패키지와 함께 제공된 안테나에 신호 강도 문제가 있었기 때문에 다른 안테나(아래에 표시됨)를 사용했고 모든 연결 문제가 해결되었습니다.

 

TTGO T-Call ESP32 SIM800L 보드용 대체 안테나

 

T-Call ESP32 SIM800L로 SMS 보내기

 

이 섹션에서는 T-Call ESP32 SIM800L 보드로 SMS를 보내는 방법을 보여드리겠습니다. 스마트폰으로 "Hello from ESP32!" 메시지를 보내는 간단한 예제를 만들어 보겠습니다.;

 

다음 코드를 Arduino IDE에 복사합니다. 하지만 아직 업로드하지 마세요. 코드에 수신자의 전화번호를 삽입해야 합니다.;

 

/*
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp32-sim800l-send-text-messages-sms/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

// SIM card PIN (leave empty, if not defined)
const char simPIN[]   = "";

// Your phone number to send SMS: + (plus sign) and country code, for Portugal +351, followed by phone number
// SMS_TARGET Example for Portugal +351XXXXXXXXX
#define SMS_TARGET  "+351XXXXXXXXX"

// Configure TinyGSM library
#define TINY_GSM_MODEM_SIM800      // Modem is SIM800
#define TINY_GSM_RX_BUFFER   1024  // Set RX buffer to 1Kb

#include <Wire.h>
#include <TinyGsmClient.h>

// TTGO T-Call pins
#define MODEM_RST            5
#define MODEM_PWKEY          4
#define MODEM_POWER_ON       23
#define MODEM_TX             27
#define MODEM_RX             26
#define I2C_SDA              21
#define I2C_SCL              22

// Set serial for debug console (to Serial Monitor, default speed 115200)
#define SerialMon Serial
// Set serial for AT commands (to SIM800 module)
#define SerialAT  Serial1

// Define the serial console for debug prints, if needed
//#define DUMP_AT_COMMANDS

#ifdef DUMP_AT_COMMANDS
  #include <StreamDebugger.h>
  StreamDebugger debugger(SerialAT, SerialMon);
  TinyGsm modem(debugger);
#else
  TinyGsm modem(SerialAT);
#endif

#define IP5306_ADDR          0x75
#define IP5306_REG_SYS_CTL0  0x00

bool setPowerBoostKeepOn(int en){
  Wire.beginTransmission(IP5306_ADDR);
  Wire.write(IP5306_REG_SYS_CTL0);
  if (en) {
    Wire.write(0x37); // Set bit1: 1 enable 0 disable boost keep on
  } else {
    Wire.write(0x35); // 0x37 is default reg value
  }
  return Wire.endTransmission() == 0;
}

void setup() {
  // Set console baud rate
  SerialMon.begin(115200);

  // Keep power when running from battery
  Wire.begin(I2C_SDA, I2C_SCL);
  bool isOk = setPowerBoostKeepOn(1);
  SerialMon.println(String("IP5306 KeepOn ") + (isOk ? "OK" : "FAIL"));

  // Set modem reset, enable, power pins
  pinMode(MODEM_PWKEY, OUTPUT);
  pinMode(MODEM_RST, OUTPUT);
  pinMode(MODEM_POWER_ON, OUTPUT);
  digitalWrite(MODEM_PWKEY, LOW);
  digitalWrite(MODEM_RST, HIGH);
  digitalWrite(MODEM_POWER_ON, HIGH);

  // Set GSM module baud rate and UART pins
  SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX);
  delay(3000);

  // Restart SIM800 module, it takes quite some time
  // To skip it, call init() instead of restart()
  SerialMon.println("Initializing modem...");
  modem.restart();
  // use modem.init() if you don't need the complete restart

  // Unlock your SIM card with a PIN if needed
  if (strlen(simPIN) && modem.getSimStatus() != 3 ) {
    modem.simUnlock(simPIN);
  }

  // To send an SMS, call modem.sendSMS(SMS_TARGET, smsMessage)
  String smsMessage = "Hello from ESP32!";
  if(modem.sendSMS(SMS_TARGET, smsMessage)){
    SerialMon.println(smsMessage);
  }
  else{
    SerialMon.println("SMS failed to send");
  }
}

void loop() {
  delay(1);
}

 

코드 작동 방식;

 

다음 변수에 SIM 카드 PIN을 삽입합니다. 정의되지 않은 경우 이 변수를 비워둘 수 있습니다.

 

// SIM 카드 PIN(정의되지 않은 경우 비워두기)

const char simPIN[] = "";

 

그런 다음 SMS를 보낼 전화번호를 추가합니다. 번호는 국제 형식이어야 하며 그렇지 않으면 작동하지 않습니다. (더하기 기호)와 국가 코드(포르투갈의 경우 +351), 그 뒤에 전화번호가 옵니다.

 

포르투갈의 예 +351XXXXXXXXX

 

#define SMS_TARGET "+351XXXXXXXXXXXX"

 

SIM800L 모뎀과 작동하도록 TinyGSM 라이브러리를 구성합니다.

 

#define TINY_GSM_MODEM_SIM800 // 모뎀은 SIM800입니다.

#define TINY_GSM_RX_BUFFER 1024 // RX 버퍼를 1Kb로 설정합니다.

 

다음 라이브러리를 포함합니다. 

 

#include <Wire.h>
#include <TinyGsmClient.h>

 

다음 줄은 SIM800L 모듈에서 사용하는 핀을 정의합니다.

 

#define MODEM_RST            5
#define MODEM_PWKEY          4
#define MODEM_POWER_ON       23
#define MODEM_TX             27
#define MODEM_RX             26
#define I2C_SDA              21
#define I2C_SCL              22

 

직렬 모니터와 상호 작용하도록 직렬 통신을 초기화하고 SIM800L 모듈과 상호 작용하도록 다른 직렬 통신을 초기화합니다.

 

// Set serial for debug console (to Serial Monitor, default speed 115200)
#define SerialMon Serial
// Set serial for AT commands (to SIM800 module)
#define SerialAT Serial1

 

// 디버그 콘솔에 대한 직렬 설정(직렬 모니터, 기본 속도 115200)

#define SerialMon Serial

// AT 명령에 대한 직렬 설정(SIM800 모듈)

#define SerialAT Serial1

 

setup()에서 직렬 모니터를 초기화합니다.

 

SerialMon.begin(115200);

 

SIM800L 핀을 작동할 적절한 상태로 설정합니다.

 

pinMode(MODEM_PWKEY, OUTPUT);
pinMode(MODEM_RST, OUTPUT);
pinMode(MODEM_POWER_ON, OUTPUT);
digitalWrite(MODEM_PWKEY, LOW);
digitalWrite(MODEM_RST, HIGH);
digitalWrite(MODEM_POWER_ON, HIGH);

 

SIM800L 모듈과의 직렬 통신을 초기화합니다.

 

SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX);

 

SIM800L 모듈을 초기화하고 필요한 경우 SIM 카드 PIN을 잠금 해제합니다. 

 

SerialMon.println("Initializing modem...");
modem.restart();
// use modem.init() if you don't need the complete restart

// Unlock your SIM card with a PIN if needed
if (strlen(simPIN) && modem.getSimStatus() != 3 ) {
  modem.simUnlock(simPIN);
}

 

SMS를 보내려면 모뎀 객체에서 sendSMS() 메서드를 사용하고 수신자의 전화번호와 메시지를 인수로 전달하기만 하면 됩니다. 

 

modem.sendSMS(SMS_TARGET, smsMessage); 

 

이 경우 메시지는 "Hello from ESP32!"이지만 센서 데이터와 같은 다른 정보로 대체할 수 있습니다. 

 

String smsMessage = "Hello from ESP32!";
if(modem.sendSMS(SMS_TARGET, smsMessage)){
  SerialMon.println(smsMessage);
}
else{
  SerialMon.println("SMS failed to send");
}

 

데모

 

모듈에 나노 SIM 카드를 삽입한 상태에서 T-Call ESP32 SIM800L 보드에 코드를 업로드합니다.;

 

도구 > 보드로 이동하여 ESP32 Dev Module을 선택합니다.도구 > 포트로 이동하여 보드가 연결된 COM 포트를 선택합니다.마지막으로 업로드 버튼을 눌러 코드를 보드에 업로드합니다.;

 

Arduino IDE에 코드 업로드;

 

참고: 현재 T-Call ESP32 SIM800L용 보드는 없지만 ESP32 Dev Module을 선택했고 정상적으로 작동하고 있습니다.;

 

코드를 업로드한 후 115200의 전송 속도로 직렬 모니터를 열어서 무슨 일이 일어나고 있는지 확인합니다.

 

T-Call ESP32 SIM800L 보드 직렬 모니터 Arduino IDE 초기화

 

몇 초 후에 수신자의 전화번호로 SMS를 받게 됩니다.

 

T-Call ESP32 SIM800L 보드로 SMS 보내기

 

문제 해결

 

  • 지금까지 SMS를 받지 못했다면 다음 이유 중 하나일 수 있습니다.
  • 이 모듈은 해당 국가에서 2G가 지원되는 경우에만 작동합니다.
  • 전화번호에 오타가 있거나 더하기(+) 기호와 국가 코드가 올바르게 형식화되지 않았을 수 있습니다.
  • 안테나가 제대로 작동하지 않을 수 있습니다. 저희의 경우 이 안테나로 교체했습니다.
  • 더 나은 신호 범위를 얻으려면 밖으로 나가야 할 수도 있습니다.또는 모듈에 충분한 전류를 공급하지 못할 수 있습니다. USB 허브를 사용하여 모듈을 컴퓨터에 연결하는 경우 작동하기에 충분한 전류를 공급하지 못할 수 있습니다.

 

ESP32 SMS 알림 시스템;

 

이 섹션에서는 센서 판독값이 미리 정해진 임계 온도 값을 넘을 때 문자 메시지를 보내는 SMS 알림 시스템을 만드는 방법을 보여드리겠습니다.

 

회로도

 

계속하기 전에 다음 회로도에 표시된 대로 DS18B20 온도 센서를 T-Call ESP32 SIM800L 보드에 연결합니다. DS18B20 데이터 핀을 GPIO 13에 연결합니다. 

 

T-Call ESP32 SIM800L 배선을 DS18B20 회로도에 연결합니다.

 

코드

 

다음 코드를 Arduino IDE에 복사합니다. 수신자의 전화번호를 입력하고 임계값을 설정합니다. 그런 다음 코드를 T-Call ESP32 SIM800L 보드에 업로드할 수 있습니다. 

 

/*
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp32-sim800l-send-text-messages-sms/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

// SIM card PIN (leave empty, if not defined)
const char simPIN[]   = "";

// Your phone number to send SMS: + (plus sign) and country code, for Portugal +351, followed by phone number
// SMS_TARGET Example for Portugal +351XXXXXXXXX
#define SMS_TARGET  "+351XXXXXXXXX"

// Define your temperature Threshold (in this case it's 28.0 degrees Celsius)
float temperatureThreshold = 28.0;
// Flag variable to keep track if alert SMS was sent or not
bool smsSent = false;

// Configure TinyGSM library
#define TINY_GSM_MODEM_SIM800      // Modem is SIM800
#define TINY_GSM_RX_BUFFER   1024  // Set RX buffer to 1Kb

#include <Wire.h>
#include <TinyGsmClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// GPIO where the DS18B20 is connected to
const int oneWireBus = 13;     

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(oneWireBus);

// Pass our oneWire reference to Dallas Temperature sensor 
DallasTemperature sensors(&oneWire);

// TTGO T-Call pins
#define MODEM_RST            5
#define MODEM_PWKEY          4
#define MODEM_POWER_ON       23
#define MODEM_TX             27
#define MODEM_RX             26
#define I2C_SDA              21
#define I2C_SCL              22

// Set serial for debug console (to Serial Monitor, default speed 115200)
#define SerialMon Serial
// Set serial for AT commands (to SIM800 module)
#define SerialAT  Serial1

// Define the serial console for debug prints, if needed
//#define DUMP_AT_COMMANDS

#ifdef DUMP_AT_COMMANDS
  #include <StreamDebugger.h>
  StreamDebugger debugger(SerialAT, SerialMon);
  TinyGsm modem(debugger);
#else
  TinyGsm modem(SerialAT);
#endif

#define IP5306_ADDR          0x75
#define IP5306_REG_SYS_CTL0  0x00

bool setPowerBoostKeepOn(int en){
  Wire.beginTransmission(IP5306_ADDR);
  Wire.write(IP5306_REG_SYS_CTL0);
  if (en) {
    Wire.write(0x37); // Set bit1: 1 enable 0 disable boost keep on
  } else {
    Wire.write(0x35); // 0x37 is default reg value
  }
  return Wire.endTransmission() == 0;
}

void setup() {
  // Set console baud rate
  SerialMon.begin(115200);

  // Keep power when running from battery
  Wire.begin(I2C_SDA, I2C_SCL);
  bool isOk = setPowerBoostKeepOn(1);
  SerialMon.println(String("IP5306 KeepOn ") + (isOk ? "OK" : "FAIL"));

  // Set modem reset, enable, power pins
  pinMode(MODEM_PWKEY, OUTPUT);
  pinMode(MODEM_RST, OUTPUT);
  pinMode(MODEM_POWER_ON, OUTPUT);
  digitalWrite(MODEM_PWKEY, LOW);
  digitalWrite(MODEM_RST, HIGH);
  digitalWrite(MODEM_POWER_ON, HIGH);

  // Set GSM module baud rate and UART pins
  SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX);
  delay(3000);

  // Restart SIM800 module, it takes quite some time
  // To skip it, call init() instead of restart()
  SerialMon.println("Initializing modem...");
  modem.restart();
  // use modem.init() if you don't need the complete restart

  // Unlock your SIM card with a PIN if needed
  if (strlen(simPIN) && modem.getSimStatus() != 3 ) {
    modem.simUnlock(simPIN);
  }
  
  // Start the DS18B20 sensor
  sensors.begin();
}

void loop() {
  sensors.requestTemperatures();
  // Temperature in Celsius degrees 
  float temperature = sensors.getTempCByIndex(0);
  SerialMon.print(temperature);
  SerialMon.println("*C");
  
  // Temperature in Fahrenheit degrees
  /*float temperature = sensors.getTempFByIndex(0);
  SerialMon.print(temperature);
  SerialMon.println("*F");*/

  // Check if temperature is above threshold and if it needs to send the SMS alert
  if((temperature > temperatureThreshold) && !smsSent){
    String smsMessage = String("Temperature above threshold: ") + 
           String(temperature) + String("C");
    if(modem.sendSMS(SMS_TARGET, smsMessage)){
      SerialMon.println(smsMessage);
      smsSent = true;
    }
    else{
      SerialMon.println("SMS failed to send");
    }    
  }
  // Check if temperature is below threshold and if it needs to send the SMS alert
  else if((temperature < temperatureThreshold) && smsSent){
    String smsMessage = String("Temperature below threshold: ") + 
           String(temperature) + String("C");
    if(modem.sendSMS(SMS_TARGET, smsMessage)){
      SerialMon.println(smsMessage);
      smsSent = false;
    }
    else{
      SerialMon.println("SMS failed to send");
    }
  }
  delay(5000);
}

 

코드 작동 방식

 

이전 예에서 SIM800L을 초기화하는 방법과 필요한 모든 구성을 설명했습니다. 따라서 이 프로젝트의 관련 부분으로 건너뜁니다. 

 

먼저 SIM 카드 PIN을 입력합니다. 정의되지 않은 경우 이 변수를 비워 둘 수 있습니다. 

 

const char simPIN[] = "";

 

그런 다음 SMS를 보내려는 전화번호를 추가합니다. 번호는 국제 형식이어야 합니다. 그렇지 않으면 작동하지 않습니다. 

 

#define SMS_TARGET "+351XXXXXXXXXXX"

 

온도 임계값을 정의합니다. 섭씨 28도로 설정했습니다. 

 

float temperatureThreshold = 28.0;

 

SMS가 전송되었는지 여부를 추적하는 변수를 만듭니다. 

 

bool smsSent = false;

 

온도 센서는 GPIO 13에 연결되지만 다른 GPIO를 사용할 수 있습니다. 

 

const int oneWireBus = 13;

 

관련 콘텐츠: Arduino IDE를 사용한 ESP32 DS18B20 온도 센서(단일, 다중, 웹 서버) 

 

loop()에서 온도 판독값을 가져옵니다. 

 

sensors.requestTemperatures();
// Temperature in Celsius degrees 
float temperature = sensors.getTempCByIndex(0);
SerialMon.print(temperature);
SerialMon.println("*C");

 

기본적으로 온도는 섭씨도 단위로 표시되지만 다음 줄의 주석 처리를 해제하여 화씨도 단위로 온도를 사용할 수 있습니다. 그런 다음 온도 단위와 일치하도록 임계값도 조정해야 합니다.

 

// Temperature in Fahrenheit degrees
/*float temperature = sensors.getTempFByIndex(0);
SerialMon.print(temperature);
SerialMon.println("*F");*/

 

그 다음에는 현재 온도 값이 정의된 임계값을 넘었는지, 알림 SMS가 전송되지 않았는지 확인하는 조건이 있습니다. 

 

if((temperature > temperatureThreshold) && !smsSent){

 

해당 조건에 해당하면 "임계값을 초과하는 온도입니다: "라는 문구와 현재 온도 값을 전송합니다.

 

String smsMessage = String("Temperature above threshold: ") + 
           String(temperature) + String("C");
if(modem.sendSMS(SMS_TARGET, smsMessage)){
  SerialMon.println(smsMessage);
  smsSent = true;
}
else{
  SerialMon.println("SMS failed to send");
}

 

보시다시피 문자 메시지를 보내려면 모뎀 객체에서 sendSMS() 메서드를 사용합니다. 인수로 SMS를 보내려는 전화번호와 메시지 내용만 전달하면 됩니다. 

 

if(modem.sendSMS(SMS_TARGET, smsMessage)){

 

메시지를 보낸 후 smsSent 변수를 true로 설정하여 동일한 임계값에 도달한 SMS 알림이 여러 번 수신되는 것을 방지합니다. 

 

smsSent = true;

 

온도가 임계값 아래로 내려가면 SMS도 수신합니다. 

 

else if((temperature < temperatureThreshold) && smsSent){
  String smsMessage = String("Temperature below threshold: ") + 
           String(temperature) + String("C");
  if(modem.sendSMS(SMS_TARGET, smsMessage)){
    SerialMon.println(smsMessage);
    smsSent = false;
  }
  else{
    SerialMon.println("SMS failed to send");
  }
}

 

이번에는 smsSent 변수를 false로 설정하여 임계값 아래에서 메시지를 수신하지 않도록 합니다. 

 

이러한 조건은 5초마다 확인되지만 지연 시간을 변경할 수 있습니다. 

 

코드 업로드

 

수신자의 전화번호와 SIM 카드 PIN 코드를 입력한 후 스케치를 ESP32에 업로드합니다. 

 

  • 도구 > 보드로 이동하여 ESP32 Dev 모듈을 선택합니다.
  • 그런 다음 도구 > 포트로 이동하여 ESP32가 연결된 COM 포트를 선택합니다.
  • 그런 다음 업로드 버튼을 누릅니다.

몇 초 후에 코드가 성공적으로 업로드됩니다. 

 

또한 115200의 전송 속도로 직렬 모니터를 열어 현재 센서 판독값을 볼 수 있습니다. 

 

센서 위에 손가락을 대면 온도가 상승하기 시작합니다. 28ºC 이상이 되면 SMS를 보냅니다. 

 

T-Call ESP32 SIM800L 보드에서 온도 판독값이 포함된 SMS 수신

 

온도가 임계값 아래로 떨어지면 다른 SMS를 받습니다. 

 

T-Call ESP32 SIM800L 보드에서 임계값 아래 온도 SMS 수신 

 

마무리

 

이 프로젝트를 통해 T-Call ESP32 SIM800L 모듈로 SMS를 보내는 방법을 알아보았습니다. 이제 이 프로젝트를 실제 애플리케이션에서 사용하고 임계값에 도달하면 SMS 알림을 보내거나 예를 들어 매시간 센서 판독값이 포함된 SMS를 보낼 수 있습니다. 

 

이 프로젝트를 배터리로 구동하려면 딥 슬립 모드를 사용하고 매시간 ESP32를 깨워 현재 온도를 확인하는 것이 좋습니다. 이 프로젝트의 코드를 사용하면 배터리가 빠르게 소모되기 때문입니다. 

 

T-Call ESP32 SIM800L 보드와 관련된 다른 기사/프로젝트:

 

ESP32 Wi-Fi 없이 클라우드에 데이터 게시(TTGO T-Call ESP32 SIM800L)

TTGO T-Call ESP32 with SIM800L GSM/GPRS(심층 검토)

 

다음 리소스를 통해 ESP32에 대해 자세히 알아보세요.

 

Arduino IDE로 ESP32 배우기(과정)

ESP32 및 ESP8266을 사용한 MicroPython 프로그래밍(eBook)

추가 ESP32 프로젝트 및 튜토리얼

 

읽어주셔서 감사합니다. 배움을 멈추지 마세요. 또한 절대 포기하지도 마세요!

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^