E ai galera, beleza?

Seguinte...Já lí todos os tópicos aqui sobre ethernet shield, avancei bastante lendo-os.

Mas cheguei numa parte que venho tentando a dias e não saiu do lugar, se alguém puder ajudar fico muito grato.

A interface está em php.

Já consigo acionar as saída via LAN( rede local), o problema é que não consigo via WAN(externa).

Estou tentando por dois meios, são eles:

* Via Apache(ja tentei com easyphp e wampserver);

* Hospedando o site.

1.Pelo easyphp eu consigo ver a página php e acionar as saidas normal, pesquisei e ví que tenho que configurar o roteador pra redirecionar toda solicitação pra uma porta(estou usando a 8090)...No meu caso eu tenho modem e roteador, estou fazendo o redirecionamento tanto no modem quanto no roteador, está correto?

1.1Quando vou configurar o easy php tenho que colocar o no-ip ou ddns, mas pra testar estou colocando meu ip externo, é pra funcionar não é? Sempre que coloco outro ip no documento httpd.conf o apache para de funcionar.

2. A hospedagem grátis onde fiz o cadastro só é possível trocar dados pela porta 80( que tudo indica que a minha é bloqueada ), por isso acho que nao to conseguindo.

Vou "anexar" os códigos que estou usando, se puderem dá uma olhada e me ajudar.

sketch

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

//Configurações do Ethernet Shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1, 177 }; // ip que o arduino assumirá
byte gateway[] = { 192,168,1, 1 }; // ip do roteador
byte subnet[] = { 255, 255, 255, 0 };

// String que representa o estado dos dispositivos
char Luz[7] = "0000L#";

Server server(8090); // Cria o servidor na porta 8081

// String onde é guardada as msgs recebidas
char msg[7] = "0000L#";

void setup() {
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
pinMode(A4,OUTPUT);
pinMode(A5,OUTPUT);
}

void loop() {
Client client = server.available();
// SE receber um caracter...
if (client) {
// guarda o caracter na string 'msg'
msg[1]=msg[2]; msg[2]=msg[3]; msg[3]=msg[4]; msg[4]=msg[5]; msg[5]=msg[6];
msg[6] = client.read();

if (msg[6]=='#') {
switch(msg[5]) {
case 'R':
// Se receber o comando 'R#' envia de volta o status dos
// dispositivos. (Que é a string 'Luz')
client.write(Luz);
break;
case 'P':
// Caso P#, aciona o pino do portão pequeno por 1s.
digitalWrite(A4,HIGH);
delay(1000);
digitalWrite(A4,LOW);
break;
case 'G':
// Caso G#, aciona o pino do portão pequeno por 1s.
digitalWrite(A5,HIGH);
delay(1000);
digitalWrite(A5,LOW);
break;
case 'L':
// Caso L#, ele copia os 4 bytes anteriores p/ a
// string 'Luz' e cada byte representa um
// dispositivo, onde '1'=ON e '0'=OFF
Luz[0]=msg[1];
Luz[1]=msg[2];
Luz[2]=msg[3];
Luz[3]=msg[4];
if (Luz[0]=='1') digitalWrite(A0,HIGH); else digitalWrite(A0,LOW);
if (Luz[1]=='1') digitalWrite(A1,HIGH); else digitalWrite(A1,LOW);
if (Luz[2]=='1') digitalWrite(A2,HIGH); else digitalWrite(A2,LOW);
if (Luz[3]=='1') digitalWrite(A3,HIGH); else digitalWrite(A3,LOW);
break;

}
}
}
}

fim da sketch

página php

<html>
<head></head>
<body>

<?php
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Se conecta ao IP e Porta:
socket_connect($sock,"192.168.1.177", 8090);
// aqui eu coloco o ip que o arduino esta na rede nao é? Ja testei com os dois(local e externo)

// Executa a ação correspondente ao botão apertado.
if(isset($_POST['bits'])) {
$msg = $_POST['bits'];
if(isset($_POST['Fora' ])){ if($msg[0]=='1') { $msg[0]='0'; } else { $msg[0]='1'; }}
if(isset($_POST['Quarto1'])){ if($msg[1]=='1') { $msg[1]='0'; } else { $msg[1]='1'; }}
if(isset($_POST['Quarto2'])){ if($msg[2]=='1') { $msg[2]='0'; } else { $msg[2]='1'; }}
if(isset($_POST['Sala' ])){ if($msg[3]=='1') { $msg[3]='0'; } else { $msg[3]='1'; }}
if(isset($_POST['Pequeno'])){ $msg = 'P#'; }
if(isset($_POST['Grande' ])){ $msg = 'G#'; }
socket_write($sock,$msg,strlen($msg));
}

socket_write($sock,'R#',2); //Requisita o status do sistema.

// Espera e lê o status e define a cor dos botões de acordo.
$status = socket_read($sock,6);
if (($status[4]=='L')&&($status[5]=='#')) {
if ($status[0]=='0') $cor1 = lightcoral;
else $cor1 = lightgreen;
if ($status[1]=='0') $cor2 = lightcoral;
else $cor2 = lightgreen;
if ($status[2]=='0') $cor3 = lightcoral;
else $cor3 = lightgreen;
if ($status[3]=='0') $cor4 = lightcoral;
else $cor4 = lightgreen;

echo "<form method =\"post\" action=\"engenheirando.php\">";
echo "<input type=\"hidden\" name=\"bits\" value=\"$status\">";
echo "<button style=\"width:70; background-color: $cor1 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Fora\">Fora</button></br></br>";
echo "<button style=\"width:70; background-color: $cor2 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Quarto1\">Quarto1</button></br></br>";
echo "<button style=\"width:70; background-color: $cor3 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Quarto2\">Quarto2</button></br></br>";
echo "<button style=\"width:70; background-color: $cor4 ;font: bold 14px Arial\" type = \"Submit\" Name = \"Sala\">Sala</button></br></br></br>";
echo "<button style=\"width:90;font: bold 14px Arial\" type = \"Submit\" Name = \"Pequeno\">Portao Pequeno</button></br></br>";
echo "<button style=\"width:90;font: bold 14px Arial\" type = \"Submit\" Name = \"Grande\">Portao Grande</button></br></br>";
echo "</form>";
}
// Caso ele não receba o status corretamente, avisa erro.
else { echo "Falha ao receber status da casa."; }
socket_close($sock);
?>

</body>
</html>

Obs,: Os códigos foram tirados do site engenheirando.com

Desde já, muito obrigado.

Exibições: 7057

Anexos

Responder esta

Respostas a este tópico

Cleimar, tudo bem com vc?

Cara s´o agora estou voltando a estudar e so agora que comprei outro roteador estou conseguindo fazer login no roteador...Hoje a noite vou testar a dica que vc me deu do DMZ HOST e te digo se funcionar.

Muito agradecido pelas dicas e pela preocupaç~ao.Abraçao.Bom dia.PAZ!

Entao rapaz...

eu estou considerando que sua conexao é assim


modem<---->roteador<---->arduino

agora hipoteticamente imagine os ips

modem:192.168.0.1

roteador(dhcp automatico ip recebido do modem): 192.168.0.64

roteador(ip proprio pra sua rede interna):192.168.1.1
sua maquina com easyphp: 192.168.1.177

vc tem que entrar no setup do modem e rotear as portas que vc vai usar para o ip 192.168.0.64, que é o ip com o qual o modem enxerga o seu roteador


depois vc tem que entrar no setup do seu roteador, e rotear as portas que vc vai usar pros ips especificos internos da sua rede, 192.168.1.x


Sacou? Com esse tipo de setup de hardware (modem - roteador - sua rede), pra de qualquer lugar da internet vc conseguir enxergar qualquer coisa dentro de um terminal especifico na sua rede vc precisa rotear todas as portas que vc for usar, do modem para o seu roteador, e do roteador pras maquinas especificas. Sao 2 passos ;).

Wagner, tdo bem?

Obr por responder. Vamos la...

A ideia de colocar o modem na configuraçao bridge e o roteador em pppoe nesse caso ´e para nao precisar rotear nenhuma porta no modem, nao ´e?

Aqui o modem esta em bridge e o roteador faz o login em pppoe, nao sendo possivel(nem necessario) rotear as portas do modem, entendeu?

No momento nao estou em casa para fazer alguns testes, mas a noite te passo algumas informaç~oes.

Muito obrigado.Abraço

Joia...

Só tomei por base a minha experiencia com um modem da GVT(marca thompson) que precisei fazer isso pra conseguir enxergar tanto meu arduino, quando minha camera wi-fi estando fora da minha casa :D

 como vc esta na mesma rede que seu arduino esta, nao tem nenhum problema, vcs estarao sob o mesmo dhcp ;), nao precis anem rotear porta nenhuma.


Eu tive que fazer o roteamento do modem para o roteador e do roteador pros dispositivos apenas pra que enxergassem de fora da minha rede.

Em que posso ajuda-lo?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço