Pages: [1] 2 3   Go Down
Author Topic: Problema WiFi shield : errore nella connect  (Read 1459 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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
« Last Edit: July 03, 2013, 01:31:19 pm by leo72 » Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10448
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

funziona usando senza passare da intenet, ma in rete locale?
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2293
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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)
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10448
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@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....
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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:
                 
             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();
         
    }
         
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10448
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

scusa ma "10.26.144.37" che cos'è? poi sulla porta 3000...
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

E' l'ip del mio computer
Code:
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?
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10448
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

che non è un valore standard, quindi si presuppone che tu abbia un programma ad-hoc in ascolto sulla porta 3000 del tuo pc
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10448
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
marco@marco-Aspire-5740:~$ telnet 10.26.144.37 3000
Trying 10.26.144.37...
Connected to 10.26.144.37.
Escape character is '^]'.
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10448
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

però dovresti provare da u naltro pc in rete interna, per verificare se sono i firewall di windows/router che danno problemi
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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..
« Last Edit: July 04, 2013, 07:59:05 am by zio90 » Logged

Pages: [1] 2 3   Go Up
Jump to: