Go Down

Topic: arduino+ethernet shield+macbook+internet movel (Read 4278 times) previous topic - next topic

delacruz

ola a todos..
gostava de saber se alguem ja teve o mesmo problema que eu..
estou a tentar ligar o arduino com o shield de ethernet ao mac, visto que ele consegue partilhar a internet para a porta de rede.
o meu problema é a configuração do ip pois estou a usar internet movel (tipo usb).
alguem aqui tem experiencia de arduinos e mac's?
digam algumas dicas para por o animal a funcionar
obrigado

Já partilhaste a rede?

Desligaste o dhcp?

Configuraste um ip no mac com a mesma rede do arduino?

Partilhaste a internet da wireless para ethernet?

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

delacruz

partilhar a rede? é a mesma coisa que partilhar a internet?
neste momento o problema e o seguinte, aparentemente o arduino consegue conectar com a internet, mas nao consegue receber dados, apenas enviar.
nao consigo perceber de onde vem o erro, se é de programação ou configuraçoes no mac..
quando uso os exemplos, se usar o exemplo server, quando abro o safari e digito o ip, aparece a identificação dos pinos(aparentemente tudo bem), mas se pegar noutro computador e fizer a mesma coisa, nao consigo obter resposta...
alguem consegue ajudar??
thkx.

Se conseguires explicar melhor como tens tudo ligado e qual o programa que tens a correr talvez seja mais fácil...

Outro computador, não vê o arduino porque estão em redes distintas. A rede Wifi do Mac não tem as mesmas configuracões da Ethernet. Dito isto, o model ethernet está assim tão longe?

Depois, segundo me lembro, o exemplo do server não recebe nada, ou melhor... não faz nada de útil com o que recebe. Logo não podes dizer se está a receber ou não.

Porque não ligas o Arduino como webserver (sem ser com o exemplo...) e ligas-te a ele através de telnet para poderes enviar comandos facilmente??
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

delacruz

bom, vou recapitular desde o inicio..
pretendo usar a aplicação android domotichome, mas como em casa o acesso a internet e feita pelo modem usb 3g ou wirless, queria primeiro configurar o ethernet shield para ter a certeza que ira tudo funcionar, ja que nas primeiras tentativas nada deu certo.
fiz entao as configuraçoes no computador, como e um mac, partilhei a ligação do modem usb com a porta ethernet(quando tento com modem usb) e partilha de airport (quando acesso wireless), configurei manualmente o ip com o num 192.168.2.1, com sub-rede 255.255.255.0. a firewall esta desativada e quando faço o teste de ping com o arduino com o exemplo webserver esta ok(10 packets transmited, 10 packets received) com o ip que eu defeni como 192.168.2.2..
no telemovel descarreguei a aplicação meti o ip do arduino192.168.2.2, port 80, e nao ha resposta..
quando tentei com os exemplos pareceu-me que havia ali alguma coisa que nao estava bem porque parece-me que nao ha recepçao da net. se usar o exemplo webserver ao abrir o safari e meter o ip do arduino aparece analog input 0 is 1023..., mas se usar outro pc com net e meter o ip do arduino nao da nada...
há algum passo errado que tenha feito ate agora?
será por estar a usar net wireless da vodafone daqueles routers huawei portateis??


o codigo domotichome e este:
#include <SPI.h>
#include <Ethernet.h>


byte mac[] = { 0xc8, 0x2a, 0x14, 0x44, 0x83, 0xa4 };
byte ip[] = { 192 ,168 ,2 ,2 };
byte gateway[] = { 192 ,168 ,2 ,1 };
byte subnet[] = { 255 ,255 ,255 ,0 };
Server server(80);

String readString = String(30);


byte server_send[] = {81, 174, 68, 58};
Client client_send(server_send, 80);
long lastConnectionTime = 0;
boolean lastConnected = false;
const int postingInterval = 10000;


void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
delay(1000);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
Serial.begin(9600);
}

void loop(){


if(!client_send.connected() && (millis() - lastConnectionTime > postingInterval)) {
String tot;
sendData(tot);
}
Client client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 30)
{
readString = readString + c;
}
if (c == '\n') {
Serial.print(readString);
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();


if(readString.startsWith("GET /?out=13&status=1"))
{Serial.print("\n 13 HIGH \n");
digitalWrite(13, HIGH);
client.print("{\"status\" : \"1\" , \"out\" : \"");
client.print(13);
client.print("\"}");
}
if(readString.startsWith("GET /?out=13&status=0"))
{Serial.print("\n 13 LOW \n");
digitalWrite(13, LOW);
client.print("{\"status\" : \"0\" , \"out\" : \"");
client.print(13);
client.print("\"}");
}


if(readString.startsWith("GET /?out=all"))
{
Serial.print("\n OUT ALL\n");
client.print("{\"ip\" : \"192.168.2.2\", ");
client.print("\"devices\" : ");
client.print("[{ \"type\" : \"light\", \"name\" : \"led\", \"out\" : \"");
client.print("13");
client.print("\"}");
client.print("]}");
}
readString="";
client.stop();
}
}
}
}
}




char * floatToString(char * outstr, double val, byte precision, byte widthp){
char temp[16];
byte i;
double roundingFactor = 0.5;
unsigned long mult = 1;
for (i = 0; i < precision; i++)
{
roundingFactor /= 10.0;
mult *= 10;
}
temp[0]='\0';
outstr[0]='\0';
if(val < 0.0){
strcpy(outstr,"-\0");
val = -val;
}
val += roundingFactor;
strcat(outstr, itoa(int(val),temp,10));
if( precision > 0) {
strcat(outstr, ".\0"); // print the decimal point
unsigned long frac;
unsigned long mult = 1;
byte padding = precision -1;
while(precision--)
mult *=10;
if(val >= 0)
frac = (val - int(val)) * mult;
else
frac = (int(val)- val ) * mult;
unsigned long frac1 = frac;
while(frac1 /= 10)
padding--;
while(padding--)
strcat(outstr,"0\0");
strcat(outstr,itoa(frac,temp,10));
}
if ((widthp != 0)&&(widthp >= strlen(outstr))){
byte J=0;
J = widthp - strlen(outstr);
for (i=0; i< J; i++) {
temp = ' ';
}
temp[i++] = '\0';
strcat(temp,outstr);
strcpy(outstr,temp);
}
return outstr;
}


void sendData(String thisData) {
if (client_send.connect()) {
Serial.println("connecting...");
client_send.print("GET /insert?ak=53e6321b&read=");
Serial.println("...sending ");
Serial.println(thisData);
Serial.println("\n");
client_send.print(thisData);
client_send.println(" HTTP/1.1");
client_send.print("Host: www.domotichome.net\n");
client_send.print("Content-Type: text/html\n");
client_send.println("Connection: close\n");
lastConnectionTime = millis();
Serial.println("Done ");
client_send.stop();
}
else {
Serial.println("connection failed");
}
}





obrigado pela ajuda
continuo sem saber o que esta errado..
thxk


Outro computador, não vê o arduino porque estão em redes distintas. A rede Wifi do Mac não tem as mesmas configuracões da Ethernet.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

neuron_upheaval

#6
Oct 09, 2012, 03:00 pm Last Edit: Oct 09, 2012, 03:05 pm by neuron_upheaval Reason: 1
Para o provedor de serviços de internet, que talvez seja alguma empresa de telefonia ou de TV por cabo, o teu IP não é 192.168.2.1; o que quero dizer é que, fora da tua casa, o intervalo de IPs é diferente do que os IPs da internet:

Code: [Select]

+-----------+   +-----------+                  +---------+     +------------+
| Telemovel |ooo| Router 3G |++++ Internet xxxx| Airport |--+--| PC de mesa |
+-----------+   +-----------+               ^  +---------+  |  +------------+
                                           |  192.168.2.255|  192.168.2.35
                                           |               |  
                                           |               |  +---------+
                                           |               +--| Arduino |
                                           |                  +---------+
                                      172.6.39.12             Aqui é
                                                              192.168.2.1

Legenda: o, x, + e - são redes IP distintas; os IPs são todos fictícios, menos o do Arduino

O que o telemóvel pode aceder é o IP externo do teu Airport, que, no caso, é 172.6.39.12; entretanto, deve-se configurar também qual porta do Airport dará acesso direto ao Arduino. Por exemplo, quando digitares no navegador web
Code: [Select]

http://172.6.39.12:9080/

vais estar a aceder o Arduino pelo telemóvel ou qualquer outro equipamento que não esteja na mesma rede que o Arduino, caso o Airport tenha sido configurado com a porta 9080 a redirecionar tudo para o Arduino.

delacruz

ha algum exemplo que de para testar a comunicação para os dois lados?

HugoPT

A solucao para o teu problema e o que o colega indica.
Basta fazer isto:
Quote
O que o telemóvel pode aceder é o IP externo do teu Airport, que, no caso, é 172.6.39.12; entretanto, deve-se configurar também qual porta do Airport dará acesso direto ao Arduino. Por exemplo, quando digitares no navegador web
Code:

http://172.6.39.12:9080/


Num router normal terias de configurar uma regra de NAT.
No mac tens de criar tambem esta regra para que possas expor ao "mundo" esse serviço nessa porta.
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

delacruz

e como faço para descobrir qual o ip da rede antes de chegar ao airport?
hugopt, podias explicar melhor a regra nat?
obrigado pela ajuda

um dos primeiros lilnks do google foi este:

http://blog.netnerds.net/2012/07/os-x-how-to-setup-nat-on-lion-and-mountain-lion/
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

HugoPT

Quote
e como faço para descobrir qual o ip da rede antes de chegar ao airport?

Se bem entendi a tua pergunta queres saber qual o teu ip externo(dado pelo ISP) que se encontra actualmente no mac, digo actualmente porque caso nao tenhas ip fixo ele muda sempre que inicias a ligaçao de novo(podes contornar criando um cname dinamico tipo dyndns, no-ip...)
Podes facilmente descobrir esse ip basta ligares a pen e depois vesitares www.whatismyip.com(uma das formas, tens outras mais....)
Em relaçao ao NAT(network adress Translation) e um metodo de atravez de uma ligaçao colocares mais pc's atraz de um ip externo.Um exemplo disso e o que os routers fazem recebes o sinal do teu isp e depois o router fica com 2 interfaces de rede(podem ser mais), a externa com o ip externo e a interface interna(ips de classe C) que podem ser da gama 10.0.XXX.XXX ou 172.XXX.XXX.XXX. ou começados por 192.XXX.XXX.XXX
Como a net e passada para essas interfaces é criada uma barreira(firewall) onde para que alguem da net possa aceder a algum ip dentro da tua rede interna (exemplo do teu arduino) tem de ser criada uma regra de dnat para que possa "furar" a firewall
Desta forma o teu arduino fica acessivel a qualquer pessoa no mundo( :smiley-mr-green:)
A quando a criaçao da regra dnat tens de especificar a porta que queres expor e o ip interno onde ira apontar a regra(devera ser o ip do arduino se for ele o alvo da regra.

Espero que possas assim ter uma luz de como o NAT funciona, provavelmente estará longe de estar 100% correcto mas a idea é esta.
Ve o link do bubulindo


Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

delacruz

vou tentar partir alguma pedra nesse sentido, uma vez que nao sou grande entendido na materia.
obrigado pelas indicaçoes

delacruz

boas..
bom, nao sei o que fazer.. tentei abrir o caminho para o arduino, mas nao devo estar a fazer a coisa certa..
tentei com um programa (waterRoof) mas tambem sem grande resultado
apos um teste no site http://www.guiadocftv.com.br/modules/ferramentas/pag_nettools.php     em que da para testar as portas, apos meter os dados  apareceu a mensagem "Porta 80 está fechada." :~ :~
alguem tem conhecimento de algum tutorial basico para resolver este problema??
sugestoes aceitam-se
thkx

HugoPT

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

Go Up