Pessoal, realizei a conexão com o BD através da lib. em questão.

A conexão esta sendo realizada normalmente, porém, o valor de leitura (umidade e temperatura) esta salvando zero no BD.

No serial monitor a leitura é informada corretamente.

Obs: Estou utilizando o Ethernet Wiznet W5100 e sensor de temperatura e umidade DHT11

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

#include "DHT.h"
#define DHTPIN A2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

IPAddress server_addr(xxx, xxx, x, xxx);
IPAddress ip(xxx, xxx, x, xxx);
IPAddress subnet(xxx, xxx, x, x);


char user[] = "meuusuario";
char password[] = "senha";

char INSERT_SQL[] = "INSERT INTO tcc.sensor (humidity, temperature) VALUES (humidity, temperature)";

EthernetClient client;

MySQL_Connection conn((Client *)&client);

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

}

void loop() {

float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
float f = dht.readTemperature(true);

if (isnan(humidity) || isnan(temperature) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}

Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C ");

Ethernet.begin(mac_addr, ip);

Serial.println("Connecting...");

if (conn.connect(server_addr, 3306, user, password)) {
delay(1000);
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
//sprintf(INSERT_SQL);

cur_mem->execute(INSERT_SQL);

delete cur_mem;

Serial.println("Data recorded.");
}
else
Serial.println("Connection failed.");

}

Exibições: 1515

As respostas para este tópico estão encerradas.

Respostas a este tópico

Boa noite,

float = humidity dht.readHumidity(); não seria: float humidity = dht.readHumidity(); ?

Boa noite,

Me desculpe, postei errado o código.

Vi que editou o código. Está funcionando agora?

Ainda não. Como mencionei, a leitura no Arduino (serial monitor) é realizada com sucesso. 

O problema ocorre que ao gravar no banco, esta salvando valor 0.

"tcc" é o nome do banco e "sensor" o nome da tabela? na tabela tem as colunas "humidity" e "temperature"? são tipo "numeric 9,2" ou algo parecido?

Sim. Esta da seguinte forma:

CREATE TABLE tcc.sensor{

num integer primary key auto_increment,

humidity VARCHAR,

temperature VARCHAR,

recorded timestamp

};

Tenta mudar pra essa linha: 

char INSERT_SQL[] = "INSERT INTO tcc.sensor (humidity, temperature) VALUES ('%s', '%s')";

Depois dentro do loop coloca só isso:

float h = dht.readHumidity();

float t = dht.readTemperature();

Serial.println("Recording data...");

MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);

dtostrf(t, 1, 1, temperatura);

dtostrf(h, 1, 1, humidade);

sprintf(query, INSERT_SQL, temperatura, humidade);

cur_mem->execute(query);

delete cur_mem;

delay(5000);

Fiz as alterações como sugeriu, mas agora não grava nada no BD.

Tenta aquelas alterações em outra tabela onde os campos seriam numeric 9,2.

CREATE DATABASE tcc2;

CREATE TABLE tcc2.sensor{

num integer primary key auto_increment,

humidity NUMERIC(9,2),

temperature NUMERIC(9,2),

recorded timestamp

};

Não esquece de alterar o nome do banco no código.

___________________________________________________________

Pode testar também fixando valores, por exemplo: 

char INSERT_SQL[] = "INSERT INTO tcc.sensor(humidity, temperature) VALUES (16.11,51.22)";

cur_mem->execute(INSERT_SQL);

Comenta o restante do código e vê se grava valores.

Fiz todas as alterações que recomendou. 

Com valores fixados esta gravando corretamente. O problema ocorre na leitura em tempo real (temperatura e umidade), os campos são gravados NULL no banco, mesmo alterando o BD.

É necessário fazer alguma conversão, ou algo do tipo?

Olá michele,

Creio que tenha que converter os valores numéricos para String antes de enviar.

Vejo que foi sugerido usar a função dtostrf();

Mas faltou declarar as variáveis:

char temperatura [10];
char humidade [10];

Creio que foi por isso que retornou NULL na query.

  'Eiju

dtostrf seria pra converter.

muda essa linha pela tua:

char INSERT_SQL[] = "INSERT INTO tcc.sensor (humidity, temperature) VALUES ('%s', '%s')";

confirma se tem isso logo abaixo dela:

char query[128];
char temperatura[10];
char humidade[10];

e coloca esse trecho no loop:

float h = dht.readHumidity();

float t = dht.readTemperature();

Serial.println("Recording data...");

MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);

dtostrf(t, 1, 1, temperatura);

dtostrf(h, 1, 1, humidade);

sprintf(query, INSERT_SQL, temperatura, humidade);

cur_mem->execute(query);

delete cur_mem;

delay(5000);

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço