arduino+ethernet shield+macbook+internet movel

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?

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??

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

bubulindo:
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.

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:

+-----------+   +-----------+                  +---------+     +------------+
| 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

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.

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

A solucao para o teu problema e o que o colega indica.
Basta fazer isto:

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.

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:

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( :grin:)
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

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

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

Tenta com isto a ver se consegues algo
https://discussions.apple.com/docs/DOC-3415