Hello,
I use an Arduino Mega and a SIM800L device. From the mobile phone I send SMS commands to turn on a light.
The code used is:
#include <gprs.h>
#include <softwareserial.h>
#define TIMEOUT 5000
#define LED_PIN 13
bool ledStatus;
GPRS gprs;
void setup() {
Serial.begin(9600);
while(!Serial);
Serial.println("Starting SIM800 SMS Command Processor");
gprs.preInit();
delay(1000);
while(0 != gprs.init()) {
delay(1000);
Serial.print("init error\r\n");
}
//Set SMS mode to ASCII
if(0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) {
ERROR("ERROR:CNMI");
return;
}
//Start listening to New SMS Message Indications
if(0 != gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0\r\n", "OK", TIMEOUT)) {
ERROR("ERROR:CNMI");
return;
}
Serial.println("Init success");
}
//Variable to hold last line of serial output from SIM800
char currentLine[500] = "";
int currentLineIndex = 0;
//Boolean to be set to true if message notificaion was found and next
//line of serial output is the actual SMS message content
bool nextLineIsMessage = false;
void loop() {
//Write current status to LED pin
digitalWrite(LED_PIN, ledStatus);
//If there is serial output from SIM800
if(gprs.serialSIM800.available()){
char lastCharRead = gprs.serialSIM800.read();
//Read each character from serial output until \r or \n is reached (which denotes end of line)
if(lastCharRead == '\r' || lastCharRead == '\n'){
String lastLine = String(currentLine);
//If last line read +CMT, New SMS Message Indications was received.
//Hence, next line is the message content.
if(lastLine.startsWith("+CMT:")){
Serial.println(lastLine);
nextLineIsMessage = true;
} else if (lastLine.length() > 0) {
if(nextLineIsMessage) {
Serial.println(lastLine);
//Read message content and set status according to SMS content
//Begin Section
if(lastLine.indexOf("LED ON") >= 0){
ledStatus = 1;
} else if(lastLine.indexOf("LED OFF") >= 0) {
ledStatus = 0;
}
//Section End
nextLineIsMessage = false;
}
}
//Clear char array for next line of read
for( int i = 0; i < sizeof(currentLine); ++i ) {
currentLine[i] = (char)0;
}
currentLineIndex = 0;
} else {
currentLine[currentLineIndex++] = lastCharRead;
}
}
}
Please advise me how to add an authorization section to this code.
The LED on / off command to be executed only if the message has been sent from a specific phone number.
I tried to extract the sender number and compare it to a preset number but I did not succeed.
I've been using Arduino for a short time, I'm not an expert. I've decided to post my question here after I've been looking for information about string comparison, SMS extraction, and more in the last six months.
Thank you