Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //----------------------------------------------------------------
- // Include Dependencies and Libraries
- //----------------------------------------------------------------
- #include <TinyGPSPlus.h>
- #include <SoftwareSerial.h>
- //----------------------------------------------------------------
- //**************************************************************************
- //----------------------------------------------------------------
- // Define Connections
- //----------------------------------------------------------------
- #define buttonPin 14 //D5 = GPIO14 (ESP8266 - NodeMCU)
- //#define RXPin 4 //D2 = GPIO4 (ESP8266 - NodeMCU)
- //#define TXPin 5 //D1 = GPIO5 (ESP8266 - NodeMCU)
- static const int RXPin = 4, TXPin = 5;
- //----------------------------------------------------------------
- //**************************************************************************
- //----------------------------------------------------------------
- // Define Global Variables
- //----------------------------------------------------------------
- String emergencyContactNumber = "+966538060336";
- String s = "www.google.com/maps/dir/";
- String LAT, LON, sms;
- char charBuf[450];
- //----------------------------------------------------------------
- //**************************************************************************
- //----------------------------------------------------------------
- // Define Global Objects
- //----------------------------------------------------------------
- // The TinyGPSPlus object
- TinyGPSPlus gps;
- // The serial connection to the GPS device
- SoftwareSerial mySerial(RXPin, TXPin);
- //----------------------------------------------------------------
- //**************************************************************************
- //----------------------------------------------------------------
- // Main Setup Function
- //----------------------------------------------------------------
- void setup() {
- Serial.begin(9600);
- initialize_panic_button();
- initialize_A9G_GSM_GPS();
- }
- //----------------------------------------------------------------
- //**************************************************************************
- //----------------------------------------------------------------
- // Main Loop Function
- //----------------------------------------------------------------
- void loop() {
- readData_from_A9G_Modem_SMS_and_GPS(5000);
- }//end of loop
- //----------------------------------------------------------------
- //**************************************************************************
- //----------------------------------------------------------------
- // Functions
- //----------------------------------------------------------------
- //________________________________________________________________
- // Function to Send SMS to Emergancy Contact if Button is Pressed
- void ICACHE_RAM_ATTR isr() {
- send_gps_data_via_SMS(emergencyContactNumber);
- }
- //________________________________________________________________
- // Function to Setup A9G Modem To Read GPS Data and Receive SMS
- void initialize_A9G_GSM_GPS() {
- mySerial.begin(9600);
- delay(1000);
- mySerial.println("\r");
- mySerial.println("AT\r");
- delay(10);
- mySerial.println("\r");
- mySerial.println("AT+GPS=1\r");
- delay(100);
- mySerial.println("AT+CREG=2\r");
- delay(6000);
- mySerial.println("AT+CGATT=1\r");
- delay(6000);
- mySerial.println("AT+CGDCONT=1,\"IP\",\"WWW\"\r");
- delay(6000);
- mySerial.println("AT+CGACT=1,1\r");
- delay(6000);
- //Initialize ends
- //Initialize GPS
- mySerial.println("\r");
- mySerial.println("AT+GPS=1\r");
- delay(1000);
- mySerial.println("AT+GPSRD=10\r");
- delay(100);
- // set SMS mode to text mode
- mySerial.println("AT+CMGF=1\r");
- delay(1000);
- }
- //________________________________________________________________
- // Function to Connect an Interrupt for the Panic Button
- void initialize_panic_button() {
- pinMode(buttonPin, INPUT);
- attachInterrupt(D5, isr, RISING);
- }
- //________________________________________________________________
- // Function to Send SMS with Location Data
- void send_gps_data_via_SMS(String NUMBER) {
- if (gps.location.lat() == 0 || gps.location.lng() == 0)
- {
- Serial.println("Return Executed - GPS Satellite [No Signal]");
- // LAT, LON
- // 21.330791, 39.945985
- LAT = "21.330791";
- LON = "39.945985";
- //return;
- }
- Serial.print(LAT);
- Serial.print(" , ");
- Serial.println(LON);
- Serial.println();
- Serial.println();
- Serial.println();
- Serial.println();
- Serial.println();
- s += LAT;
- s += ",";
- s += LON;
- s += "/";
- //s = "new_new_24-08-2023";
- Serial.println(s);
- Serial.println("Sending Message");
- mySerial.println("AT+CMGF=1\r");
- delay(1000);
- mySerial.println("AT+CNMI=2,2,0,0,0\r");
- delay(1000);
- mySerial.print("AT+CMGS=\"");
- mySerial.print(NUMBER);
- mySerial.print("\"\r");
- delay(1000);
- mySerial.print(s);
- mySerial.write(0x1A);
- delay(1000);
- s = "www.google.com/maps/dir/";
- }
- //________________________________________________________________
- // Function to read Incoming SMS messages and Read GPS Data
- void readData_from_A9G_Modem_SMS_and_GPS(unsigned long T) {
- unsigned long Start = millis();
- do
- {
- while (mySerial.available())
- sms = mySerial.readString();
- Serial.println(sms);
- readGPS_Data_and_Show_on_Serial_Monitor();
- readSMS_if_SMS_Requested_Send_Location_To_Sender();
- } while (millis() - Start < T);
- }
- //________________________________________________________________
- // Function to Read GPS data and Save values as (Latitude,Longitude)
- void readGPS_Data_and_Show_on_Serial_Monitor() {
- sms.toCharArray(charBuf, 450);
- for (int i = 0; i < 450; i++) {
- gps.encode(charBuf[i]);
- }
- LAT = String(gps.location.lat(), 6);
- LON = String(gps.location.lng(), 6);
- Serial.print(LAT);
- Serial.print(" , ");
- Serial.println(LON);
- }
- //________________________________________________________________
- // Function to Respond with Location SMS if A9G modem receives an SMS
- void readSMS_if_SMS_Requested_Send_Location_To_Sender() {
- if (sms.indexOf("+CMT:") != -1) {
- // Get the sender's phone number
- String sender = sms.substring(sms.indexOf("+966"), sms.indexOf("\",,\"20"));
- Serial.println("Sender Number: ");
- Serial.println(sender);//e.g. "+966554433221"
- Serial.println("|||||||||||||||||||||||||||||||||||||||||||||||||||");
- Serial.println("GPS SMS Detected");
- Serial.println("|||||||||||||||||||||||||||||||||||||||||||||||||||");
- send_gps_data_via_SMS(sender);
- delay(5000);
- }
- }
- //________________________________________________________________
- //----------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement