Ola, estou utilizando um ethernet shield pra enviar os dados via ajax para um site, estou tendo dificuldade em criar um cron job pra pegar o valor da temperatura e salvar no bd. segue o codigo do arduino.


#include <SPI.h>
#include <Ethernet.h>
#include <Thermistor.h>

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

IPAddress ip(192,168,1,200);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);

EthernetServer server(1600);


const int analogPin2 = A1;
Thermistor temp(0);


int LUZ1 = 8; //rele 1 - luz sala
int sensor = 7; //sensor de movimento
int LUZ2 = 3; //rele 2 - horta
int acionamento; //Variavel para guardar valor do sensor


void setup()
{
Serial.begin(9600);
Serial.println("Iniciando programa..");
Ethernet.begin(mac,ip,gateway,subnet);
Serial.println("Server ativo no IP: ");
Serial.print(Ethernet.localIP());
server.begin();

pinMode(LUZ1, OUTPUT);
pinMode(LUZ2, OUTPUT);
digitalWrite(LUZ1, HIGH);
digitalWrite(LUZ2, HIGH);
pinMode(sensor, INPUT);


}
void loop()

{

int temperature = temp.getTemp();
EthernetClient client = server.available();
if(client)
{
boolean continua = true;
String linha = "";

while(client.connected())
{
if(client.available()){
char c = client.read();
linha.concat(c);

if(c == '\n' && continua)
{
client.println("HTTP/1.1 200 OK");
// IMPORTANTE, ISSO FAZ O ARDUINO RECEBER REQUISIÇÃO AJAX DE OUTRO SERVIDOR E NÃO APENAS LOCAL.
client.println("Content-Type: text/javascript");
client.println("Access-Control-Allow-Origin: *");
client.println();

int iniciofrente = linha.indexOf("?");

if(iniciofrente>-1){ //verifica se o comando veio
iniciofrente = iniciofrente+6; //pega o caractere seguinte
int fimfrente = iniciofrente+3; //esse comando espero 3 caracteres
String acao = linha.substring(iniciofrente,fimfrente);//recupero o valor do comando


if ( acao == "001"){ digitalWrite(LUZ1, LOW); }
else if ( acao == "002"){ digitalWrite(LUZ1, HIGH);}

else if ( acao == "003"){ digitalWrite(LUZ2, LOW); }
else if ( acao == "004"){ digitalWrite(LUZ2, HIGH); }
else {}


client.print("dados({ sensor1 : ");
client.print(temperature);
client.print(", sensor2 : ");
client.print("56");
client.print(",");
client.print(" LUZ1 : ");
client.print(digitalRead(LUZ1));
client.print(",");
client.print(" LUZ2 : ");
client.print(digitalRead(LUZ2));
client.print("})");

}
break;
}
if(c == '\n') { continua = true; }
else if (c != '\r') { continua = false; }
}
}
delay(1);
client.stop();
}

Exibições: 601

Responder esta

Respostas a este tópico

amigo, cron job do linux é como se fosse um agendador de tarefas do windows, ou seja, serve para executar uma determinada tarefa num determinado horário.

Será que sua necessidade não estaria em criar uma API em php para intermediar a tarefa de gravar no BD as temperaturas informadas pelo arduino?
O cron job no caso seria uma tarefa agendada criada em PHP para ser executada no servidor, não estou conseguindo pegar a variável sensor e inseri-la no bd

Programe no seu sketch um trecho de código para funcionar como web client, onde esse código transmitirá os dados de temperatura pra um script php. Vc quem escolherá se fará isso por post ou por get

O script php deverá ser capaz de detectar chegada de dados via método post ou get

Uma vez chegando tais dados, sanitiza-se e faz-se inserção no BD

Em qual parte vc tem dificuldade?

Na verdade eu estou aprendendo PHP agora, eu tenho uma noção básica do Java, se fosse no Java eu criaria um método que recebesse os dados por parâmetro e insersse no BD, a dificuldade é como programaro Arduíno para enviar esses dados e como receber no PHP , a inserção eu consegui fazer.

pro arduino enviar esses dados, basta vc ver o exemplo que tem na IDE, localizada em ARQUIVOS / EXEMPLOS / ETHERNET / WEBCLIENT. Vc perceberá que esse sketch exemplo acessará o site google pelo método get para buscar pelo pelo termo "arduino", isto é, algo do tipo http://www.google.com/search?q=arduino 

Daí fica fácil vc adaptar essa técnica pro seu projeto. Ao invés de apontar pro google, basta apontar pro IP do servidor onde está seu arquivo php. E ao invés de usar o nome da variável "q", mude esse nome para algo mais confortável pra vc, como "temperatura". E ao invés de enviar o termo "arduino", basta enviar o valor da temperatura.  Algo do tipo: http://IPdoPHP/script.php?temperatura=27.5

Aí no lado do script php, crie um arquivo que seja capaz de interpretar o nome da variável GET. Verá que é algo do tipo $TemperaturaInformada = $_GET['temperatura']

Assim que o php tiver lido o valor da temperatura vinda do arduino, basta programar para gravar no banco de dados.

A idéia básica é essa. Mas vc precisa dar uma pesquisada na net pra ver certinho como se escreve o código php 

Valeu imhugo, ajudou muito, vou implementar aqui, já estou assistindo algumas vídeo aulas, sua dica já abriu o caminh, obg

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço