#include <TinyGPS++.h>
#include <HardwareSerial.h>
#include <Arduino.h>
#include "soc/rtc.h"
#include "HX711.h"
// Create GPS and Serial objects
TinyGPSPlus gps;
HardwareSerial gpsSerial(1); // Use UART1
const int LOADCELL_DOUT_PIN = 4;
const int LOADCELL_SCK_PIN = 2;
HX711 scale;
void setup() {
// Initialize Serial Monitor
Serial.begin(115200);
Serial.println("GPS Neo-6M with ESP32");
// Initialize UART1 for GPS
gpsSerial.begin(9600, SERIAL_8N1, 16, 17); // RX = GPIO16, TX = GPIO17
while (!Serial); // Wait for the Serial connection to establish (if required)
delay(2000); // Allow Serial Monitor to initialize
rtc_cpu_freq_config_t config;
rtc_clk_cpu_freq_get_config(&config);
rtc_clk_cpu_freq_set_config_fast(&config); // Retain clock frequency
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); // Initialize HX711
// Set the scale factor here (calculated during calibration)
scale.set_scale(419);
scale.tare(); // Zero the scale to remove any offset
Serial.println("Scale initialized. You can now measure weight.");
}
void loop() {
// Read data from GPS module
while (gpsSerial.available() > 0) {
char c = gpsSerial.read();
if (gps.encode(c)) {
// If new data is available, print it
displayGPSData();
}
}
if (scale.is_ready()) { // Ensure HX711 is ready
float weight = scale.get_units(10); // Average of 10 readings for stability
Serial.print("Measured Weight: ");
Serial.print(weight);
Serial.println(" grams");
} else {
Serial.println("HX711 not found. Please check connections.");
}
delay(1000);
}
// Function to display GPS data
void displayGPSData() {
if (gps.location.isUpdated()) {
Serial.print("Latitude: ");
Serial.print(gps.location.lat(), 6);
Serial.print(", Longitude: ");
Serial.println(gps.location.lng(), 6);
}
if (gps.date.isUpdated()) {
Serial.print("Date: ");
Serial.print(gps.date.day());
Serial.print("/");
Serial.print(gps.date.month());
Serial.print("/");
Serial.println(gps.date.year());
}
if (gps.time.isUpdated()) {
Serial.print("Time: ");
Serial.print(gps.time.hour());
Serial.print(":");
Serial.print(gps.time.minute());
Serial.print(":");
Serial.println(gps.time.second());
}
}