#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.