Olá Pessoal,
Pesquisei bastante aqui no fórum e até encontrei algumas referencias que funcionaram, mas não trouxeram o valor corretamente.
Estou desenvolvendo uma aplicação, que um usuário vai digitar um valor num KEYPAD, ele será enviado para uma página PHP que vai trazer um retorno, uma frase ou um valor.
Até o envio está funcionando, e eu sei porque fiz o teste gravando no banco de dados, porém não consigo pegar qualquer informação do PHP ou do banco de dados.
Tentei utilizar a biblioteca do mysql.h direto para fazer a conexão, mas meu banco de dados fica online e não é o único, então não consegui fazer funcionar.
Vou postar meus códigos aqui, inclusive com os textos comentados (que não estão rodando) porque estou tentando descobrir a maneira correta, e colocarei também o PHP.
Arduino:
#include <Ethernet.h> //Biblioteca para função de Ethernet
#include <Client.h> //Biblioteca para função de Cliente
#include <SPI.h> //Biblioteca para função do EthernetShield W5100
#include <mysql.h>
#include <sha1.h>
uint8_t hwaddr[6] = {0x90, 0xA2, 0xDA, 0x0F, 0x89, 0x98};
uint8_t ipaddr[4] = {192, 168, 0, 254}; // Endereço de IP do arduino (vai depender do seu gateway)
uint8_t gwaddr[4] = {192, 168, 0, 1}; // Endereço de IO do seu Gateway (Não necessario para este Exemplo)
uint8_t subnet[4] = {255, 255, 255, 0};// mascara da rede (Não necessario para este Exemplo)
IPAddress serverip(xxx, 154, 225, xxx);
int serverport = 80;
EthernetClient client;
/***********************/
const int ledPin = 13; // the pin connected to the LED to flash
const int sensorPin = 0; // the analog pin connected to the sensor
const long referenceMv = 5000; // long int to prevent overflow when multiplied
int val = analogRead(sensorPin);
int mV = (val * referenceMv) / 1023;
int cm = getDistance(mV);
/****************************** MYSQL */
//IPAddress server_addr(xxx, 154, 225, xxx);
char user[] = "xxxxxxx"; //usuário do BD
char password[] = "xxxxxxx"; //senha do BD
Connector my_conn;
/***************************************************/
void setup(void)// setup função que é iniciada quando o arduino é ligado (Executa 1 vez)
{
//Inicia a Serial
Serial.begin(9600);
Serial.println("Iniciando Ethernet");
Ethernet. begin(hwaddr, ipaddr);// inicia a ethernet
}
/**********************************************/
const int TABLE_ENTRIES = 12;
const int firstElement = 250; // first entry is 250 mV
const int INTERVAL = 250; // millivolts between each element
static int distance[TABLE_ENTRIES] = {150,140,130,100,60,50,40,35,30,25,20,15};
/**********************************************/
void loop(){
int val = analogRead(sensorPin);
int mV = (val * referenceMv) / 1023;
int cm = getDistance(mV);
Serial.print("Estabelecendo conexao com o Servidor. | ");
Serial.print(cm);
Serial.println();
//Tenta estabelecer a conexão senão envia o erro client.connect(ip do servidor, porta do servidor)
if(client.connect(serverip, serverport)){
char cli;
//Envia a URL + os parametros para o servidor
Serial.println("Enviado dados para o Servidor: ");
client.print("GET /~gelit/arduino/insere.php?distancia=");
Serial.print("GET /~gelit/arduino/insere.php?distancia=");
client.print(cm);
Serial.print(cm);
Serial.println();
client.println(" HTTP/1.1"); //script padrão para o protocolo HTTP
Serial.println(" HTTP/1.1"); //
client.println("Host: www.grupoelit.com"); //
Serial.println("Host: www.grupoelit.com"); //
client.println("User-Agent: Arduino"); //
Serial.println("User-Agent: Arduino"); //
client.println("Accept: text/html"); //
Serial.println("Accept: text/html"); //
if(client.available()){
Serial.println(client.read());
Serial.println("^-- Read | Read--v");
Serial.println(client.available());
}
/**************************************
unsigned long now = millis();
Serial.println("testa timeout");
while ((cli = client.available()) <= 0) {
if (millis() - now >= 1000) { //um segundo para teste... isto é demasiado, mas por agora terá de servir.
Serial.println("timed out");
break; //sai daqui para fora
} //end if
} //end while
//Serial.print(id); //replica para a Serial
while (client.available() >0) {
Serial.println(client.read()); //lê os dados enviados do servidor, nesse momento já deveria mostrar o que o servidor enviou
}
/**************************************/
client.println(); //
Serial.println();
/*
Serial.println("Conectando ao banco de dados...");
if (my_conn.mysql_connect(serverip, 3306, user, password)) {
delay(1000);
my_conn.cmd_query("mysql_select_db('gelit_arduino')");
my_conn.cmd_query("SELECT count(*) FROM tabela LIMIT 1");
my_conn.show_results();
}else
Serial.println("Connection failed.");
Serial.println();
/*
Serial.print("Registros: ");
Serial.print("GET /~gelit/arduino/conta.txt HTTP/1.0");
Serial.println();
*/
}else{
//Se a Conexão Falhar envia a informação de Erro para Serial
client.println("Erro ao Estabelecer Conexão");
}
if(client.connected() && client.available()) { // Quando a conexão é feita e está disponivel:
char c = client.read(); // Le a reposta do Servidor e imprime na tela
Serial.print(c);
}
Serial.println();
client.stop(); // termina a conexao
delay(10000); //delay de 10 segundos para recomeçar o loop
}
int getDistance(int mV)
{
if( mV > INTERVAL * TABLE_ENTRIES-1 )
return distance[TABLE_ENTRIES-1];
else
{
int index = mV / INTERVAL;
float frac = (mV % 250) / (float)INTERVAL;
return distance[index] - ((distance[index] - distance[index+1]) * frac);
}
}
PHP:
<?php
include('connect.php');
$distancia = $_GET['distancia'];
if($distancia){
$sql = "insert into tabela values (null, $distancia)";
$qry = mysql_query($sql);
$sql = "SELECT count(*) FROM tabela";
$res = mysql_query($sql);
$row = mysql_fetch_array($res);
echo $row[0];
}
?>
Espero que eu tenha sido claro no que eu preciso e quis expressar.
No momento, como é teste a aplicação não está usando o teclado, mas foi para simplificar um pouco, já que o outro código está 100%
Agradeço antecipadamente a todos que lerem e mais ainda aos que puderem contribuir.
Abraço.
XD