Lavanya rajan
Well-known member
Hello All,
I'm attempting to send two arrays, each containing 512 elements, to a MySQL database table. However, upon inspection via the serial monitor, I noticed that only 160 values are being printed for both the 'xarray' and 'yarray'. I'm sending this array data as JSON to the MySQL database. Could someone kindly investigate and provide guidance on resolving this issue
I'm attempting to send two arrays, each containing 512 elements, to a MySQL database table. However, upon inspection via the serial monitor, I noticed that only 160 values are being printed for both the 'xarray' and 'yarray'. I'm sending this array data as JSON to the MySQL database. Could someone kindly investigate and provide guidance on resolving this issue
Code:
#include <ArduinoJson.h>
String SSID = "xxx";
String PASSWORD = "xxx";
bool prntln = false;
String HOST_NAME = "xxxx";
unsigned long previousMillis = 0;
const long interval = 1000; // Send data every 1 second
StaticJsonDocument<5256> doc;
JsonArray xvalues = doc.createNestedArray("x");
JsonArray yvalues = doc.createNestedArray("y");
void sendCommand(String command, unsigned long timeout);
void setup() {
Serial.begin(115200);
Serial1.begin(115200); // Use Serial1 for communication with the ESP8266
delay(2000);
flushSerial();
delay(200);
Serial.println(F("Started"));
// Check communications with the ESP8266
Serial.println("Checking ESP8266 Version...");
sendCommand("AT+GMR", 5000);
Serial.println("Checking AT...");
sendCommand("AT", 5000);
Serial.println("Checking CWMODE...");
sendCommand("AT+CWMODE?", 5000);
Serial.println("Set to Station Mode...");
sendCommand("AT+CWMODE=1", 5000);
Serial.println("Join WiFi....");
String joinstring = "AT+CWJAP=\"";
joinstring += SSID + "\",\"";
joinstring += PASSWORD + "\"";
sendCommand(joinstring, 7000);
Serial.println("Get IP Address...");
sendCommand("AT+CIFSR", 7000);
doc["frequency"] = 120.5;
}
void loop() {
datapopulate();
postdata(doc);
}
void datapopulate() {
// Clear the arrays before adding new data
// Populate arrays with random values
for (int i = 0; i < 512; i++) {
// Add values to arrays
xvalues.add(i); // Generate values from 0 to 511
yvalues.add(random(500)); // Generate random values for y
}
}
void postdata(StaticJsonDocument<5256> doc) {
// Serialize JSON document
String jsonPayload;
serializeJson(doc, jsonPayload);
// Print JSON payload
Serial.println("JSON Payload:");
Serial.println(jsonPayload);
// Send HTTP request
Serial.println("Connecting to xxxx...");
sendCommand("AT+CIPSTART=\"TCP\",\"xxxx\",80", 10000);
String data = "POST /esp32s3/json.php HTTP/1.1\r\n";
data += "Host: " + HOST_NAME + "\r\n";
data += "Content-Type: application/json\r\n";
data += "Content-Length: " + String(jsonPayload.length()) + "\r\n\r\n";
data += jsonPayload;
Serial.println("HTTP Request:");
Serial.println(data);
// Send the HTTP request
String sendRequest = "AT+CIPSEND=";
sendRequest += String(data.length());
sendCommand(sendRequest, 5000);
sendCommand(data, 5000);
delay(100); // Small delay between sending each array element
}
void sendCommand(String command, unsigned long timeout) {
Serial1.println(command); // Use Serial1 for communication with the ESP8266
if (recFind("OK", timeout, true)) {
Serial.println("Success");
} else {
Serial.println("Failed");
}
}
void flushSerial() {
while (Serial1.available() >= 1) {
Serial1.read();
}
}
bool recFind(String target, uint32_t timeout, bool prntln) {
char rdChar = "";
String rdBuff = "";
unsigned long startMillis = millis();
while (millis() - startMillis < timeout) {
while (Serial1.available() > 0) {
rdChar = Serial1.read();
rdBuff += rdChar;
if (prntln) {
Serial.write(rdChar);
}
if (rdBuff.indexOf(target) != -1) {
break;
}
}
if (rdBuff.indexOf(target) != -1) {
return true;
}
}
return false;
}