#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
char *gnss = "3,14,,00,01,3352.92149,S,01840.63139,E,291123,194213.00,105.6,0.454,,3.0,1.3,2.6";
const String gnssND = ",,,,,,,,";
const char *duuid = "123456";
HTTPClient http;
struct trackdata{
char *device_id;
char *lon;
char *lat;
char *cap_time;
char *cap_date;
char *speed;
char *heading;
char *fix_type;
};
void postdata(String data)
{
http.begin("http://192.168.110.189:3000/");
http.addHeader("Content-Type", "text/plain");
int httpResponseCode = http.POST(data);
Serial.println(httpResponseCode);
}
char* parsegnssdata (char *gnssdata)
{
DynamicJsonDocument trackjson(2048);
// serializeJson(doc, Serial);
trackjson["type"] = "LOCATION UPDATE";
trackjson["device_id"] = duuid;
trackjson["lon"] = getValue(gnssdata,',',5);
trackjson["lat"] = getValue(gnssdata,',',7);
trackjson["cap_time"] = getValue(gnssdata,',',10);
trackjson["cap_date"] = getValue(gnssdata,',',9);
trackjson["speed"] = getValue(gnssdata,',',12);
trackjson["heading"] = getValue(gnssdata,',',11);
trackjson["fix_type"] = getValue(gnssdata,',',0);
size_t len = measureJson(trackjson); // returns 17
size_t size = len+1;
char returndata[size];
serializeJson(trackjson,returndata,size);
Serial.println(returndata);
return strdup(returndata);
}
String getValue(String data, char separator, int index)
{
int found = 0;
int strIndex[] = {0, -1};
int maxIndex = data.length()-1;
for(int i=0; i<=maxIndex && found<=index; i++){
if(data.charAt(i)==separator || i==maxIndex){
found++;
strIndex[0] = strIndex[1]+1;
strIndex[1] = (i == maxIndex) ? i+1 : i;
}
}
return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32-S3!");
WiFi.mode(WIFI_STA); //Optional
WiFi.begin(ssid, password);
Serial.println("\nConnecting");
while(WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(100);
}
Serial.println("\nConnected to the WiFi network");
Serial.print("Local ESP32 IP: ");
Serial.println(WiFi.localIP());
char *postgnss = parsegnssdata(gnss);
Serial.println(postgnss);
postdata(postgnss);
}
void loop() {
// // put your main code here, to run repeatedly:
// Serial.println(getValue(gnss,',',0));
// if (getValue(gnssND,',',0) == ""){
// Serial.println("no data");
// }
// delay(1000); // this speeds up the simulation
}