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

Bom dia Rogerio.

Eu já consegui escrever os dois valores que coloquei no código só que ele fica jazendo isto sem parar a cada x segundos por causa do delay já estou com os sensores no arduino eles estão funcionando eu quero que esse valor só suba quando o sensor for acionado para cada sensor coloquei uma string para quando chegar no BD eu saiba qual sensor.

Estou travado ai

Obrigado pela ajuda.

falta o client.stop()

Blz..

Onde falta o client.stop() e como faço para a porta em questão ou as portas fazerem

client rodar e enviar o post por causa do sensor acionado.

Obrigado

coloca client.stop(); antes do delay(5000);

para fazer uma função do jeito que vc quer, vc tem q usar interrupções.

http://arduino.cc/en/Reference/attachInterrupt

Na alteração do status do sensor, pode por uma interrupçao para disparar uma função, ai nessa função vc programa para fazer o envio.

Te peço um pouco de paciência comigo eu demoro mais pego, sou novo na areá

Parte do código:

è assim somente no setup?


void setup()
{
Ethernet.begin(mac, ip);

pinMode(sensor1, INPUT);
// pinMode(pinoled5,OUTPUT);
digitalWrite(sensor1,HIGH);

attachInterrupt(0, blink, CHANGE);

pinMode(sensor2, INPUT);
// pinMode(pinoled7,OUTPUT);
digitalWrite(sensor2,HIGH);

attachInterrupt(0, blink, CHANGE);

Serial.begin(9600); //Apenas para a saída para que possamos ver se o seu trabalho
delay(1000);
}
void loop()
{

leitura=digitalRead(sensor1); //Verifica o status do Botao1

if (leitura == 0)
{
digitalWrite(sensor1,1);
txData += "&BUTTON=A"+ (String (leitura));
inserir(txData);
digitalWrite(sensor1,0);
}

leitura2=digitalRead(sensor2); //Verifica o status do Botao1

if (leitura2 == 1)
{
digitalWrite(sensor2,1);
txData1 += "&BUTTON=B"+ (String (leitura));
inserir(txData1);
digitalWrite(sensor2,0);
}

}
void inserir(String valor)
{
EthernetClient client;

if (client.connect("192.168.0.5",80))
{

client.print("POST /update/Update.php HTTP/1.1\n");

attachInterrupt(0, blink, CHANGE);  // pino 2

void blink() {

  Serial.println("Funcao executada");

}

sempre que o pino 2 do arduino uno for alterado de HIGH para LOW  ou Low para HIGH ele vai executar a função blink.

faça um teste ai p vc ver.

se for usar mais de uma interrupção faça isso

attachInterrupt(0, funcao_a_ser_executada, CHANGE);  // interrupção 0 é no pino 2

attachInterrupt(1, funcao_a_ser_executada, CHANGE);  // interrupção 1 é no pino 3


e cadê o client.stop()?

Ficaria assim ?

void setup()
{
Ethernet.begin(mac, ip);
attachInterrupt(0, blink, CHANGE);

attachInterrupt(1, blink, CHANGE);

pinMode(sensor1, INPUT);
digitalWrite(sensor1,HIGH);

pinMode(sensor2, INPUT);
digitalWrite(sensor2,HIGH);

Serial.begin(9600); //Apenas para a saída para que possamos ver se o seu trabalho
delay(1000);
}
void loop()
{

leitura=digitalRead(sensor1); //Verifica o status do Botao1

if (leitura == 0)
{
digitalWrite(sensor1,1);
txData += "&BUTTON=A"+ (String (leitura));
inserir(txData);
digitalWrite(sensor1,0);
}

leitura2=digitalRead(sensor2); //Verifica o status do Botao1

if (leitura2 == 1)
{
digitalWrite(sensor2,1);
txData1 += "&BUTTON=B"+ (String (leitura));
inserir(txData1);
digitalWrite(sensor2,0);
}

}

void blink()
{
txData += "&BUTTON=A"+ (String (leitura));
inserir(txData);

txData1 += "&BUTTON=B"+ (String (leitura));
inserir(txData1);
}


O meu stop coloquei aqui:

else
{
Serial.println("Connection Failed."); // Mais uma vez a série é para o gabarito.
Serial.println();
}
client.stop();
delay(5000); // este atraso foi para o meu teste para enviar um número a cada 5 segundos
}

 

Gente, adorei o conteúdo, parabéns

Galera estou tentando adaptar esse código de vocês para uma necessidade que tenho.

Pretendo gravar no banco de dados os dados obtidos por meio de um sensor de temperatura e Umidade DHT22.

Não estou conseguindo alguém pode me dar um help?

Dez de já agradeço.

diga onde está sua dificuldade, talvez eu possa te ajudar.
Sua dificuldade está na confecção do sketch pro arduino ou está na questão da programação de script (php ou asp, ou outro) para receber os dados do arduino e gravar no banco de dados?
ou será que vc não está sabendo dar o comando certo pra gravar os dados no banco de dados?
Que banco de dados está usando (dbase, mysql, etc)
Esse banco de dados está hospedado onde? na sua residência ou em servidor remoto? Qual sistema operacional está rodando no computador do banco de dados (linux, windows)?
essas perguntas todas são pra eu tentar entender melhor seu ambiente do projeto

Obrigado pela ajuda mais esta dificuldade ficou no passado de dezembro de 2014 onde apresentei meu TCC que foi um sucesso graças a Deus ate patentiei meu software.

Grato!

Hehehehe, estou tentando fazer algo parecido William, mas não se preocupe que pretendo plagiar seu software, apenas quero entender o funcionamento disso, OK?

e se estiver afim, pode entrar no assunto, seria bem vindo!

Obrigado!

Olá meu grande amigo imhugo, obrigado por me responder. Seguinte:

A minha maior dificuldade é fazer funcionar isso, hehehe. Estou usando o xampp e windows 8.1 IDE arduino 1.05. Configuração de sistemas não é o problema; o problema é fazer os dados do sensor aparecerem no php, para serem exibidos no browser e consequentemente salvar no banco a cada hora por exemplo e futuramente gerar relatórios com essas informações. Entendeu? 

eu entendi o Sketch e o php exemplo nesse tutorial, mas tem alguma coisa de errado na comunicação ente php e o arduino, pois o tipo de dado usado pela biblioteca do sensor DHT22 é do tipo char e do tipo DHT22 mesmo, acho que é isso.

vou postar o sketch já com o sensor incluso para vc analizar:

#include <SPI.h>
#include <Ethernet.h>
#include <DHT22.h>
#include <stdio.h>


int bstate = 0; // Esta é a variável que irá enviar, mas vai ser formatada como String first.
//String txData = ""; // Estes são os dados que serão enviados para a página PHP. Ela terá nomes e dados variáveis ??nele.
String txData1 ="s1";
String txData2 ="s2";
String txData3 ="s3";
String txData4 ="s4";
int sensor1 = 4;
int sensor2 = 5;
int sensor3 = 6;

#define DHT22_PIN 7
// Configurações de Rede Local
// Meu mac 90-A2-DA-0D-83-9D deve ser exclusivo na rede local
// (deve ser na parte traseira do ethernet shield)
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x83, 0x9D };
byte ip[] = { 192, 168, 2, 110 }; // Deve ser único na rede local
byte gateway[] = { 192, 168, 2, 1 }; // Deixei isso para consultas no caso de você precisar deles
byte subnet[] = { 255, 255, 255, 0 }; // Deixei isso para consultas no caso de você precisar deles
DHT22 sensor4(DHT22_PIN);

