Go Down

Topic: Restart MySQL connection after connection Lost ESP8266 NODEMCU V3.0 (Read 198 times) previous topic - next topic

alkuentrus

Boas, tenho uma questão para partilhar convosco. Tenho este código a lançar uma informação directamente numa bd de MySql e funciona lindamente. A minha questão é a seguinte: Quando a base de dados se torna temporariamente indisponível, a ligação cai e é preciso ir ao local onde está o NODEMCU para o reiniciar. Alguém conhece bem a função MySql para me ajudar a fazer uma função de reconnect after connection lost?

Code: [Select]
#include <ESP8266WiFi.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

IPAddress server_addr(192,168,1,6);
char user[] = "user";              // MySQL user login username
char password[] = "pass";        // MySQL user login password
int registo = 0;
const int  buttonPin = 16;
char INSERT_SQL[] = "INSERT INTO cylinder (teste,plant)  VALUES ('1','1')"; // Sample query
char plant[] = "INSERT INTO cylinder (teste,plant)  VALUES ('0','1')";

 

// WiFi card example
char ssid[] = "alfa";         // your SSID
char pass[] = "";     // your SSID Password

WiFiClient client;                 // Use this for WiFi instead of EthernetClient
MySQL_Connection conn(&client);
MySQL_Cursor* cursor;

void setup()
{
  Serial.begin(115200);
  while (!Serial); // wait for serial port to connect. Needed for Leonardo only
  // Begin WiFi section
  Serial.printf("\nConnecting to %s", ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  // print out info about the connection:
IPAddress server_addr(192,168,1,6);
 
  Serial.print("My IP address is: ");
  Serial.println(WiFi.localIP());

  Serial.print("Connecting to SQL...  ");

   if (conn.connect(server_addr, 3306, user, password))
    Serial.println("OK.");
  else
    Serial.println("FAILED.");
 
  // create MySQL cursor object
  cursor = new MySQL_Cursor(&conn);
  pinMode(buttonPin, INPUT);
}

void loop()
{
int vapor = digitalRead(buttonPin);
if (vapor ==HIGH){
  registo++;
  Serial.print("Registo num:");
  Serial.println(registo);
  if (conn.connected())
   cursor->execute("use CCC");
   cursor->execute(INSERT_SQL);
   Serial.println(vapor);
   delay(10000);
   }
    else
   {
      registo++;
     Serial.print("Registo num:");
    Serial.println(registo);
   if (conn.connected())
   cursor->execute("use CCC");
   cursor->execute(plant);
   Serial.println("Sem vapor, plant ok");
   Serial.println(vapor);
 
   delay(10000);
   }
 
 }

Ibsilva

Sempre que preciso de mandar algo para o banco de dados faço um conn.connect()

alkuentrus

Aqui tmb é assim.... Tenho de meter a função connect dentro do loop. Diz-me um a coisa, pf, não é preciso fechar a ligação, no fim do ciclo? É que em PHP é preciso fazer isso. Será que as libs fazem isso?

Ibsilva

Penso que elas fazem isso, eu estou armazenando os dados do meu arduíno e só os envio após certo tempo pois a conexão leva cerca de 1~3 segundo, além disso, estou conectando o arduíno diretamente com o banco de dados, em uma versão anterior eu havia usado o método get pra acessar uma aplicação em PHP, funciona bem

alkuentrus

Confirmo, isso é feito automaticamente. Fiz a monitorização dos processos e eles vão-se matando um a um, bem cmo as respectivas ligações.

Go Up