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.");
}
Tags:
As respostas para este tópico estão encerradas.
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);
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por