void setup()
{
Ethernet.begin(mac, ip);
// Mina funciona apenas com o mac e ip. Pode ser necessária Gateway e DNS
// Dependendo da configuração do roteador, você pode precisar
// referência ttp://arduino.cc/en/Reference/EthernetBegin
Serial.begin(9600); //Apenas para a saída para que possamos ver se o seu trabalho

pinMode(sensor1, INPUT);
pinMode(sensor2, INPUT);
pinMode(sensor3, INPUT);
//pinMode(sensor4, INPUT);
DHT22 sensor4(DHT22_PIN);

}
void loop()
{

DHT22_ERROR_t errorCode;
errorCode = sensor4.readData();

char buf_temperatura[128];
sprintf(buf_temperatura, "%hi.%01hi",
sensor4.getTemperatureCInt()/10, abs(sensor4.getTemperatureCInt()%10));

char buf_humidade[128];
sprintf(buf_humidade, "%i.%01i",
sensor4.getHumidityInt()/10, sensor4.getHumidityInt()%10);

//bstate++; // Isso só acrescenta um para a variável "bstate" cada vez através do loop. Eu só fiz isso para testes
// Eu vou enviar os dados como uma String. Eu li sobre alguns com dificuldades de enviar integers.g
// 'TxDados' é uma string que é enviada para a página PHP.

//txData = "BUTTON_STATE="+ (String (bstate));
txData1 = "BUTTON_STATE="+ (String (sensor1));
txData2 = "BUTTON_STATE="+ (String (sensor2));
txData3 = "BUTTON_STATE="+ (String (sensor3));
txData4 = "BUTTON_STATE="+ (String (buf_temperatura));
//txData = "BUTTON_STATE="+ (String (sensor1)) + "& BUTTON_STATE =" (String (sensor2)) + "& BUTTON_STATE =" (String (sensor3)) + "& BUTTON_STATE =" (String (sensor4));
// 'BUTTON_STATE' é a variável POST que a página PHP está procurando.
// O '+' coloca as partes de cordas juntos.
// '(String (bstate))' formatos 'bstate' a partir de um valor numérico para uma string.
// Múltiplas seria semelhante
// TxDados = "VARIABLE1 =" + (String (var1)) + "& variavel2 =" (String (var2));

EthernetClient client;
//("yourwebsite.com", 80) também pode ser, eu acho que um IP, (xxx.xxx.xxx.xxx, 80) ou
// você pode definir um 'servidor' variável como fizemos com 'ip' e 'mac'
// assim, 'server byte [] = {xxx, xxx, xxx, xxx}'
// então essa linha ficaria assim 'if (client.connect(server,80))'
if (client.connect("192.168.2.102",8080))
{
Serial.println("Conexao estabelecida..."); //Isso não é necessário, apenas para o gabarito
Serial.println();
// HERE IS THE MEAT AND GRAVEY = AQUI ESTÁ A CARNE E gravey
// O '/ update / update.php' é o diretório eo arquivo que você está enviando para
// se o arquivo está na raiz do domínio que seria apenas '/ update.php'

client.print("POST /arduino/M/IncludPHP.php HTTP/1.1\n");
// yourwebsite.com, domínio onde o arquivo php está hospedado
client.print("Host: 192.168.2.102\arduino/M\n");
client.print("Conexão: Fechada\n");

client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
// Lembre-se de nossa variável TxDados? Ele tem todas as informações que estamos enviando
// para a página PHP, 'update.php'. MAS, a página PHP precisa saber quantos caracteres
// estão vindo. Damos-lo usando "txData.length () '
client.print(txData4.length());
client.print("\n\n");
client.print(txData4); // after all of the required junk we send the data --depois de todo o lixo que nós necessário enviar os dados
}
else
{
Serial.println("Falha na conexão."); // Mais uma vez a série é para o gabarito.
Serial.println();
}
delay(5000); // este atraso foi para o meu teste para enviar um número a cada 5 segundos
}

Deveria funcionar, pois o php está como o do tutorial

Ele gera o arquivo de log mas não envia os dados, entendeu?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço