Go Down

Topic: Problema WiFi shield : errore nella connect (Read 2002 times) previous topic - next topic

zio90

Jul 03, 2013, 05:56 pm Last Edit: Jul 03, 2013, 08:31 pm by leo72 Reason: 1
Ciao a tutti, sto usando la formidabile coppia arduinoUNO-WiFi shield per connettermi al mio computer attraverso la rete internet;
Uso le librerie WiFI.h per ottenere un ip , e poi uso la socketIOClient per connettermi al pc con le socket.io...
Sul computer ho un server che ascolta la porta 3000..
Ma purtroppo non riesce a connettersi al server, questo è lo sketch:

Code: [Select]
#include "SocketIOClient.h"
#include "Ethernet.h"
#include "SPI.h"
#include "WiFi.h"

SocketIOClient client;

char ssid[] = "MIA RETE"; //  your network SSID (name)
char pass[] = ''MIA PASS"                                        

char hostname[] = "MIO_IP";
int port = 3000;
int status= WL_IDLE_STATUS;

void setup()
                               
             {
                 Serial.begin(9600)                                    
                      status = WiFi.begin(ssid, pass);
                   
                        if ( status != WL_CONNECTED) {
                     
                          Serial.println("Couldn't get a wifi connection");
                            // don't do anything else:
                      while(true);
                     
                   }
                   
                   else if(status == WL_CONNECTED){
                     
                           Serial.println("Connected to wifi");
                         IPAddress ip;
                         
                      ip = WiFi.localIP();
                         
                Serial.println(ip);
                Serial.println("\nConnessione al server ..\n");          /*ok fino a qui*/
                 
           //  client.setDataArrivedDelegate(ondata);
          client.connect(hostname,3000);
                       //  if (!client.connect(hostname,3000)) Serial.println(F("Not connected."));
                 
     if (client.connected()) {
               client.send("Client here!");    }
     else if(!client.connected()){
               Serial.println("errore connessione");  }
   }
 }


  void loop()
  {
         client.monitor();
         
  }
         
       
  // websocket message handler: do something with command from server
  void ondata(SocketIOClient client, char *data) {
         Serial.print(data);
}

cosa puo essere?

edit by mod: per favore includere il codice usando gli appositi tag

lesto

funziona usando senza passare da intenet, ma in rete locale?
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

zio90

Scusa , ma come dovrei fare per ''restare'' in rete locale?

pitusso

Ciao,
attenzione che se usi l'IDE 1.0.5 devi aggiornare il firmware dello shield Wifi con quello fornito insieme allo stesso IDE.
Per aggiornare:
http://arduino.cc/en/Hacking/WiFiShieldFirmwareUpgrading

Altrimenti prova con un IDE precedente (es. 1.0.4)

lesto

urca.. allora se fai ipconfig (windows) o ifconfig (linux) avrai l'elenco delle tue schede di rete. Il tuo ip LOCALE sarà PROBABILMENTE del tipo 192.168.1.X
il tuo ip REMOTO lo vedi da siti come www.mioip.com e normalmente è unico per tutti i PC (in pratica l'ip remoto è del router, che "nasconde" i vari PC dietro la NAT, che devi impostare per far vedere i PC all'esterno, in pratica quello che si fa per i server o programmi p2p come emule e company).

se hai fastweb dillo subiuto che è molto differente.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

zio90

@Lesto :  non sto usando l'ip globale, no no... sto usando l'ip locale  che leggo ogni volta facendo   ''ifconfig''  su ubuntu... Voglio semplicemente restare nella rete locale e mandare dei maledetti pacchetti Json ad un server che gira sul mio pc....  un server in javascript con node.js......

@Pitusso: si, sto usando la 1.05 e non ho mai aggiornato il firmware; domani mattina ho a disposizione la shield quindi provo ad utilizzare la 1.04 oppure ad aggiornare il firmware....

zio90

Ho sistemato un po il codice,  e sto utilizzando la versione 1.04 dell'IDE,  NON ho ancora aggiornato il firmware ;
1)  WiFi.begin(ssid)  funziona correttamente ed ottengo l'ip dell'arduino
2) client.connect(hostname,3000) non funziona, mi ritorna FALSE....


Code: [Select]

#include "SocketIOClient.h"
#include "Ethernet.h"
#include "SPI.h"
#include "WiFi.h"

SocketIOClient client;

char ssid[] = "CENTEC";

char hostname[] = "10.26.144.37";
int port = 3000;
int status= WL_IDLE_STATUS;

void ondata(SocketIOClient client, char *data) {
Serial.print(data);
}

void setup()
                 
               
              {
                  Serial.begin(9600);
                   Serial.println("Attempting to connect to the network...");
                     Serial.println(ssid);
                 
                       status = WiFi.begin(ssid);
                   
                         if ( status != WL_CONNECTED) {
                     
                                     Serial.println("Couldn't get a wifi connection");
                                     // don't do anything else:
                                     while(true);
                     
                                }
                   
                    else if(status == WL_CONNECTED){
                     
                      Serial.println("Connected to wifi");
                      IPAddress ip;
                         
                      ip = WiFi.localIP();
                         
                 Serial.println(ip);
                 
                 Serial.println("\nConnessione al server ..\n");


E fin qui è ok, poi
Code: [Select]

                 
             client.setDataArrivedDelegate(ondata);
         
         if (!client.connect(hostname,3000)) {Serial.println("Not connected.");
         }
      if (client.connected()) {
             client.send("Client here!");    }
    else if(!client.connected()){
               Serial.println("errore connessione");  }
    }
  }

 
   void loop()
   {
         client.monitor();
         
    }
         

lesto

scusa ma "10.26.144.37" che cos'è? poi sulla porta 3000...
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

zio90

E' l'ip del mio computer
Code: [Select]

wlan0     Link encap:Ethernet  IndirizzoHW c4:17:fe:02:54:10 
          indirizzo inet:10.26.144.37  Bcast:10.26.255.255  Maschera:255.255.0.0
          indirizzo inet6: fe80::c617:feff:fe02:5410/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:100662 errors:0 dropped:0 overruns:0 frame:0
          TX packets:59960 errors:0 dropped:0 overruns:0 carrier:0
          collisioni:0 txqueuelen:1000
          Byte RX:133756411 (133.7 MB)  Byte TX:7241182 (7.2 MB)


cos'è che non va nella 3000?

lesto

che non è un valore standard, quindi si presuppone che tu abbia un programma ad-hoc in ascolto sulla porta 3000 del tuo pc
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

zio90

Come faccio dall'arduino a mandare un semplice ping al server sulla 3000? cosi intanto vedo se il server è raggiungibile dall arduino..

lesto

i ping non sono su una porta, ma vanno verso un ip.

per fare un test apri dal terminale di un pc "telnet ip porta" e vedi se così ti colleghi.

Ma cosa ti aspetti di avere sulla porta 3000?
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

zio90

Sulla 3000 ho gia un server in ascolto, un server.coffee che funziona correttamente; perchè è stato gia testato con un client.coffee ...

Per quanto riguarda telnet
Code: [Select]

marco@marco-Aspire-5740:~$ telnet 10.26.144.37 3000
Trying 10.26.144.37...
Connected to 10.26.144.37.
Escape character is '^]'.

lesto

però dovresti provare da u naltro pc in rete interna, per verificare se sono i firewall di windows/router che danno problemi
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

zio90

#14
Jul 04, 2013, 02:52 pm Last Edit: Jul 04, 2013, 02:59 pm by zio90 Reason: 1
No, non credo sia problema di firewall, perchè all'interno della rete riesco a raggiungere il mio computer facendo un ping da un altro pc...
Il problema secondo me è nella libreria, ovvero SocketIOClient.h ; sono andato a vedere la definizione della funzione  "connect(hostname,port) ",

ed è fatta cosi :

Code: [Select]

bool SocketIOClient::connect(char thehostname[], int theport) {
if (!client.connect(thehostname, theport)) return false;
hostname = thehostname;
port = theport;
sendHandshake(hostname);
return readHandshake();
}


il problema è quell'  realHandshake() che non so che cosa faccia;  e mi risulta FALSE..

Go Up