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 por favor explique mais claramente sua dúvida, dessa forma ficou um pouco mais confuso.

Entretanto, pelo pouco que entendi diria que você quer enviar dados a um servidor remoto e fazer com que o arduino se conecte a esse servidor e de acordo com o dado enviado atue nos reles e retorne o estado atual? Se sim, diria que é possível sim, porem acredito que o mais simples (e talvez eficiente) seria usar o próprio arduino como servidor, dessa forma você teria acesso ao estado dos reles e poderia atuar diretamente no arduino (sem usar um servidor intermediário).

João eu fiz uma vez dessa forma aí que vc supostamente entendeu, isto é, basear toda a interface do usuário num servidor web com php e disponível na net. O arduino fica responsável por enviar informações a respeito dos sensores pro php e também por receber as ordens do usuário, que primeiramente se conecta ao servidor com php, clica nos botões disponíveis nessa página e então o php se conecta ao web server no instalado no arduino para que este atue acionando relés e outras coisas mais

A grande vantagem em fazer dessa forma, isto é, usando o php como interface de usuário, é que te possibilita criar um visual muito mais aprimorado,  poder aplicar tela de Login/senha pra restringir acesso, montar sistema de log de registro com banco de dados (logins, atividades, tentativas de conexão indevidas, registro de IP dos usuários, enfim qualquer tipo de registro que vc pretender)

Muito obrigado galera, por me ajudarem!

João, desculpe-me se não consegui explicar direito, mas o que eu quero, é exatamente o que o Imugo falou, exatamente isso.

gostaria de ver algum exemplo de como vc fez isso Imugo, se possível!

Obrigado!!

eu não tenho como te deixar ver o exemplo, pois não posso divulgar a página por se tratar de um sistema seguro, com login/senha. É um sistema com acesso privado e restrito.

pra montar dessa forma que eu relatei, vc precisaria ter um arduino rodando como webserver e webclient ao mesmo tempo. Por que ao mesmo tempo? Como webserver, vc possibilita a comunicação no sentido PHP -> arduino, ou seja, vc conseguirá enviar comandos originados no PHP e com destino no  arduino  (acionar relês, por exemplo). E como webclient, vc possibilita a comunicação no sentido arduino -> php, ou seja, vc conseguirá enviar informações originadas nos sensores/arduino e com destino no servidor web com php + banco de dados (vc pode por exemplo guardar informações como temperatura ambiente a cada minuto no banco de dados, registrar data/hora de abertura de portas, registrar estado on/off de lâmpadas e outros aparelhos elétricos, como ar condicionado), enfim, uma vez implantado um sistema desse, vc teria possibilidade de implantar uma diversidade grande de novas possibilidades

OK Imhugo, Obrigado pela dica.

Eu não preciso ver seu projeto, mas fico em duvida de como conectar o arduino em um servidor PHP pela rede. Você usou socketconect para conexão? 

Se possível me ajudar nesse sentido, eu ficaria agradecido!

tipo assim:

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);


socket_connect($sock,"ip_do_arduino", porta); 

socket não.

É tudo via TCP/IP. O servidor fica hospedado na nuvem, é um servidor contratado, daqueles que vc paga mensalidade e vc tem alguns gigabytes de espaço em HD pra colocar o que quiser.

Dessa maneira, seu arduino com ethernet shield w5100 consegue acessar via TCP/IP. Veja um exemplo que existe na própria IDE do arduino, localizada em exemplos/ethernet/webclient

Lá vc poderá perceber que o sketch exemplo faz uma conexão ao site do google para fazer uma pesquisa do termo "arduino". Essa é a forma de fazer o arduino se conectar ao seu site com php, basta entender esse exemplo e adaptar à sua necessidade.

Mesmo que vc não contratasse um servidor de hospedagem, e optasse por manter o servidor web na sua casa, a idéia é a mesma. Teu servidor web nesse caso seria acessado pelo arduino através de um IP local (tipo 192.168.0.x).

OK, Até aqui tudo bem!

Você usa o webclient para conectar ao arquivo.php e o webserver para escrever informações nesse arquivo. Isso?

Imhugo, atualmente meu projeto está funcionando acessando um arquivo .htm no cartão de memória da shield, mas não quero dessa forma. Simplesmente queria que esse mesmo arquivo ou este arquivo em formato php rodasse em um servidor remoto não no arduino.

Só quero tirar esse arquivo do cartão de memória e por no servidor remoto e que meu sistema rode da mesma forma. Entendeu?

Webclient sim, pra conectar ao arquivo.php e também para escrever informações, ou melhor dizendo, para enviar informações pro php. Esse envio de informações pode ser feito de duas maneiras: pelo método post ou pelo método Get

Já o sketch no modo webserver serve para permitir ao arduino receber conexões

Imhugo!
baseado no exemplo da shield ethernet webclient, eu apontei os IPs para conexão em um servidor locar que criei e nesse servidor eu adicionei um "index.htm"

O arduino conseguiu conexão e conseguiu localizar o arquivo intex.htm e imprimiu todas as tags html nele contidas.

Veja o exemplo:


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

// Insira um endereço MAC para o controlador abaixo.
// escudos Ethernet mais recentes têm um endereço MAC impresso em um adesivo no escudo
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Se você não quiser usar DNS (e reduzir o tamanho do esboço)
// Usar o IP numérico em vez do nome para o servidor:
char server[] = "192.168.20.210"; // name address for Google (using DNS)

// Definir o endereço IP estático para usar se o DHCP não consegue atribuir
IPAddress ip(192, 168, 20, 177);

// Inicializar a biblioteca cliente Ethernet
// Com o endereço IP e porta do servidor
// Que você deseja se conectar (porta 80 é padrão para HTTP):
EthernetClient client;
EthernetServer servidor(8090);
void setup() {
//Abre comunicação serial e espera a porta abrir:
Serial.begin(9600);
while (!Serial) {
; //aguardar a porta serial para conectar. Necessário para porta USB nativo somente
}

// Iniciar a conexão Ethernet:
if (Ethernet.begin(mac) == 0) {
Serial.println("Falha ao configurar Ethernet usando DHCP");
//Tentar configurar usando o endereço IP em vez de DHCP:
Ethernet.begin(mac, ip);
}
// Dar o Ethernet proteger um segundo para inicializar:
delay(1000);
Serial.println("Conectando...");
// se você conseguir uma conexão, Apresentará um relatório via serial:
if (client.connect(server, 80)) {
Serial.println("Conectado!");
//Faz uma solicitação HTTP:
client.println("GET /arduino/reles/index.htm HTTP/1.1");
client.println("Host: 192.168.20.210");
client.println("Connection: close");
client.println();
} else {
//Se você não conseguir uma conexão com o servidor:
Serial.println("Falha na conexao");
}
servidor.begin();
Serial.print("Servidor: ");
Serial.println(Ethernet.localIP());
}

void loop() {
// Se há bytes de entrada disponíveis
// A partir do servidor, lê-los e imprimi-los:
if (client.available()) {
char c = client.read();
Serial.print(c);
}

//Se o servidor desconectado, pare o cliente:
if (!client.connected()) {
Serial.println();
Serial.println("Disconectando.");
client.stop();

//não fazer nada para sempre:
while (true);
}
}

observe que adicionei a biblioteca para inicializar o arduino como servidor também, na porta 8090.

gostaria de saber se estou no caminho certo e qual o meu próximo passo a seguir?

O próximo passo acredito que seja montar uma página web em php e hospedar no seu servidor. Essa página teria que ter botões on/off para ligar/ desligar relê
Faça isso usando form com método Get pra ficar mais fácil e aponte o form action pro ip do arduino

E ali no sketch do arduino, no trecho do webserver, programe um código para decifrar a informação proveniente do formulário html, por exemplo se veio http://ipdoarduino/?rele=1&acao=on o arduino deverá acionar o relê 1.

Assim que aprender isso, fica fácil vc ampliar pra acionar mais relés

O arduino no modo webclient terá mais utilidade pra envio de dados do arduino pro php. simplesmente fazer o arduino encontrar um índex.html hospedado no servidor não tem utilidade pratica quase nenhuma.

Olá Imhugo!

Desculpa a demora, estive em viagem!

Estou adicionando dois arquivos do meu projeto para que vc possa ver como ele está atualmente.

O sistema está rodando usando um cartão SD, só preciso entender como remover esse arquivo do cartão SD e colocar ele em um servidor php.

logicamente que este arquivo está em formato .htm no cartão me memória mas aqui eu já transformei ele para php.

Os relés a serem usados são os modulos relé serial da Robocore.

https://www.robocore.net/modules.php?name=GR_LojaVirtual&prod=663

Optei por eles pois com apenas 2 portas do arduino é possível controlar vários módulos de relé, bem interessante! 

Não consegui  entender ainda como eu poderia fazer para que o sistema funcione da forma que você está tentando me explicar, e lógico, é muito mais seguro e eficiente da forma que vc me falou.

deixo meu contato se precisar, OK!

marciop07@hotmail.com

Anexos

Olá Imhugo!

Desculpe o incomodo, mas tenho algumas duvidas:
No form Action apontar para o IP do arduino, certo?

devo colocar o ip apenas ou (http://ipdoarduino)?

Se eu por o IP apenas, a URL no navegador fica assim:

http://ip_servidor/arduino/ip_arduino?silo1=1.

Consequentemente da erro, e se eu por: http://ipdoarduino, dai carrega o que tem na placa arduino. Mas dai não seria preciso o servidor externo, pois redireciona para o arduino.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço