Hi People
I am a beginner when it comes to coding, so please forgive my ignorance and stupid questions.
I am trying to create a small immobilizer and tracking unit for my bike. I am using a A9G Pudding module with a STM32 Blue Pill module (f103c6ta). I am using SMS to control the relay and for location. I also have a push button, when pressed to send a location via sms.
Receive SMS "Start" = relay1 active (circuit closed) Start enabled
Receive SMS "Stop" = relay1 inactive (Circuit open) Start Disabled
Receive SMS "Location" = Send SMS with Location
I have the A9G Connected via RX and TX to pin 9&10 of the Blue pill. I have a Push Button Connected to Blue pill pin 6 and Relay to Pin 7. i have a 18650 battery connect to the A9g VBAT input and the 3.3V blue pill input. i have a 12v via a LM7805 voltage regulator to the A9G and Blue pill 5V inputs.
I am using Arduino IDE via STLink for the coding, Arduino via the usb port for the Serial Monitor. The code is bits of different projects I picked up online. I do understand most of it or at least I think I do.
It works as intended but very inconsistently. So I can send the unit a SMS and it will work. A minute or 2 later I can send a sms and it wont. When I use serial monitor I can see it receiving the SMS and displaying the message but will not execute the corresponding functions.
I am not sure if this is a coding or hardware issue? Any assistance will be highly appreciated
#include <TinyGPSPlus.h>
#define Panic PA6
int Relay1 = (PA7);
void setup() {
Serial1.begin(115200);
Serial.begin(115200);
Serial1.println("AT+RST=1\r");
delay(20000);
Serial.println("Initializing...");
Serial1.println("AT+CMGF=1"); // Set GSM Module in Text Mode
delay(3000);
Serial1.println("AT+CNMI=2,2,0,0,0"); // New SMS Message Indications
delay(3000);
Serial1.println("AT+GPSMD=2"); // Set GPS + BD Mode
delay(3000);
Serial1.println("AT+GPSLP=0"); // Set GPS Power mode to full
delay(3000);
Serial1.println("AT+GPS=1"); // Enable GPS
delay(3000);
Serial1.println("AT+GPSRD=15");
delay(3000);
Serial1.println("AT+CPMS=SM,SM,SM\r");
delay(5000);
Serial1.println("AT+CPMS=?");
delay(3000);
if (Serial1.available() > 0) {
String incomingMessage1 = Serial1.readString();
Serial.println("Incoming message: " + incomingMessage1);
Serial1.flush();
}
Serial1.println("AT+CMGD=1,4\r");
delay(5000);
if (Serial1.available() > 0) {
String incomingMessage1 = Serial1.readString();
Serial.println("Incoming message: " + incomingMessage1);
Serial1.flush();
}
Serial1.println("AT+CMPS?\r");
delay(3000);
if (Serial1.available() > 0) {
String incomingMessage1 = Serial1.readString();
Serial.println("Incoming message: " + incomingMessage1);
Serial1.flush();
}
pinMode(Relay1, OUTPUT); // Connect to s terminal on relay
digitalWrite(Relay1, LOW);
pinMode(Panic, INPUT_PULLUP); // CONNECT TO PANIC BUTTON
Serial.println("Initialization complete.");
} // End Void Setup
uint8_t prevState = 1;
void loop() {
// Begin Relay1 ON
if (Serial1.available() > 0) {
String incomingMessage = Serial1.readString();
Serial.println("Incoming message: " + incomingMessage);
if (incomingMessage.indexOf("Start") != -1) {
Serial.println("----- Switching Vehicle On -----");
digitalWrite(Relay1, HIGH); // Relay ON
delay(3000);
Serial.println("### RELAY ON ###");
Serial1.println("AT+CMGD=1,4\r");
delay(5000);
}
Serial1.flush();
} //End Relay1 ON
// Begine Relay1 OFF
if (Serial1.available() > 0) {
String incomingMessage = Serial1.readString();
Serial.println("Incoming message: " + incomingMessage);
if (incomingMessage.indexOf("Stop") >= 0) {
Serial.println("----- Switching Vehicle Off -----");
digitalWrite(Relay1, LOW); // Relay OFF
delay(3000);
Serial.println("### RELAY OFF ###");
Serial1.println("AT+CMGD=1,4\r");
delay(5000);
}
Serial1.flush();
} // End Relay1 OFF
// Begin Location SMS
if (Serial1.available() > 0) {
String incomingMessage = Serial1.readString();
Serial.println("Incoming message: " + incomingMessage);
if (incomingMessage.indexOf("Location") != -1) {
Serial1.println("AT+CMGS=\"+1234567890\"\r"); // Replace +1234567890 with your number
Serial.println("Sending SMS message...");
delay(2000);
TinyGPSPlus gps;
while (gps.location.isValid() == 0) {
while (Serial1.available()) {
gps.encode(Serial1.read());
}
}
String lat = String(gps.location.lat(), 6);
String lon = String(gps.location.lng(), 6);
String url = "https://www.google.com/maps/dir/?api=1&destination=" + lat + "," + lon + "&travelmode=driving";
Serial.println("Google Maps URL: " + url);
Serial1.println(url); // Send the Google Maps URL with the GPS module's location
delay(100);
Serial1.println((char)26); // ASCII code of CTRL+Z
delay(1000);
Serial.println("SMS message sent.");
Serial1.println("AT+CMGD=1,4\r");
delay(5000);
}
Serial1.flush();
} // End Location SMS
// Begin Panic Button
uint8_t state = digitalRead(Panic);
if(state != prevState)
{
prevState = state;
if(state == 0)
Serial.println("### PANIC ACTIVATED ###");
Serial1.println("AT+CMGS=\"+27710784606\"\r"); // Replace +1234567890 with your number
Serial.println("Sending SMS message...");
delay(2000);
TinyGPSPlus gps;
while (gps.location.isValid() == 0) {
while (Serial1.available()) {
gps.encode(Serial1.read());
}
}
String lat = String(gps.location.lat(), 6);
String lon = String(gps.location.lng(), 6);
String url = "https://www.google.com/maps/dir/?api=1&destination=" + lat + "," + lon + "&travelmode=driving";
Serial.println("Google Maps URL: " + url);
Serial1.println("### PANIC ACTIVATED ###");
Serial1.println(url); // Send the Google Maps URL with the GPS module's location
delay(100);
Serial1.println((char)26); // ASCII code of CTRL+Z
delay(1000);
Serial.println("SMS message sent.");
Serial1.println("AT+CMGD=1,4\r");
delay(5000);
Serial1.flush();
} // End Panic Button
} // VOID LOOP END

