Bom dia.

Preciso de ajuda para fazer com que o Arduino me envie um POST ou GET para o PHP que vai popular o Banco MYSQL'.Já fiz varios testes e nada até agora.

Estou usando:

Arduino uno;

Ethernet Shield;

E estou usando o WAMPSERVER onde estam os arquivos .PHP e o BANCO MYSQL

Obrigado!!!

Exibições: 5709

Responder esta

Respostas a este tópico

não entendi, vc precisa ser mais claro onde está o problema. Veja os passos que deverão ocorrer nesse processo todo:

1) a informação gerada pelos sensores são processadas dentro do sketch

2) o sketch, através do "modo ethernet client" precisa acessar um script PHP

3) existe basicamente 2 formas de fazer o arduino transmitir informações ao script PHP: método GET ou método POST

4) já vi que vc optou pelo método POST no sketch que postou, agora precisamos ver como é seu arquivo PHP, pois esse script PHP precisará receber os dados vindos através de POST e tratar os dados, separar se for o caso, e após fazer todo o tratamento, deverá gravar a informação no banco de dados

Quando vc fala que "gera arquivo de log", de que arquivo de log vc se refere?

quando vc fala que "não envia os dados", em qual parte do processo os dados que são enviados não estão chegando? É do arduino pro PHP ou é do PHP pro banco de dados?

Ok imhugo.

Eu estou tentando gravar um log, só para testar se está funcionando. Agora pouco testei o sensor mandando imprimir no Serial Monitor só para ver se o sensor ta beleza, ta ok o sensor.

Usei o mesmo script PHP que está no início desse tutorial, mas aqui vai uma cópia: 

<?php
include_once("log.php");
//Pega o valor da sua variavel button_state
$button_state = $_POST['BUTTON_STATE'];
//Grava o log com a mensagem do valor recebido
$log_ok = gravaLog("Recebi o valor $button_state");
if(!$log_ok){
die("Nao foi possivel gravar o log");
}
?>

O outro arquivo que está chamando no "include_once" é esse:

<?php

function gravaLog($mensagem){
/*
* Vamos abrir um arquivo para escrita ou adicao
* ao fim do arquivo caso ele ja exista
*/
$fp = fopen("eventos.log", "w+");

/*
* Se nao for criado o ponteiro para o arquivo, saia e retorne falso
* Aqui se você quiser lancar uma exceção ou encerrar a execucao com um die
* tudo bem. Mas eu deixo assim para tratar esse caso fora da funcao.
*/
if(!$fp){
return false;
}

/*
* Pra manter o padrao de log, a data e a hora no
* formato ISO-8601 (Ano-mes-dia Horas:minutos:segundos)
*/
$data_hora = date("d/m/Y H:i:s");
//A Linha de log: data_hora [tab]mensagem
$linha_log = sprintf("[%s]\t%s\n", $data_hora, $mensagem);
//Guarda o numero de bytes escritos no arquivo durante a operacao
$bytes_escritos = fwrite($fp, $linha_log, strlen($linha_log));
//Fecha o arquivo
fclose($fp);
/*
* Se o numero de bytes escritos for maior que zero, o arquivo
* foi gravado. Entao tivemos sucesso. Retorne true
*/
if($bytes_escritos > 0){
return true;
}else{
//Senao, retorne false
return false;
}
}
?>

Assim ele gera o LOG escrevendo o dados recebido pelo sensor, como você pode observar na mensagem "echo"

estou conseguindo conexão com o servidor e acessando o arquivo "IncludPHP.php" dentro de localhost:8080/arduino/M/IncludPHP.php

O problema deve estar no sketch na parte das variáveis do sensor pois o dht22 usa um tipo um tipo próprio de variável, observe na linha :

DHT22 sensor4(DHT22_PIN);

não é do tipo "char" nem "int" nem "string", eu acho que deve ser por isso que está dando o problema.

Obrigado!

Blz  foi um sucesso nosso TCC 

Ao Marcio A. Pinheiro (não teve como continuar abaixo da sua mensagem, por isso tive que reiniciar):

as coisa começaram a clarear. Já que vc desconfia que o sketch que possui problema, então agora te sugiro "debugar" vários locais pra tentar achar onde está o problema:

* no sketch, tente enviar uma constante que vc mesmo cria. Esqueça por hora o sensor. Por exemplo, mande o sketch enviar essa constante:

//txData1 = "BUTTON_STATE=" + (String (sensor1));
//txData2 = "BUTTON_STATE=" + (String (sensor2));
//txData3 = "BUTTON_STATE=" + (String (sensor3));
//txData4 = "BUTTON_STATE=" + (String (buf_temperatura));

txData4 = "BUTTON_STATE=20";

dessa forma, vc perceberá se o problema está na parte que faz a conexão com o script PHP ou se o problema está antes

** se funcionar, o teste acima parta agora pra imprimir no seu serial monitor aquilo que deveria ser enviado ao script PHP. Por exemplo assim:

txData4 = "BUTTON_STATE=" + (String (buf_temperatura));

Serial.println(txData4);

Veja se realmente a variável txData4 recebe e monta a string corretamente da maneira esperada.

Se aparecer o texto corretante, no formato "BUTTON_STATE=XXX", então o problema não está no sensor ou na geração da string de envio

faça esses testes e diga o que obteve

Grande imhugo obrigado pela ajuda!

De fato, o problema está na conexão, pois o primeiro teste não deu certo, ele não enviou nada para o php, mas quando fiz o segundo teste usando o serial monitor, ele está imprimindo certinho a informação.

Então agora vamos ver a conexão com o php, como podemos testar, pois no serial monitor eu testo se realizou a conexão, e de fato ele realiza, mas como não envia os dados?

Se conseguir observar onde está o erro então me avise. Eu lhe agradeceria muito.

Obrigado!

e o nome dos arquivos? estão sendo referenciados corretamente? checou  se  o caminho (path)  onde o script php foi posto está devidamente identificado no sketch? 

agora vc precisaria monitorar o acesso ao servidor apache.  Não tenho experiência com xamp pra windows pra te dizer exatamente onde ficam os logs,  mas vc vai  precisar encontrar os logs pra tentar perceber se a conexão do arduino está ao menos chegando,  além de perceber também se há erro na requisição ou no script php.  o apache registra em log qualquer requisição entrante (conexão),  bem como erros.  

vc dá conta de montar um formulario html pra simular o envio pro script php da informação BUTTON_STATE=XXX através do metodo post? esse seria outro teste pra debugar seu projeto,  pois assim vc conseguirá perceber se há problema com o script php

obrigado mais uma vez imhugo.

Verifiquei os logs do php e de fato tem um erro de log persistente dez do inicio dos testes.

Eu inclusive troquei o caminho e o nome dos arquivos, mas obviamente não era isso.

Observe o log de erro do php:

[07-Mar-2015 10:11:19 America/Sao_Paulo] PHP Notice:  Undefined index: BUTTON_STATE in C:\xampp\htdocs\arduino\teste.php on line 9

Adivinha, na linha 9 é justamente onde é feita a requisição $_POST, observe:

$button_state = $_POST['BUTTON_STATE'];

já no apache no arquivo access.log observei esse log: 

192.168.2.110 - - [06/Mar/2015:22:20:41 -0300] "POST /arduino/teste.php HTTP/1.1" 200 449 "-" "-"

 

[07-Mar-2015 10:11:19 America/Sao_Paulo] PHP Notice:  Undefined index: BUTTON_STATE in C:\xampp\htdocs\arduino\teste.php on line 9

Isso está dizendo que a variável BUTTON_STATE não chegou ao script. Em outras palavras, o script teste.php não detectou nenhum POST que possuísse o nome BUTTON_STATE

Ali no sketch do arduino, faça exibir no serial monitor o "txData4". Gostaria de ver o que está sendo enviado pro script

Veja que no serial está aparecendo direitinho os dados do sensor,

a variável BUTTOM_STATE está exibindo os dados de temperatura

Veja agora o log access.log do apache:

[07/Mar/2015:11:34:09 -0300] "GET /arduino/teste.php HTTP/1.1" 200 22 "http://localhost:8080/arduino/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36"

Não teria que aparecer POST no lugar de GET?

Já o Log de erro do php ainda continua:

Undefined index: BUTTON_STATE in C:\xampp\htdocs\arduino\teste.php on line 9

corrija para ficar assim:

client.print("Host: 192.168.2.102\n");

use ponto, e não vírgula

fora isso, o seguinte log de acesso não condiz com uma conexão do arduino:

[07/Mar/2015:11:34:09 -0300] "GET /arduino/teste.php HTTP/1.1" 200 22 "http://localhost:8080/arduino/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36"

isso é uma requisão GET proveniente de browser google chrome. 

Veja mais ou menos como aparece no meu log de acesso de uma requisição POST vinda do arduino:

192.168.0.157 - - [07/Mar/2015:12:11:43 -0300] "POST /sites/intranet/testes/test-105.php HTTP/1.1" 200 5 "-" "-"

o IP 192.168.0.157 é o IP que eu designei pro arduino. E ali dá pra ver que chegou um acesso pelo método POST exatamente no caminho/arquivo que eu configurei no sketch

Ok veja meu LOG agora:

192.168.2.150 - - [07/Mar/2015:13:17:11 -0300] "POST arduino/teste.php HTTP/1.1" 400 984 "-" "-"

Está acessando normal agora, porem no php, ainda continua o erro de log:

Undefined index: BUTTON_STATE in C:\xampp\htdocs\arduino\teste.php on line 9

Acredito que seja esse o problema pelo qual não está escrevendo o dado do sensor no arquivo de log que criamos para testar

Cola teu sketch,  só a parte do ethernet client  que faz envio do post,  os tais do cliente.print

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço