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

Sebastião desculpa a demora e obrigado pela ajuda...

O easyphp está no meu notebook( o mesmo tem o ip 192.168.1.123).

Vou alterar o trecho  "socket_connect($sock,"IP_DO_TEU_ROTEADOR_COM_NAT", 8090); " pra ver no que dá, mas tenho a impressao de que já fiz isso.

Ainda não estou usando ddns nem nada do tipo.

Não entendi uma coisa...No início vc disse que no trecho  "socket_connect($sock,"IP_DO_TEU_ROTEADOR_COM_NAT", 8090); " era pra eu colocar o ip do roteador, mas nao seria o ip do modem?

Outra duvida...

 

"""tu indicas o retorno para um endereço local(192.168.1.77), como se o servidor de páginas estivesse em tua própria máquina."""

 

Devo informar o ip onde o easyphp está instalado né? oou o ip do ethernet shield??

As páginas estão no ip 192.168.1.123

O arduino está no ip 192.168.1.177

O roteador tem o ip 19.168.1.1

O modem é que tem o ip dinâmico(varia).

Desculpa minha confusão. Muito obrigado..

Abraço.

Eu tenho que liberar as portas no roteador, no modem ou em ambos?

Já testei de tdo jeito e pelo site http://www.guiadocftv.com.br/modules/ferramentas/pag_nettools.php, e sempre da que as portas estão fechadas.

nao entendi que o amigo quer...

Quero acessar minha página php de qualquer lugar que tenha internet e comandar as saídas do arduino, entendeu?

Abraço

Amigo configura o Host DMZ ou DMZ HOST do seu modem para seu notebook...
todas requisiçoes de fora passaram para seu notebook....

veja se e mais o- assim
web>>>>>Modem DSL >>>>>>>Notebook
caso seja dessa forma
web>>>>>modem DSL>>>>>>roteador hi-fi>>>>> notebook
configure o roteador hi-fi para conectar via pppoe e configure o DMZ HOST para o io do seu notebook
e vuala funcioa.... quando nao tinha ipdedicado usava isso pela velox para acessar meu servidor....
qualqer coisa meu msn e suporte(AT)cleimarvidal.com.br
so adc que te ajudo!
forte abraço e boa sorte!

Boa tarde grande Cleimar...Entendi o que vc falou, muito obrigado...

O problema é que meu roteador não consegue se conectar via PPoE...Já configurei o modem para bridge, já peguei outro roteador do mesmo modelo e tb não funcionou.

Meu roteador é o BRIGHT 0100.

Sabe oq pode estar havendo ?

Muito obrigado msm, abraço.

PAZ!

faz o seguinte...

como e seu modem que faz a conexao  pppoe

poe o cabo que vem do modem em uma das portas lan no roteador , o roteador vai trabalhar como bridge...

coloca o ip do seu not ou servidor apache fixo e poe o ip no DMZ para para o ip que ta a pagina...
ve ai se da e me fala

...

complementando....

o ip do modem vai ser seu gateway, nao o do roteador, se nao a net ai nao vai funcionar

rssss

Bom dia.

Qual sua conexão de internet? Pergunto isso porque uso a velox aqui no RJ e algumas portas são fechadas, as únicas que encontrei aberta são, 9091 a 9095. Não sei se tem outras. Essa é a primeira coisa.

Depois você pode tentar fazer o redirecionamento da porta escolhida do seu modem para o endereço do roteador e ai sim do roteador para o seu servidor. 

Aqui tive que fazer dessa maneira para meu servidor FTP.

Abraço.

Bom dia Daniel, blza?

Minha internet é velox,sou de Sergipe.

Lembrei que no meu roteador a porta WAM está com problema(comprei outro que chega daqui uns 10 dias), daí eu usava outra porta pra receber do modem, esse poderá ser uns dos problemas, amanhã(hoje melhor dizendo) vou pegar um roteador emprestado pra seguir essas dicas que vc me deu e posto aqui pra vc o resultado.

Muito obrigado Daniel.Abraço

As portas analógicas foram configuradas para serem usadas como digitais.

fala vinicius conseguiu acessar de fora o arduino?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço