Hello everyone. can you help me. I have a problem in my project monitoring current with an SMS gateway, I'm still confused about why the SMS I sent ha

#include <SoftwareSerial.h>
#include <PZEM004Tv30.h>
const String PHONE = "08**********";
#define rxPin 10
#define txPin 11
SoftwareSerial sim800(rxPin,txPin);
#define rxPin_pzem 7
#define txPin_pzem 8
PZEM004Tv30 pzem(rxPin_pzem, txPin_pzem);
String smsStatus,senderNumber,receivedDate,msg;

void setup() {
  
  Serial.begin(115200);
  Serial.println("initialize pzem-004T");
  
  Serial.println("SIM800L software serial initialize");
  sim800.begin(9600);
  sim800.println("AT+CMGF=1");
  delay(1000);
  sim800.println("AT+CNMI=1,1,0,0,0"); 
  delay(1000);
}

void loop()
{
  while(sim800.available()){
    parseData(sim800.readString());
  }
   while(Serial.available())  {
    sim800.println(Serial.readString());
  }
} 

void parseData(String buff){
  Serial.println(buff);
  unsigned int len, index;
  index = buff.indexOf("\r");
  buff.remove(0, index+2);
  buff.trim();

  if(buff != "OK"){
    index = buff.indexOf(":");
    String cmd = buff.substring(0, index);
    cmd.trim();
    buff.remove(0, index+2);
  if(cmd == "+CMTI"){
    index = buff.indexOf(",");
    String pze = buff.substring(index+1, buff.length()); 
      pze = "AT+CMGR=" + pze + "\r"; 
      sim800.println(pze); 
    }
    else if(cmd == "+CMGR"){
      extractSms(buff);
      Serial.println(msg);
      Serial.println(senderNumber);
      if(senderNumber == PHONE && msg == "get pzem"){
          Reply(get_pzem());
      }
    }
  }
  else{
  //The result of AT Command is "OK"
  }
}

String get_pzem()
{
  float voltage = pzem.voltage();
  if(voltage != NAN){
    Serial.print("Voltage: "); Serial.print(voltage); Serial.println("V");
  } else {
    Serial.println("Error reading voltage");
  }
  float current = pzem.current();
  if(current != NAN){
   Serial.print("Current: "); Serial.print(current); Serial.println("A");
  } else {
   Serial.println("Error reading current");
  }
  float power = pzem.power();
   if(current != NAN){
   Serial.print("Power: "); Serial.print(power); Serial.println("W");
  } else {
   Serial.println("Error reading power");
  }
  delay(2000);

  String tegangan = "Tegangan: " + String(voltage) + "V";
  Serial.println(voltage);
  String arus = "Arus: " + String(current) + "A";
  Serial.println(current);
  String Daya = "Daya: " + String(power) + "Watt";
  Serial.println(power);
  return tegangan + "\n" + arus + "\n" + Daya;
}

//************************************************************
void Reply(String text)
{
    sim800.print("AT+CMGF=1\r");
    delay(1000);
    sim800.print("AT+CMGS=\""+PHONE+"\"\r");
    delay(1000);
    sim800.print(text);
    delay(100);
    sim800.write(0x1A); //ascii code for ctrl-26 //sim800.println((char)26); //ascii code for ctrl-26
    delay(1000);
    Serial.println("SMS Sent Successfully.");
}

//************************************************************
void extractSms(String buff){
   unsigned int index;
   
    index = buff.indexOf(",");
    smsStatus = buff.substring(1, index-1); 
    buff.remove(0, index+2);
    
    senderNumber = buff.substring(0, 13);
    buff.remove(0,19);
   
    receivedDate = buff.substring(0, 20);
    buff.remove(0,buff.indexOf("\r"));
    buff.trim();
    
    index =buff.indexOf("\n\r");
    buff = buff.substring(0, index);
    buff.trim();
    msg = buff;
    buff = "";
    msg.toLowerCase();
}

thank for answer my question. my problem already done.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.