Olá.
Estou com dificuldades em entender como poderia fazer para armazenar uma QUERY caso a conexão com o banco de dados seja interrompida.
Meu projeto consiste e salvar a cada 10 segundos um valor no banco, e caso a conexão com o banco de dados caia, esta query deve ser armazenada na fila para envio quando a rede retornar, criando assim uma fila pendente de envio.
Atualmente utilizo o código abaixo com a lib do ChuckBell.
#include <Ethernet.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server_addr(10, 0, 1, 35); // IP of the MySQL *server* here
char user[] = "****"; // MySQL user login username
char password[] = "****"; // MySQL user login password
int status_banco; // variavel que recebe status banco, 0 para nao disponivel e 1 para disponivel.
int maq, valor_1, valor_2, valor_3, valor_4; // valores int do insert
maq = 100;
unsigned long millisTarefa1 = millis();
//Analog Input
#define ANALOG_PIN_0 35
#define ANALOG_PIN_1 34
#define ANALOG_PIN_2 36
#define ANALOG_PIN_3 39
// Query de dados
char INSERT_SQL[] = "INSERT INTO banco.tab_registro (maq,valor_1,valor_2,valor_3,valor_4) VALUES ('%d','%d','%d','%d','%d')";
char query[512];
EthernetClient client;
MySQL_Connection conn((Client *)&client);
void setup()
{
Serial.begin(115200);
while (!Serial);
Ethernet.begin(mac_addr);
Serial.println("Connecting...");
func_conecta_banco();
}
void loop()
{
// funcao para verificar conexao com o banco de dados
func_conecta_banco();
// recebendo valores nas variáveis...
valor_1 = analogRead(ANALOG_PIN_0);
valor_2 = analogRead(ANALOG_PIN_1);
valor_3 = analogRead(ANALOG_PIN_2);
valor_4 = analogRead(ANALOG_PIN_3);
// millis para executar a cada 10s
if ((millis() - millisTarefa1) < 10000)
{
if (status_banco == 1) // se banco disponível...
{
func_salvar_dados(); // função que executa a query
}
if (status_banco == 0) // se banco indisponível...
{
// nesse ponto cria a fila de query para envio quando a conexao voltar.
}
}
}
void func_conecta_banco();
if (conn.connect(server_addr, 3306, user, password))
{
status_banco = 1;
delay(1000);
} else {
Serial.println("Connection failed.");
status_banco = 0;
}
void func_salvar_dados()
{
sprintf(query, INSERT_SQL, maq, valor_1, valor_2, valor_3, valor_4);
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
cur_mem->execute(query);
delete cur_mem;
}