Arduino conectando direto em servidor MySQL e enviando variáveis

Estou com dificuldades de enviar variaveis para o mysql

Ja consigo conectar e enviar strings simples mas as variáveis não vão !

#include <Ethernet.h> // Inclui biblioteca para Ethernet Shield (HanRun HR911195A 16/02)
// Define MacAddress, IP, Mascara de sub-rede e Gateway da placa de rede
byte mac = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Define o Mac Address
byte ip = { 10, 1, 140, 57 }; // Define o IP
byte subnet = {255, 255, 252, 0}; // Define a máscara de rede
byte gateway = {10, 1,143, 254}; // Define o gateway

#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#include <SPI.h>

#include “DHT.h” // Inclui biblioteca para Sensor de umidade e temperatura
#define DHTPIN A1 // Define porta analogica para sensor DHT.11
#define DHTTYPE DHT11 // Define o modelo do sensor (DHT 11)
DHT dht(DHTPIN, DHTTYPE); // Ativa o sensor de acordo com as
// configuracoes acima

IPAddress server_addr(10,1,140,54); // Define o Servidor de Banco de dados
char user = “sistema”; // Define o usuario do Banco de Dados
char password = “123456”; // Define a senha do usuario

char BANCO_DE_DADOS = “USE controle_temperatura”;

EthernetClient client;
MySQL_Connection conn((Client *)&client);

void setup()
{
Serial.begin(9600);
while (!Serial);

Ethernet.begin(mac, ip, subnet, gateway);
Serial.println(“Ativando IP do Arduino”);
delay(1000); // espera por 1 segundo

dht.begin();
Serial.println(“Sensor DHT11 iniciado!”);
Serial.println("");
delay(1000); // espera por 1 segundo

if (conn.connect(server_addr, 3306, user, password))
{
Serial.println(“Conectando ao Servidor de Banco de Dados”);

MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
cur_mem->execute(BANCO_DE_DADOS);
delete cur_mem;
}
else
{
Serial.println(“A conexão com o Banco de Dados falhou”);
conn.close();
}
}

void loop()
{

int umidade_medida = dht.readHumidity();
// char umid = %umidade_medida ;
int temperatura_medida = dht.readTemperature();
// char temp = %temperatura_medida ;

Serial.print(“Umidade: “);
Serial.print(umidade_medida);
//Serial.print(umid);
Serial.print(” - Temperatura: “);
Serial.print(temperatura_medida);
//Serial.print(temp);
Serial.println(” *C”);

Serial.println(“Executando sentença MySql”);
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);

char INSERIR_DADOS = “INSERT INTO registro_dados (cod_leitor, temperatura, umidade) VALUES (‘345’, $temperatura_medida, $umidade_medida”;

cur_mem->execute(INSERIR_DADOS);
Serial.println(“Dados gravados.”);

delete cur_mem;

delay(60000);
}

Você declara e define a string:

char INSERIR_DADOS[] = "INSERT INTO registro_dados (cod_leitor, temperatura, umidade) VALUES ('345', $temperatura_medida, $umidade_medida";

Porém os valores das variáveis não são inseridas nesta string.

Usar $temperatura_medida e $umidade_medida não faz com que sejam inseridos os valores das variáveis na string, a linguagem C/C++ não possui esse recurso.

Utilize a função snprintf_P, que serve para formatar strings, e conseguirá o que quer :

char INSERIR_DADOS[256]; // 256 = valor arbitrario, use uma quantidade que garanta que o texto (conteudo) nunca ira passar deste comprimento
snprintf_P(INSERIR_DADOS,sizeof(INSERIR_DADOS),PSTR("INSERT INTO registro_dados (cod_leitor, temperatura, umidade) VALUES ('345', %d, %d)"),temperatura_medida,umidade_medida);

Código alterado completo para facilitar:

#include <Ethernet.h> // Inclui biblioteca para Ethernet Shield (HanRun HR911195A 16/02)
  // Define MacAddress, IP, Mascara de sub-rede e Gateway da placa de rede
  byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  // Define o Mac Address
  byte ip[] = { 10, 1, 140, 57 };                       // Define o IP
  byte subnet[] = {255, 255, 252, 0};                   // Define a máscara de rede
  byte gateway[] = {10, 1,143, 254};                    // Define o gateway

#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#include <SPI.h>

#include "DHT.h" // Inclui biblioteca para Sensor de umidade e temperatura
  #define DHTPIN A1 // Define porta analogica para sensor DHT.11
  #define DHTTYPE DHT11 // Define o modelo do sensor (DHT 11)
  DHT dht(DHTPIN, DHTTYPE); // Ativa o sensor de acordo com as
                            // configuracoes acima


 
IPAddress server_addr(10,1,140,54);  // Define o Servidor de Banco de dados
char user[] = "sistema";             // Define o usuario do Banco de Dados
char password[] = "123456";          // Define a senha do usuario
 
char BANCO_DE_DADOS[] = "USE controle_temperatura";
 
EthernetClient client;
MySQL_Connection conn((Client *)&client);
 
void setup()
{
   Serial.begin(9600);
   while (!Serial);
   
   Ethernet.begin(mac, ip, subnet, gateway);
   Serial.println("Ativando IP do Arduino");
   delay(1000);   // espera por 1 segundo

   dht.begin();
   Serial.println("Sensor DHT11 iniciado!");
   Serial.println("");
   delay(1000);   // espera por 1 segundo
   
   if (conn.connect(server_addr, 3306, user, password))
      {
      Serial.println("Conectando ao Servidor de Banco de Dados");

      MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
      cur_mem->execute(BANCO_DE_DADOS);
      delete cur_mem;
      }
   else
      {
      Serial.println("A conexão com o Banco de Dados falhou");
      conn.close();
      }
}
 
 
void loop()
{
 
   int umidade_medida = dht.readHumidity();
  // char umid[] = %umidade_medida ;
   int temperatura_medida = dht.readTemperature();
  // char temp[] = %temperatura_medida ;
   
      Serial.print("Umidade: ");
      Serial.print(umidade_medida);
      //Serial.print(umid);
      Serial.print(" - Temperatura: ");
      Serial.print(temperatura_medida);
      //Serial.print(temp);
      Serial.println(" *C");

   

   Serial.println("Executando sentença MySql");
   MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);

 
   char INSERIR_DADOS[256]; // 256 = valor arbitrario, use uma quantidade que garanta que o texto (conteudo) nunca ira passar deste comprimento
   snprintf_P(INSERIR_DADOS,sizeof(INSERIR_DADOS),PSTR("INSERT INTO registro_dados (cod_leitor, temperatura, umidade) VALUES ('345', %d, %d)"),temperatura_medida,umidade_medida);
     
   cur_mem->execute(INSERIR_DADOS);
   Serial.println("Dados gravados.");
   
   delete cur_mem;
 
   delay(60000);
}