Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions examples/Read_SMS_message/Read_SMS_message.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#define TINY_GSM_MODEM_SIM800
#define TINY_GSM_DEBUG Serial //to use DBG fubction from tiny gsm library
#define TINY_GSM_MODEM_SIM800
#include <TinyGsmClient.h>
#include <SoftwareSerial.h>
#define rxPin 10
#define txPin 11
SoftwareSerial NETWORK_PORT = SoftwareSerial(rxPin, txPin);
TinyGsm modem(NETWORK_PORT);//use serial1 in case of arduino mega
void setup() {
// define pin modes for tx, rx:
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
NETWORK_PORT.begin(9600);
Serial.begin(9600);
}

void loop() {
// put your main code here, to run repeatedly:
/*
set mode 0 for reading latest unread message first
set mode 1 for reading oldest unread message first
in newMessageIndex(mode);
*/
int index=modem.newMessageIndex(0);
if(index>0){
String SMS=modem.readSMS(index);
String ID=modem.getSenderID(index);
DBG("new message arrived from :");
DBG(ID);DBG("Says");DBG(SMS);
}
delay(100);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#define RI 2 //connect RI pin of sim 800 to interrupt pin 0 of arduino
#define Mode HIGH
#define TINY_GSM_MODEM_SIM800
#include <TinyGsmClient.h>
#include <SoftwareSerial.h>
#define rxPin 10
#define txPin 11
// set up a new serial port
SoftwareSerial NETWORK_PORT = SoftwareSerial(rxPin, txPin);
TinyGsm modem(NETWORK_PORT);//use serial1 in case of arduino mega
void setup() {
// define pin modes for tx, rx:
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
NETWORK_PORT.begin(9600);
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(RI), ISR_NEW_SMS, Mode);

}

void loop() {
//Read SMS normally
Serial.println("Enter the SMS index to Read ");
while(Serial.available()==0){

}
int i = Serial.parseInt();
Serial.print("Reading message at :- ");Serial.println(i);
String SMS=modem.readSMS(i);
String ID=modem.getSenderID(i);
Serial.print("Message From : ");Serial.println(ID);
Serial.println(" and the message is ");
Serial.println(SMS);
}
void ISR_NEW_SMS(){
Serial.print("New SMS arrived at index :- ");
unsigned long timerStart,timerEnd;
String interrupt="";
timerStart = millis();
while(1) {
if(NETWORK_PORT.available()) {
char c = NETWORK_PORT.read();
interrupt+=c;
}
timerEnd = millis();
if(timerEnd - timerStart > 1500)break;
}
if(interrupt.indexOf("CMTI:") > 0){
int i=modem.newMessageInterrupt(interrupt);
Serial.println(i);
String SMS=modem.readSMS(i);
String ID=modem.getSenderID(i);
Serial.print("Message From : ");Serial.println(ID);
Serial.println(" and the message is ");
Serial.println(SMS);
}else{
Serial.println("false alarm");
return;
}

}
57 changes: 57 additions & 0 deletions src/TinyGsmClientSIM800.h
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,12 @@ class TinyGsmSim800 : public TinyGsmModem<TinyGsmSim800>,
res.trim();
return res;
}
bool isIPconnected() {
sendAT(GF("+CIPSTATUS"));
String h = stream.readString();
if (h.indexOf("CONNECT") > 0) return 1;
return 0;
}

/*
* Phone Call functions
Expand Down Expand Up @@ -471,6 +477,12 @@ class TinyGsmSim800 : public TinyGsmModem<TinyGsmSim800>,
sendAT(GF("+CMIC="), level);
return waitResponse() == 1;
}
int newMessageInterrupt(String interrupt) {
int Start = interrupt.indexOf(',');
int Stop = interrupt.indexOf('\n', Start);
int index = interrupt.substring(Start + 1, Stop - 1).toInt();
return index;
}

bool setAudioChannel(uint8_t channel) {
sendAT(GF("+CHFA="), channel);
Expand All @@ -483,7 +495,52 @@ class TinyGsmSim800 : public TinyGsmModem<TinyGsmSim800>,
sendAT(GF("STTONE="), 0);
return waitResponse();
}
String readSMS(int index, const bool changeStatusToRead = true) {
sendAT(GF("+CMGF=1"));
waitResponse();
sendAT(GF("+CMGR="), index, GF(","),
static_cast<const uint8_t>(!changeStatusToRead));
String h = "";
streamSkipUntil('\n');
streamSkipUntil('\n');
h = stream.readStringUntil('\n');
return h;
}
int newMessageIndex(bool mode) {
sendAT(GF("+CMGF=1"));
waitResponse();
sendAT(GF("+CMGL=\"REC UNREAD\",1"));
String h = stream.readString();
int i;
if (mode) {
i = h.indexOf("+CMGL: ");
} else {
i = h.lastIndexOf("+CMGL: ");
}

int index = h.substring(i + 7, i + 9).toInt();
if (index <= 0) return 0;
return index;
}
bool emptySMSBuffer() {
sendAT(GF("+CMGF=1"));
waitResponse();
sendAT(GF("+CMGDA=\"DEL ALL\""));
return waitResponse(60000L) == 1;
}
String getSenderID(int index, const bool changeStatusToRead = true) {
sendAT(GF("+CMGF=1"));
waitResponse();
sendAT(GF("+CMGR="), index, GF(","),
static_cast<const uint8_t>(changeStatusToRead));
String h = "";
streamSkipUntil('"');
streamSkipUntil('"');
streamSkipUntil('"');
h = stream.readStringUntil('"');
stream.readString();
return h;
}
/*
* Time functions
*/
Expand Down