arduino + ethernet + rfid

Oi!
Estou com Arduino Uno R3 e EthernetShield.
Peguei um leitor RFID e cadastrei alguns cartões para fazer regras como acionar relés. Até aí tudo bem.

Mas eu preciso de um relatório, pra saber quem passou o cartão e quando. Sendo que essas informações devem ser enviadas pelo arduino pela internet.

Preciso de uma indicação de programa ou servidor ou algo assim para começar e queria saber como faço pro arduino mandar essas informações...

Mandar essas informacões para onde?
A internet é imensa... e sem saber para onde queres mandar nem o que é que está do outro lado à espera do que tu vais mandar é impossível de te dizer como o fazer.

Já deste uma olhada nos exemplos? Tens lá exemplos de cliente e servidor... o cliente envia algo para um servidor e o servidor responde a pedidos do clientes. Tenho a certeza absoluta que um destes exemplos serve para o que pretendes.

Podes usando uma ethernet shield fazer um post http para um PHP algures na web ou na tua rede local e armazenar numa bd MySQL.
Depois e so tratares os dados como quiseres.

bubulindo:
Mandar essas informacões para onde?
A internet é imensa... e sem saber para onde queres mandar nem o que é que está do outro lado à espera do que tu vais mandar é impossível de te dizer como o fazer.

Já deste uma olhada nos exemplos? Tens lá exemplos de cliente e servidor... o cliente envia algo para um servidor e o servidor responde a pedidos do clientes. Tenho a certeza absoluta que um destes exemplos serve para o que pretendes.

Então, a parte de cliente/server eu vi e fiz testes com os exemplos e mandei pra rede local, onde eu acesso o IP, passo o cartão e tenho o id do cartão rfid que estou passando naquele momento.

Estou com dificuldade pra entender como eu deixo isso salvo, por exemplo: se eu tenho uma empresa e no fim do dia quero ver quem entrou na empresa usando o cartão... como faço pra acessar os registros anteriores...?

HugoPT:
Podes usando uma ethernet shield fazer um post http para um PHP algures na web ou na tua rede local e armazenar numa bd MySQL.
Depois e so tratares os dados como quiseres.

Tenho alguns sistemas rodando na minha empresa que se comunicam enviando informações via xml.
Creio que eu tenha que "fazer" ou usar uma ferramenta que pegue os dados do arduino (rfid) e que vai registrando tudo em xml.
Ou pelo menos que envie para algum lugar, no caso acho que seria um servidor com bd MySQL.
Porem eu não sei como programar o arduino para enviar as informações para um servidor, nem sei preparar o servidor para receber (ou solicitar) essas informações...
Pode me dar uma luz? por onde começar?

Obrigado!

renan3mct:
Tenho alguns sistemas rodando na minha empresa que se comunicam enviando informações via xml.

Como eles se comunicam, via socket? usando a lan? Tens algum servidor web ou de dados? Como tens o internet shield e disseste que já testou a comunicação o resto é decidir como farás, se usando php, webservice, sockets, etc. És programador em qual linguagem? O problema parece ser mais a interface que se comunicará com o arduino do que o arduino ^^

Achei este exemplo interessante:

Na net tem muitos tutoriais, é questão de ler e decidir o que testar e o que melhor se adapta.

Aqui tens um exemplo de um php que te armazena data + hora de quando recebe o pedido.(assim nao necessitas de um RTC no arduino e passar essa informaçao do arduino para a BD) e podes passar outros parametros (Id do RFID).Assim ficas na BD com os dados de quem passou e a que data e hora passou.

<html>
<?php

$value = $_GET['value'];
   
//Get date and time
// Return date/time info of a timestamp; then format the output
$mydate=getdate(date("U"));
$timestamp = "$mydate[year]-$mydate[mon]-$mydate[mday] $mydate[hours]:$mydate[minutes]:$mydate[seconds]";
//echo $timestamp;
//-----------Setup Mysql Connection
  
$user = 'user';
$pass = 'pass';
$hostname = 'localhost';
$databaseName = 'rfidDB';
  
$linkSQL = mysqli_connect($hostname,$user,$pass,$databaseName);
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }  
//Construct the sql query and store it in a varaible 
//$sql="INSERT INTO user (name, value,date) VALUES('modem','$value','$timestamp')";
$sql="INSERT INTO user (name, value,date) VALUES('modem','$value','$timestamp')";
if (!mysqli_query($linkSQL,$sql))
{
die('Error: ' . mysqli_error($linkSQL));
} 
echo 'Sucesso'; 
mysqli_close($linkSQL);
?>
</html>

No lado do arduino basta implementares no codigo algo que abra o link e passe os valores

Mortis:

renan3mct:
Tenho alguns sistemas rodando na minha empresa que se comunicam enviando informações via xml.

Como eles se comunicam, via socket? usando a lan? Tens algum servidor web ou de dados? Como tens o internet shield e disseste que já testou a comunicação o resto é decidir como farás, se usando php, webservice, sockets, etc. És programador em qual linguagem? O problema parece ser mais a interface que se comunicará com o arduino do que o arduino ^^

Achei este exemplo interessante:
Chuck's Blog: Introducing MySQL Connector/Arduino

Na net tem muitos tutoriais, é questão de ler e decidir o que testar e o que melhor se adapta.

Então, eu não sou programador, nem sabia que existia arduino e php, sql etc. Estou entrando nesse ramo esse mês e estou meio que fascinado com tudo o que dá pra fazer.
Sou técnico mecatronico, eu tenho feito robos, altumas automatizações e etc, mas tudo controlado via serial e intranet.
Agora que cheguei na parte de comunicar o arduino estou com essas dificuldades.

Eu vi que existem muitas formas de se fazer a comunicação, porém tenho pouco conhecimento sobre elas.
Cheguei a criar um servidor na localhost, com base de dados mySQL e comecei a formatar um site com o Joomla para tornar tudo mais visual, mas eu não sei onde tenho que ir para fazer as alterações necessárias para fechar a comunicação.

HugoPT:
Aqui tens um exemplo de um php que te armazena data + hora de quando recebe o pedido.(assim nao necessitas de um RTC no arduino e passar essa informaçao do arduino para a BD) e podes passar outros parametros (Id do RFID).Assim ficas na BD com os dados de quem passou e a que data e hora passou.

<html>
<?php $value = $_GET['value'];   //Get date and time // Return date/time info of a timestamp; then format the output $mydate=getdate(date("U")); $timestamp = "$mydate[year]-$mydate[mon]-$mydate[mday] $mydate[hours]:$mydate[minutes]:$mydate[seconds]"; //echo $timestamp; //-----------Setup Mysql Connection   $user = 'user'; $pass = 'pass'; $hostname = 'localhost'; $databaseName = 'rfidDB';   $linkSQL = mysqli_connect($hostname,$user,$pass,$databaseName); if (mysqli_connect_errno())   {   echo "Failed to connect to MySQL: " . mysqli_connect_error();   }  //Construct the sql query and store it in a varaible //$sql="INSERT INTO user (name, value,date) VALUES('modem','$value','$timestamp')"; $sql="INSERT INTO user (name, value,date) VALUES('modem','$value','$timestamp')"; if (!mysqli_query($linkSQL,$sql)) { die('Error: ' . mysqli_error($linkSQL)); } echo 'Sucesso'; mysqli_close($linkSQL); ?> > ``` > > > > No lado do arduino basta implementares no codigo algo que abra o link e passe os valores

Acertou no que eu queria! sei que seria dificil fazer o arduino registrar data/hora, mas assim acho que fica mais fácil!
Vou estudar um pouco isso, ver o que posso fazer com php e mySQL, mas euestou achando tudo muito dificil ainda!...

Uma outra coisa: eu vi uma empresa usando arduino, eles colocavam na rede (mesmo sem saber nenhuma informação da rede) e o arduino conseguia se comunicar com o servidor.... acho que ele estava preparado pra enviar os dados de rede dele para o servidor... voces sabem como fazer isso?

vou procurar alguem aqui que tenha maior conhecimento em bd e ohp pra me acompanhar e vou colocar os resultados aqui.

obrigado!

Acertou no que eu queria! sei que seria dificil fazer o arduino registrar data/hora, mas assim acho que fica mais fácil!

XD

Uma outra coisa: eu vi uma empresa usando arduino, eles colocavam na rede (mesmo sem saber nenhuma informação da rede) e o arduino conseguia se comunicar com o servidor.... acho que ele estava preparado pra enviar os dados de rede dele para o servidor... voces sabem como fazer isso?

Muito simples. Configuras o teu arduino para configurar o ip por DHCP e assim ele ficara configuravel para toda a rede que tenha um servidor DHCP a rodar( 99% das redes têm).O dhcp da ao arduino um ip, um gateway e um dns entre outras configuraçoes mascara de rede ...
Com isto o arduino fica apto a comunicar com a web e o teu php tem uma localizaçao conhecida por ti fixa http://omeuphpestaaqui.com/?rdif=1000
Assim podes passar os dados em qualquer parte do mundo para dentro do teu Mysql.

Achei alguém aqui que entende também dessas coisas. Estou seguindo as orientações aqui:
Entrei no http://www.000webhost.com/
Estou criando o ambiente ainda, mas já adianto que já comunica o mySQL com o PHP.
Agora vamos ver se eu entendi, tenho que preparar o PHP como mencionado:

HugoPT:
Aqui tens um exemplo de um php que te armazena data + hora de quando recebe o pedido.(assim nao necessitas de um RTC no arduino e passar essa informaçao do arduino para a BD) e podes passar outros parametros (Id do RFID).Assim ficas na BD com os dados de quem passou e a que data e hora passou.

<html>
<?php $value = $_GET['value'];   //Get date and time // Return date/time info of a timestamp; then format the output $mydate=getdate(date("U")); $timestamp = "$mydate[year]-$mydate[mon]-$mydate[mday] $mydate[hours]:$mydate[minutes]:$mydate[seconds]"; //echo $timestamp; //-----------Setup Mysql Connection   $user = 'user'; $pass = 'pass'; $hostname = 'localhost'; $databaseName = 'rfidDB';   $linkSQL = mysqli_connect($hostname,$user,$pass,$databaseName); if (mysqli_connect_errno())  {  echo "Failed to connect to MySQL: " . mysqli_connect_error();  }   //Construct the sql query and store it in a varaible //$sql="INSERT INTO user (name, value,date) VALUES('modem','$value','$timestamp')"; $sql="INSERT INTO user (name, value,date) VALUES('modem','$value','$timestamp')"; if (!mysqli_query($linkSQL,$sql)) { die('Error: ' . mysqli_error($linkSQL)); } echo 'Sucesso'; mysqli_close($linkSQL); ?> > ``` > > > > No lado do arduino basta implementares no codigo algo que abra o link e passe os valores

E criar tabelas no mySQL para ir "alocando" as informações das variáveis recebidas.
Depois dou um para isso ser apresentado na tela, como se fosse um relatório (é esse relatório que eu quero!).
Seria +/- esse o procedimento?

E criar tabelas no mySQL para ir "alocando" as informações das variáveis recebidas.

Conheces o phpmyadmin?
Com esta ferramenta muito conhecida podes criar as tabelas dentro da basedados com os respectivos campos. Basicamente tens de lá criar os campos que queres, id,nome,data ...
Para gerares esse relatorio ao fim de teres os dados dentro do mysql basicamente é tratar.Podes ate desenhar graficos com essa informaçao ou um outro php onde podes consultar essa informaçao com uns simples Query's sql