Arduino ler e escrever arquivo texto num diretório na rede

Olá pessoal, 

Estou buscando uma forma prática para escrever arquivos textos, mais especificamente arquivos xml, através do arduino com um shield ethernet.

Encontrei várias ideias, mas nenhuma que eu tenha conseguido colocar em prática, por exemplo, utilizar  Ruby, utilizar GET da biblioteca ethernet.client e adaptar a biblioteca de SD para pesquisar arquivos através do IP.

Alguém já conseguiu algo parecido? Exemplos de como fazer?

Pelo o que pesquisei, algo em torno disso poderia ajudar muita gente, principalmente para ler e escrever tags de RFID.

Abraços,

Felipe

Exibições: 3883

Responder esta

Respostas a este tópico

Especifique onde estaria este diretorio.

Fale mais sobre sua aplicação.

Oi Almir, 

Este diretório pode ser qualquer IP que esteja na rede ethernet, um servidor, um PC, etc.

A aplicação é para ler um cartão RFID e salvar a hora e a tag number do desse cartão num XML, dessa forma eu consigo carregar os dados num DB ou mesmo numa aplicação .NET

abs,

Felipe

eu faria criando um webservice que seria consumido pelo Arduino. Esse webservice faria a gravação/leitura dos XML.

Oi Mauro, 

Você tem algum exemplo prático para eu estudar?

Obrigado,

Felipe

Eu fiz um troço parecido uma vez, que lia as tags RFID de uma carga de veículos e se comunicava com o PC, via serial. Aí uma app .Net pegava as tags e gravava num XML.

Imagino que vc não queira o PC, por isso está sugerindo o shield. Aí a saída seria webservice mesmo. Eu não tenho um exemplo de webservice comunicando com o Arduino que possa publicar, os dois que fiz foram para clientes e estão sob restrição de memorandos de confidencialidade.

No meu blog tem exemplo de comunicação com RFID e shield Ethernet (projetos distintos). Às vezes pode ser útil a vc: http://automatobr.blogspot.com.br/

Pode ser feito usando PHP passando estas informações via GET e o php se encarregaria de gravar no arquivo xml ... Estou desenvolvendo um projeto mas com banco de dados, onde o arduino envia via GET para o servidor e o servidor recebe os dados via php e armazena no banco de dados MySQL.

Pensei em fazer dessa forma, mas usando aspx, que dá no mesmo que o PHP... O problema é ler esse DB. Se você tiver uma sugestão, resolveu o problema. Até prefiro utilizar um db ao invés do xml.

Então de ASPX eu não conheço nada, mas programo em PHP á vários anos, então para inserir no banco de dados eu fiz assim no Arduíno (partindo do entendimento que você já saiba e já tenha a parte de conexão via get do arduino):

 

client.println("GET /receive.php?receiveconnection=1110 HTTP/1.0"); // informações basica para a configuração padrão do metodo GET no arduino que é iniciar com GET e finalizar com o HTTP/1.0 + o nome da pagina e a variavel via get que a pagina php vai ficar esperando recebendo o valor (este valor no meu caso está fixo mas pode ser concatenado uma variavel na hora do envio)

 

Segue abaixo um exemplo completo de como receber este dado na pagina php (esta pagina tem que ter o nome receive.php no meu caso que foi o mesmo do link que coloquei no arduino)

 

<?php

//nao aparece o erro do mysql de variaveis vazias, comente a linha abaixo para ver se tem algum problema na sua conexao do banco de dados
ini_set('display_errors', 'Off');

 

dados para a conexao ao banco de dados e ao host

$host = "localhost"; //host
$userdb = "root"; //usuario
$pass = "";//senha
$db ="arduino"; // Banco de dados


$conectdb = mysql_connect($host , $userdb, $pass) or die (header('Location: 404.php'));//conecta ao host, caso nao conseguir conectar redireciona para a pagina com mensagem de error

mysql_select_db($db) or die (header('Location: 404.php'));//seleciona o banco, caso nao conseguir conectar redireciona para a pagina com mensagem de error


$receiveconnection = $_GET['receiveconnection']; /* recebe o valor da variavel envia via get

para testar caso esteja usando como testes no seu computador local faça:

http://localhost/receive.php?receiveconnection=1010  e o valor 1010 será inserido no banco.*/

 

//verifica se a variavel não está vazia

if (!empty($receiveconnection)){

//insere o valor da variavel no banco de dados na tabela status

mysql_query("INSERT INTO status (status) value ($receiveconnection)");

}

 

?>

 

 

Estrutura do banco:

BANCO: arduino

Tabela: status

campos:

ID como auto incremento, tamanho padrão tipo inteiro

status como varchar tamanho no meu caso como tamanho 20

 

Para exibir os dados:

<?php

//nao pararece o erro do mysql
ini_set('display_errors', 'Off');

$host = "localhost";
$userdb = "root";
$pass = "";
$db ="arduino";

$conectdb = mysql_connect($host , $userdb, $pass) or die (header('Location: 404.php'));

mysql_select_db($db) or die (header('Location: 404.php'));

 

//faz a busca no banco por todos os dados e exibe neste caso em ordem decrescente e com o limite de 30 linhas (caso queira mostrar todos os resultados apague tudo depois do where 1)
$busca = mysql_query("SELECT * FROM status where 1 ORDER BY id DESC LIMIT 30");
while ($linha = mysql_fetch_array($busca)){

//mostra os dados do banco

echo $linha["id"] ."-------->".$linha["status"] ."<br>";
}
?>

 

 

 

Acho que é isso, ficou meio grande o post, mas deve ajudar rsrsr

Valew, Manoel!

Pelo que entendi, a linha final echo $linha["id"] ."-------->".$linha["status"] ."<br>" eu consigo ler pelo client.read no arduino, correto?

Vou traduzir pro aspx e fazer uns testes. Posto o resultado aqui depois. 

Está linha ai é para exibir no navegador os dados do banco de dados.

Já fiz algo parecido e também tive problemas em concatenar variaveis, mas consegui fazendo desta forma:

client.print("GET /ws/receive.php?desc=");

client.print(Porta-predio-acionada);

client.println(" HTTP/1.1");

o segredo pra concatenar é ir dando .print até o fim do comando, e no comando final dar um .println sakas?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço