#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include "I2Cdev.h"
#include "MPU6050.h"
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
#define BMP_SCK 18
#define BMP_MISO 19
#define BMP_MOSI 23
#define BMP_CS 5
// Define the GPS connection
#define GPS_RX_PIN 4
#define GPS_TX_PIN 3
Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
MPU6050 mpu;
SoftwareSerial gpsSerial(GPS_RX_PIN, GPS_TX_PIN); // RX, TX
// Create a TinyGPS++ object
TinyGPSPlus gps;
void setup() {
Wire.begin();
Serial.begin(115200);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
while (1);
}
mpu.initialize();
Serial.println(mpu.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
// Initialize the GPS module
gpsSerial.begin(9600);
}
void loop() {
int16_t ax, ay, az;
mpu.getAcceleration(&ax, &ay, &az);
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.print(" *C, ");
Serial.print("Approx altitude = ");
Serial.print(bmp.readAltitude(88)); // this should be adjusted to your local forecast
Serial.print(" m, ");
Serial.print("Acceleration X = ");
Serial.print(ax);
Serial.print(", Y = ");
Serial.print(ay);
Serial.print(", Z = ");
Serial.println(az);
// Read data from the GPS module
while (gpsSerial.available() > 0) {
char c = gpsSerial.read();
// Feed the characters from the GPS module to the TinyGPS++ object
if (gps.encode(c)) {
// If a new valid sentence was received from the GPS module, print the location
if (gps.location.isValid()) {
Serial.print("Latitude = ");
Serial.print(gps.location.lat(), 6);
Serial.print(", Longitude = ");
Serial.println(gps.location.lng(), 6);
// Send the data to the computer/web server
Serial.print("GPS Data: ");
Serial.print(gps.location.lat(), 6);
Serial.print(",");
Serial.println(gps.location.lng(), 6);
} else {
Serial.println("Location not valid");
}
}
}
// Consider reducing the delay for more frequent updates
delay(1000); // Update every second
}