Olá pessoal!

Tenho uma dúvida em relação a ethernet shield.

Teria como eu acessar um arquivo php em um servidor remoto? onde esse arquivo contenha tags html que permitam controlar relés por exemplo.

E receber o status de cada relé. Se está ON ou OF

Obrigado!

Exibições: 2735

Responder esta

Respostas a este tópico

Marcio

Acredito que o esquema que você precisa é:

- O arduino como cliente web fazendo requisições em um servidor enviando dados no seu caso On ou Off

- O servidor que trata o recebimento das  requisições do cliente arduino e requisições do cliente página html

- Cliente Html e javascript para exibir no navegador o estado enviado pelo arduino.

Tenho um esquema desse montado utilizando um servidor em Nodejs, ferramenta que tem sido amplamente adotada nesse tipo de aplicação. O servidor roda no Openshift uma serviço que oferece uma máquina virtual e tem a opção gratuita. O servidor também serve a página html com os dados de sensores e possibilita enviar dados ao servidor permite fazer o acionamento do arduino.

Caso você e a comunidade tenham interesse posso preparar um tutorial desse esquema. Poderei apresentar o servidor nodejs, os clientes e a configuração do Openshift, que já adianto é um pouco trabalhosa.

Bom domingo

 

Olá Marco!
Claro que toda ajuda é bem vinda!
Estou interessado sim em seu tutorial.

Olá Márcio, esse form action está no arquivo php, correto?

Vamos supor que o IP do arduino é 192.168.0.50 e o IP da rede onde o arduino se encontra é: 200.210.220.230 (portanto esse é o IP de internet). 

O script php, se estiver num servidor fora da sua rede, ele deverá apontar pro IP 200.210.220.230, que é o IP onde o arduino está. Seu roteador é quem irá tratar de direcionar a conexão entrante para algum IP interno, ou seja, 192.168.0.50 que é o IP do arduino

Não tem como o script PHP hospedado fora da sua rede acessar diretamente o IP do arduino sem ser dessa forma

Já se o script PHP estiver dentro da mesma rede do arduino, aí basta apontar o script php pro ip do arduino que é 192.168.0.50

Imhugo, neste primeiro momento, Arduino e php estão na mesma rede sim, e veja o o meu form como está:

<form name="form_rele" method="get" action="192.168.20.110" >
<button type="submit" name="b1" value="1">Ligar</button>
<button type="submit" name="b1" value="0">Desligar</button>
</form>

desta forma ai, está correto o action? Não precisa por o "http://" na frente do IP?

Márcio, vou tentar explicar o que vc precisa fazer:

1) precisa ter um servidor apache com php instalado.

2) hospedar nesse servidor apache um arquivo php (chamado index.php por exemplo)

3) esse index.php conterá os códigos html, inclusive o formulário (<form>) com os botões para ligar/desligar relês

4) esse <form> deverá apontar pro IP do arduino. Não sei te dizer nesse momento se precisa colocar http:// no início, mas veja aí qual dará certo. O jeito correto é incluir http:// sim uma vez que lá no arduino está sendo hospedada um webserver http. A omissão do http:// talvez cause erro, então se causar erro vc já conclui que é necessário sim incluir http://

5) agora dentro do sketch do arduino. Primeiro comece com um código pra fazer o arduino rodar como webserver. Isso permitirá que o arduino aceite conexões entrantes vindas via tcp/ip. Quando falo que vc precisa fazer o arduino rodar como webserver, é importante vc perceber que o arduino não necessariamente irá servir uma página html. Talvez seja aí que vc esteja com dificuldade de entender. O arduino estará como webserver simplesmente para aceitar alguma conexão entrante, mas ele não servirá página html nenhuma, ok? Ele simplesmente irá capturar as variáveis GET que virão a partir do index.php. Por exemplo o index.php irá se conectar ao arduino após vc pressionar o botão LIGAR do formulário dessa forma: http://IPdoArduino?rele1=on&rele2=on&rele3=off

6) então o webserver do arduino terá apenas que ser capaz de interpretar tal conexão entrante vinda do php, cujas instruções são 3 no exemplo que te dei: ligar relés 1 e 2 e desligar o rele3. Precisará encontrar alguma forma de separar aquele conjunto de instruções que vem depois do ponto de interrogação, isto é, "rele1=on&rele2=on&rele3=off". Eu aqui uso a técnica de procurar pelo caracter "&" e quebrar nesse local, me resultando então em 3 conjuntos ( rele1=on  //  rele2=on  // rele3=off); em seguida, o sketch terá que pegar cada um desses conjuntos e procurar pelo caracter "=", pois é esse sinal que separa a porção esquerda (nome do relê) da porção direita (comando propriamente dito).

7) interpretado o comando que chegou via GET, basta programar o arduino para executar as tarefas, que no caso é liga / desligar relês

8) comece assim, depois que tiver tudo redondo, comece a pensar em como somar ao sketch um trecho de código pra fazer o arduino funcionar como webclient, pois é dessa forma que o arduino irá informar ao servidor com php o status atual dos relês.

Leia tudo isso com calma, e diga em que parte vc engasgou

OK Imhugo, já estou tentando fazer assim, por partes. Minha maior dificuldade e fazer a interpretação dos dados Entrantes no Arduino.

Para minha necessidade, apenas um conjunto de dados já resolve, tipo:

?rele1=0 

ou 

?rele1=1

pra um só conjunto de dados, vc não precisa complicar. Basta fazer chegar no arduino algo como ?0 ou ?1

Aí basta pegar o número que chegou: se chegou 0, programe pra desligar o relê, se chegou 1, mande ligar o relê.

Mas tenha consciência que futuramente vc poderá querer colocar mais relês, ou poderá querer controlar outra coisa. Aí vc poderá também querer ter condições de saber a informação que chegou (para fins de debug, por exemplo). É aí que se tornaria necessário fazer chegar algo como "rele1=on&rele2=on&rele3=off". Se vc já deixar o sketch programado para ler strings complexas como essa, vc poderá facilmente implementar no futuro algo como "rele1=on&rele2=on&rele3=off&abajur1=blue&sanca=red"

Mas se vc quiser algo bem simples, daria pra fazer chegar "?0101", sendo que o primeiro dígito é o relê 1 status 0=off, o segundo dígito é relê 2 status 1=on, o terceiro dígito é relê 3  status 0=off e o quarto dígito é o  relê 4 status 1=on

Perceba que é você quem decide como codificar os dados. E a partir desse código criado por vc, vc deverá preparar o sketch pra interpretar o código entrante. Quer codificar apenas números binários, dá, só que fica mais difícil depois pra vc debuggar caso precise. Exige que vc documente bem a forma como vc codificou.

Já se vc quiser trabalhar com códigos mais fáceis de uma pessoa ler, exigirá mais trabalho e separar os conjuntos. É vc quem decide de que forma fazer

Ok!
Mas voltando a questão do form action, ao clicar em um dos botões para acionar os relés, 

automaticamente o navegador tenta navegar no ip do Arduino, saindo da página onde estão os botões de acionamento. 

Você trata isso de que forma? usando php ou usando Jquery?

ah entendi agora sua dúvida. Realmente quando vc clicar no botão, a navegação será redirecionada pro webserver do arduino e vc não terá mais os botões do formulário php na tela do navegador se fizer dessa forma.

esqueci desse detalhe.

dá uma buscada sobre ajax, uma possibilidade é usar ajax para que quando clicado o botão do formulário, o PHP encaminhar um comando pro webserver arduino e capturar o retorno do webserver para ser exibido na tela do navegador

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço