#include <TinyGPS++.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>
#include <WiFi.h>
#include <UniversalTelegramBot.h>
#define GPS_BAUDRATE 9600 // The default baudrate of NEO-6M is 9600
#define LED_PIN 2 // Pin connected to LED
#define BUZZER_PIN 4 // Pin connected to Buzzer
// WiFi credentials
const char* ssid = "Kanekisem";
const char* password = "taktauke";
// Telegram Bot credentials
#define BOTtoken "7106172939:AAHhlZRKhRiPJcRlEELfLTdWNIA-lTlt6Gk"
#define CHAT_ID "673371683"
// Initialize the accelerometer
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
// Initialize the Telegram bot
WiFiClient client;
UniversalTelegramBot bot(BOTtoken, client);
TinyGPSPlus gps; // the TinyGPS++ object
void setup() {
Serial.begin(9600);
Serial2.begin(GPS_BAUDRATE);
// Initialize LED and Buzzer
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
// Initialize the accelerometer
if (!accel.begin()) {
Serial.println(F("Could not find a valid ADXL345 sensor, check wiring!"));
while (1);
}
Serial.println(F("ESP32 - GPS module"));
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void loop() {
if (Serial2.available() > 0) {
if (gps.encode(Serial2.read())) {
if (gps.location.isValid()) {
Serial.print(F("- latitude: "));
Serial.println(gps.location.lat());
Serial.print(F("- longitude: "));
Serial.println(gps.location.lng());
Serial.print(F("- altitude: "));
if (gps.altitude.isValid())
Serial.println(gps.altitude.meters());
else
Serial.println(F("INVALID"));
// Send GPS data as a link to Google Maps to Telegram
String googleMapsLink = "https://maps.google.com/maps?q=" + String(gps.location.lat(), 6) + "," + String(gps.location.lng(), 6);
bot.sendMessage(CHAT_ID, "Google Maps link to current location: " + googleMapsLink, "");
// Blink LED
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
} else {
Serial.println(F("- location: INVALID"));
}
Serial.print(F("- speed: "));
if (gps.speed.isValid()) {
Serial.print(gps.speed.kmph());
Serial.println(F(" km/h"));
} else {
Serial.println(F("INVALID"));
}
Serial.print(F("- GPS date&time: "));
if (gps.date.isValid() && gps.time.isValid()) {
Serial.print(gps.date.year());
Serial.print(F("-"));
Serial.print(gps.date.month());
Serial.print(F("-"));
Serial.print(gps.date.day());
Serial.print(F(" "));
Serial.print(gps.time.hour());
Serial.print(F(":"));
Serial.print(gps.time.minute());
Serial.print(F(":"));
Serial.println(gps.time.second());
} else {
Serial.println(F("INVALID"));
}
Serial.println();
}
}
if (millis() > 5000 && gps.charsProcessed() < 10)
Serial.println(F("No GPS data received: check wiring"));
// Check for accelerometer data
sensors_event_t event;
accel.getEvent(&event);
// If acceleration exceeds threshold, trigger buzzer
if (event.acceleration.x > 3.0 || event.acceleration.y > 3.0 || event.acceleration.z > 3.0) {
digitalWrite(BUZZER_PIN, HIGH);
delay(1000);
digitalWrite(BUZZER_PIN, LOW);
}
}
Loading
esp32-devkit-v1
esp32-devkit-v1