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();
}
Tags:
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?
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por