You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Good afternoon. I have a problem using the RestClient.h library. I don’t know if it’s the right place to expose my problem.
I reported the problem to the Arduino forum but I have no answer (https://forum.arduino.cc/t/libreria-restclient-h-fallos-esporadicos-de-conexion/868293)
I have implemented a code, which using POST, GET, ... I consult data, modify records and add information to a database of a server through a web service.
I use the library "RestClient.h"
Everything works, but sometimes, many, too many, I do not get the confirmation data or the data consulted. I was able to do the query or update well three times in a row and fail the next two, I didn't respond (I don't receive any data from the server), and the next query works fine. I don't know why it happens to me and how to locate the problem. The Web service, works well, is checked with an application in VB, in the application VB does not fail. The connection to the network is good and does not fail.
Some idea?
In the code you will see that I use the <avr / wdt.h> to fix if the program does not respond and thus reset it, but it is not a good solution !!!
I'm running it on an Arduino Mega 2560 R3 and an Ethernet shild, I'm running out of memory !!! The connection to the network is by cable.
Thank you and forgive the inconvenience.
#include<Ethernet.h>
#include<SPI.h>
#include"RestClient.h"
#include<avr/wdt.h>// Control de prenjades.
RestClient client = RestClient("dades.yyyyyyyy.cat");
int idSonda = 1012; // Id de la Sonda, cada sonda ha de portar un Id Unicaint OpenClose = 0; // Aquest var indicarà si hem d'obrir el relé o no 0=No 1=Siint TempsEntreLectures = 1; // Si son Portes son segons, si son sondes son minutsint OnOff = 0; // 0= no gravem 1=si gravemint TimeOpen = 500; // Temps que tindrem el relé activat 1000 =1segonschar userMySQL[] = "yyyyyyyy"; // MySQL user login usernamechar passwordMySQL[] = "xxxxxx"; // MySQL user login passwordvoidsetup()
{
//Autoresetwdt_enable(WDTO_8S); //8segons es el màxim !!!//Fi autorreset
Serial.begin(9600);
Serial.println();
Serial.println("Iniciant SETUP...");
ActivarRele(0); //Assegurem que el relé està tancat amb un 0.
Serial.print("Idsonda:"); Serial.println(idSonda);
wdt_reset();
Serial.println("Connectant a la xarxa...");
client.dhcp();
wdt_reset();
LlegirMySQL();
wdt_reset();
Serial.println("Fi SETUP");
Serial.println("*****************");
delay(1000);
}
voidloop()
{
wdt_reset();
LlegirMySQL();
wdt_reset();
wdt_reset();
if (OpenClose == 1)
{
//Canvia l'estat del relewdt_reset();
ActivarRele(1); //Activem el relé amb 1. wdt_reset();
if (OnOff == 1)
{
ActualitzaMySQL(idSonda, "Pt", 0); //Canviem l'estat del relé a la BD --> idsonda, tipus de sonda, valor a gravar wdt_reset();
RegistreMySQL(idSonda, "Pt", 0); //Creem registre de tracevilitat.
}
}
wdt_disable();
// Temps que esperem entre captura i captura, en minuts-------------------- Esperem (TempsEntreLectures); //esperem 1, 10 minut,...// Fi espera entre dades--------------------------------------------------- wdt_enable(WDTO_4S); //wdt_enable(WDTO_8S);
}
//PUT actualitzar registres dades a la taula de "sondes"voidActualitzaMySQL(int idSondaSQL, char IdTipusSondaSQL[], float ValorSQL)
{
int Control = 0 ;
String response;
char idSondaInsertat[6];
char ValorInsertar[6];
Serial.println(" -> Actualitzant dades al MySQL...");
dtostrf( idSondaSQL , 1, 0, idSondaInsertat); // zero decimalsdtostrf( ValorSQL , 1, 0, ValorInsertar); // dos decimalschar INSERT_POST[] = "/GesRegistresAPI/api/config/1001?";
char INSERT_BODY[] = "nomUsuari=yyyyyyyy&passwordUsuari=xxxxxx&idSonda=%s&OpenClose=%s&_method=PUT";
char query[128];
Repetim:
sprintf(query, INSERT_BODY,idSondaInsertat,ValorInsertar);
Serial.println(query);
//PUT
Serial.println(" -> PUT:");
response = "";
client.setHeader("Content-Type: application/x-www-form-urlencoded");
int statusCode = client.post(INSERT_POST, query, &response);
Serial.print("Status code from server: ");
Serial.println(statusCode);
if (statusCode != 200) Control++;
Serial.print("Response body from server: ");
Serial.println(response);
if ((statusCode != 200) && ( Control <3)) goto Repetim;
Serial.println("------------------");
delay(500);
}
//POSTvoidRegistreMySQL(int idSondaSQL, char IdTipusSondaSQL[], float ValorSQL)
//void RegistreMySQL()
{
int Control = 0;
String response;
char idSondaInsertat[6];
char ValorInsertar[6];
Serial.println(" -> Gravan registre nou al MySQL...");
dtostrf( idSondaSQL , 1, 0, idSondaInsertat); // zero decimalsdtostrf( ValorSQL , 1, 2, ValorInsertar); // dos decimalschar INSERT_POST[] = "/GesRegistresAPI/api/registres "; // <-- *** Línea modificada ***char INSERT_BODY[] = "nomUsuari=yyyyyyyy&passwordUsuari=xxxxxx&idSonda=%s&idTipusSonda=%s&valor=%s"; // <-- *** Línea añadida ***char query[128];
Repetim:
sprintf(query, INSERT_BODY, idSondaInsertat, "Pt", ValorInsertar);
Serial.println(query);
//POST
Serial.println(" -> POST:");
response = "";
client.setHeader("Content-Type: application/x-www-form-urlencoded");
int statusCode = client.post(INSERT_POST, query, &response);
Serial.print("Status code from server: ");
Serial.println(statusCode);
if (statusCode != 200) Control++;
Serial.print("Response body from server: ");
Serial.println(response);
if ((statusCode != 200) && ( Control <3)) goto Repetim;
Serial.println("------------------");
delay(500);
}
//GETvoidLlegirMySQL()
{
int Control = 0;
char *s;
char *strings[10];
String response;
char SELECT_GET[] = "/GesRegistresAPI/api/config?nomUsuari=yyyyyyyy&passwordUsuari=xxxxxx&idSonda=%s";
char query[128];
Serial.println(" -> Llegint dades del MySQL...");
char idSonaInsertat[6];
dtostrf( idSonda, 1, 0, idSonaInsertat); // zero decimals sprintf(query, SELECT_GET, idSonaInsertat);
Repetim:
Serial.println(query);
Serial.println(" -> GET:");
response = "";
client.setHeader("Content-Type: application/x-www-form-urlencoded");
//int statusCodeGet = client.get("/GesRegistresAPI/api/config?nomUsuari=yyyyyyyy&passwordUsuari=xxxxxx&idSonda=1002", &response);int statusCodeGet = client.get(query, &response);
Serial.print("Status code from server: ");
Serial.println(statusCodeGet); //si es 200 es que ha retornar dades correctamentif (statusCodeGet != 200) Control++;
if (statusCodeGet==200)
{
Serial.println("Lectura correcte, les dades son: ");
// "idSonda""idClient""AlarmaMinima""AlarmaMaxima""Data""idTipusSondes""Calibratge""Periode""OnOff""OpenClose""TimeOpne"// 1012;1001;0;0;2021-05-20 00:00:00;Pt;0;20;1;0;1000
Serial.println(response);
s = strtok(response.c_str(), ";");
intindex=0;
while (s!=NULL)
{
strings[index]= s;
s=strtok(NULL, ";");
index++;
}
for(int n = 0; n <= index; n++)
{
Serial.print(n);Serial.print("-->");Serial.println(strings[n]);
if (n==7) TempsEntreLectures = atol(strings[n]); //Temps entre lecturesif (n==8) OnOff = atol(strings[n]); //Grabem les dades 1=SI i 0=NOif (n==9) OpenClose = atol(strings[n]); //Obrir porta 1=SI i 0=NOif (n==10) TimeOpen = atol(strings[n]); //Temps que tindrem el relé clavatif (TimeOpen >3000 ) TimeOpen = 3000; //Maxim temps 3 segons
}
// Mostra els resultats
Serial.println("------------------------------------");
Serial.print(" -> Temps entre lectures = ");
Serial.println(TempsEntreLectures);
Serial.print(" -> OnOff = ");
Serial.println(OnOff);
Serial.print(" -> OpenClose = ");
Serial.println(OpenClose);
Serial.print(" -> TimeOpen = ");
Serial.println(TimeOpen);
//Fi Calibratge
}
else
{
Serial.println("Error al llegir les dades.");
if ((statusCodeGet != 200) && ( Control <3)) goto Repetim;
}
Serial.println("------------------------------------");
delay(500);
}
voidActivarRele(int Valor) // ha de ser 0 o 1
{
int pin = 9; //Pin digital 9
Serial.println(" -> Rele:");
Serial.println(" HIGH");
if (Valor == 0) digitalWrite(pin, LOW); // poner el Pin en LOW if (Valor == 1) digitalWrite(pin, HIGH); // poner el Pin en HIGH wdt_reset();
delay(TimeOpen); // manetenim el relé clavat wdt_reset();
Serial.println(" LOW");
digitalWrite(pin, LOW); // poner el Pin en LOW sempre acava en "0"
}
// Funció temps d'espera entre captura de dades, en minuts-------------------voidEsperem (int minuts)
{
Serial.print(" -> Esperant (minuts) :");
Serial.print( minuts);
Serial.print("");
for (int a=0; a<minuts; a++)
{
delay(1000); //60000 es un minut si son sondes 60000 pq son minuts. Si son portes, segons i posem 1000
Serial.print(".");
}
Serial.println ("");
}
// Fi funció temps d'espera--------------------------------------------------
The text was updated successfully, but these errors were encountered:
Good afternoon. I have a problem using the RestClient.h library. I don’t know if it’s the right place to expose my problem.
I reported the problem to the Arduino forum but I have no answer (https://forum.arduino.cc/t/libreria-restclient-h-fallos-esporadicos-de-conexion/868293)
I have implemented a code, which using POST, GET, ... I consult data, modify records and add information to a database of a server through a web service.
I use the library "RestClient.h"
Everything works, but sometimes, many, too many, I do not get the confirmation data or the data consulted. I was able to do the query or update well three times in a row and fail the next two, I didn't respond (I don't receive any data from the server), and the next query works fine. I don't know why it happens to me and how to locate the problem. The Web service, works well, is checked with an application in VB, in the application VB does not fail. The connection to the network is good and does not fail.
Some idea?
In the code you will see that I use the <avr / wdt.h> to fix if the program does not respond and thus reset it, but it is not a good solution !!!
I'm running it on an Arduino Mega 2560 R3 and an Ethernet shild, I'm running out of memory !!! The connection to the network is by cable.
Thank you and forgive the inconvenience.
The text was updated successfully, but these errors were encountered: