Fixes to basic functionality, debug added

This commit contains a lot of basic fixes
(basic string stuff, that couldn't be tested
without a working server before) and adds
debug messages.
This commit is contained in:
Tim Staat 2025-08-29 15:52:29 +02:00
parent 20159cb27c
commit ef0845096e

View File

@ -4,7 +4,7 @@
#include <QMC5883LCompass.h> #include <QMC5883LCompass.h>
#include "wifi_save.h" #include "wifi_save.h"
#include <HTTPClient.h> #include <HTTPClient.h>
#include <Arduino_JSON.h> #include <ArduinoJson.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE); // if you use Hardware I2C port, full framebuffer, size = 1024 bytes U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE); // if you use Hardware I2C port, full framebuffer, size = 1024 bytes
@ -19,7 +19,7 @@ QMC5883LCompass compass;
#define GPS_BAUD 9600 #define GPS_BAUD 9600
String webserviceAddress = "http://192.168.179.2:65133/updateGPS"; String webserviceAddress = "https://festival-finder.noe-danke.de/updateGPS";
bool connected = false; bool connected = false;
HardwareSerial gpsSerial(2); HardwareSerial gpsSerial(2);
@ -49,13 +49,10 @@ void setup(void) {
Serial.begin(115200); Serial.begin(115200);
if (wifi_set_main()) if (wifi_set_main()) {
{
Serial.println("Connect WIFI SUCCESS"); Serial.println("Connect WIFI SUCCESS");
connected = true; connected = true;
} } else {
else
{
Serial.println("Connect WIFI FAULT"); Serial.println("Connect WIFI FAULT");
} }
@ -64,7 +61,6 @@ void setup(void) {
u8g2.begin(); // start a display. u8g2.begin(); // start a display.
gpsSerial.begin(GPS_BAUD, SERIAL_8N1, RXD2, TXD2); gpsSerial.begin(GPS_BAUD, SERIAL_8N1, RXD2, TXD2);
Serial.println("Serial 2 started at 9600 baud rate"); Serial.println("Serial 2 started at 9600 baud rate");
} }
void drawTriangles(byte i, char *time, char *distanceString) { void drawTriangles(byte i, char *time, char *distanceString) {
@ -77,15 +73,14 @@ void drawTriangles(byte i, char* time, char* distanceString) {
u8g2.drawButtonUTF8(48, 64 - 16, U8G2_BTN_BW0, 0, 0, 0, distanceString); u8g2.drawButtonUTF8(48, 64 - 16, U8G2_BTN_BW0, 0, 0, 0, distanceString);
u8g2.sendBuffer(); u8g2.sendBuffer();
delay(2000); delay(2000);
} }
bool doHttpRequest(const char* payload, char* latitude, char* longitude, char* gpsTime) { bool doHttpRequest(char *payload, char *latitude, char *longitude, char *gpsTime) {
HTTPClient http; HTTPClient http;
// Change space to 0 // Change space to 0
*(latitude + 6) = 0; *(latitude + 6) = '0';
String serverPath = webserviceAddress + "?long=" + *longitude + "&lat=" + *latitude + "&id=" + OWN_ID + "&req_id=" + REQ_ID + "&gpsDateTime=" + *gpsTime; String serverPath = webserviceAddress + "?long=" + longitude + "&lat=" + latitude + "&id=" + OWN_ID + "&req_id=" + REQ_ID + "&gpsDateTime=" + gpsTime;
Serial.println(serverPath); Serial.println(serverPath);
@ -98,14 +93,15 @@ bool doHttpRequest(const char* payload, char* latitude, char* longitude, char* g
// Send HTTP GET request // Send HTTP GET request
int httpResponseCode = http.GET(); int httpResponseCode = http.GET();
if (httpResponseCode>0) {
Serial.print("HTTP Response code: "); Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode); Serial.println(httpResponseCode);
payload = http.getString().c_str();
if (httpResponseCode == 200 ) {
const char* cpayload = http.getString().c_str();
strcpy(payload, cpayload);
Serial.println(payload); Serial.println(payload);
return true; return true;
} } else {
else {
Serial.print("Error code: "); Serial.print("Error code: ");
Serial.println(httpResponseCode); Serial.println(httpResponseCode);
return false; return false;
@ -117,12 +113,25 @@ byte calculateBearing(float bearing) {
relativeAngle += 360; relativeAngle += 360;
relativeAngle %= 360; relativeAngle %= 360;
return compass.getBearing(relativeAngle); return compass.getBearing(relativeAngle);
} }
void setDistanceBearingString(char *distance, byte *bearing, const char *payload) { void setDistanceBearingString(char *distance, byte *bearing, const char *payload) {
JSONVar jsonPayload = JSON.parse(payload); StaticJsonDocument<200> doc;
*distance = jsonPayload["dist"];
*bearing = calculateBearing(String(jsonPayload["bearing"]).toFloat()); DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
const char* dist2 = doc["distance"];
//Serial.println(dist2);
Serial.println("JSON stuff:");
Serial.println(dist2);
strcpy(distance, dist2);
*bearing = calculateBearing(String(doc["bearing"]).toFloat());
} }
@ -131,13 +140,13 @@ void loop(void) {
while (gpsSerial.available() > 0) { while (gpsSerial.available() > 0) {
// get the byte data from the GPS // get the byte data from the GPS
char gpsData = gpsSerial.read(); char gpsData = gpsSerial.read();
if (gps.encode(gpsData)) {
Serial.print(gpsData); Serial.print(gpsData);
if (gps.encode(gpsData)) {
break; break;
} }
} }
Serial.println();
long unsigned date, time, age; long unsigned date, time, age;
char *longitude, *latitude, *dateTime; char *longitude, *latitude, *dateTime;
longitude = gps.get_longitude(); longitude = gps.get_longitude();
@ -147,30 +156,44 @@ void loop(void) {
Serial.println(latitude); Serial.println(latitude);
Serial.println(longitude); Serial.println(longitude);
const char *myPayloadResponse; char myPayloadResponse[80];
char timeString[10], dateString[8], dateTimeString[18]; char timeString[10], dateString[10], dateTimeString[24];
ltoa(time, timeString, 10); ltoa(time, timeString, 10);
ltoa(date, dateString, 8); ltoa(date, dateString, 10);
for (int i = 0; i < 18 ;i++){ // for (int i = 0; i < 18; i++) {
if(i < 8) // if (i < 7) {
dateTimeString[i] = dateString[i]; // dateTimeString[i] = dateString[i];
else // } else {
dateTimeString[i] = timeString[i-8]; // dateTimeString[i] = timeString[i - 8];
} // }
// }
strcpy(dateTimeString, dateString);
strcat(dateTimeString, timeString);
byte triangleIndex = 0; byte triangleIndex = 0;
char distanceArray[] = { 'N', 'o', ' ', 'S', 'e', 'r', 'v', 'e', 'r', '\0' }; char distanceArray[] = { 'N', 'o', ' ', 'S', 'e', 'r', 'v', 'e', 'r', '\0' };
char *distanceString = &(distanceArray[0]); char distanceString[16];
strcpy(distanceString, distanceArray);
if (doHttpRequest(myPayloadResponse, latitude, longitude, dateTimeString)) if (doHttpRequest(myPayloadResponse, latitude, longitude, dateTimeString))
setDistanceBearingString(distanceString, &triangleIndex, myPayloadResponse); setDistanceBearingString(distanceString, &triangleIndex, myPayloadResponse);
Serial.println(); Serial.println();
Serial.println("Time: "); Serial.println("TimeString: ");
Serial.println(time); Serial.println(timeString);
Serial.println("DateString: ");
Serial.println(dateString);
Serial.println("Date: "); Serial.println("Date: ");
Serial.println(date); Serial.println(dateString);
Serial.println("DateTime: ");
Serial.println(dateTimeString);
Serial.println("DistanceString: ");
Serial.println(distanceString);
drawTriangles(triangleIndex, timeString, distanceString); drawTriangles(triangleIndex, timeString, distanceString);
@ -193,5 +216,5 @@ void loop(void) {
Serial.println(); Serial.println();
Serial.println("-------------------------------"); Serial.println("-------------------------------");
delay(1000); delay(5000);
} }