Autor Tema: [RESUELTO] Wifi shield " Wifi shield not present"  (Leído 7015 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
[RESUELTO] Wifi shield " Wifi shield not present"
« en: 09 de Diciembre de 2014, 08:32:45 »
Hola, quiero utilizar la Wifi shield de arduino para hacer pruebas en mi casa tipo domotica.
Me la compre hace unos días en mouser y me costo unos 70 euros.
Cuando cargue el programa de ejemplo me salio en el terminal Wifi shield not present.
Buscando encontré que hay que cambiar el el firmware, lo cambie siguiendo las instrucciones.
Conseguí hacer el upgrade del firmware.
Volví a cargar varios códigos de ejemplo y me seguía saliendo lo mismo.
Vi en un foro que uno tuvo que downgradear el arduino a la versión 1.4, yo hice lo mismo de la 1.6 a la 1.4.
Pero aun así me sigue sin detectar la wifi shield.
Tengo también instalado el driver de la tarjeta wifi shield, me la detecta windows.
Ya no se por donde seguir.
Si alguien de este foro se a ha visto en esta situación me podría echar una mano.
Si necesitan cualquier información adicional, pidanmela.
He buscado en el foro oficial de arduino y he seguido las instrucciones, pero no me funciona.

« Última modificación: 10 de Diciembre de 2014, 07:57:19 por Trust »

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Error con Wifi shield " Wifi shield not present"
« Respuesta #1 en: 09 de Diciembre de 2014, 10:24:17 »
qué wifi shield en específico usas?

porque yo tengo el de elecrow y los ejemplos que vienen en IDE de arduino no me funcionaron, tuve que bajarme los que daba el fabricante en su sitio.
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Re: Error con Wifi shield " Wifi shield not present"
« Respuesta #2 en: 09 de Diciembre de 2014, 13:40:10 »
Hola PalitroqueZ, gracias por tu ayuda.
La shield que tengo es la propia que vende Arduino.
Arduino Wifi shield

Actualiza el firmware 2 veces, por si me equivoque.
Probé con el IDE 1.0.6, también con el 1.0.4 según leí de un usuario del foro oficial.
Tendré que releer todo y actualizar otra vez por si se me escapó alguna cosa ya que todo lo que leí estaba en inglés.
Espero que haya alguien de este foro que tenga esta shield y sepa que hacer.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Error con Wifi shield " Wifi shield not present"
« Respuesta #3 en: 09 de Diciembre de 2014, 16:54:31 »
Trust ese shield no lo había visto, y por lo que dice su datasheet dice que el firmware interno ha cambiado en el IDE 1.0.4

que raro que no traiga antena  :shock:

el que yo uso es separado:

http://www.elecrow.com/wiki/index.php?title=WiFi_Shield



 
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Error con Wifi shield " Wifi shield not present"
« Respuesta #4 en: 09 de Diciembre de 2014, 18:24:06 »
Soy yo o me parece demasiado caro 78 euros por wi-fi?

Citar
que raro que no traiga antena

Yo tambien busque eso y nada,, tendra una antenita en el PCB ?

Tambien vi en este documento
http://www.mouser.com/catalog/specsheets/ArduinoWiFiShield.pdf

Que depende de la tarjeta si es mas vieja que una Uno rev3 o Mega2560 rev3 deberias usar un jumper, si tenes una de esas nuevas entonces deberias sacarlo. Podria ser eso y no cuestion de firmware nomas?
"The WiFi board uses the IOREF pin on newer Arduino pin layouts (Uno rev3, Mega2560 rev3, and later) to sense the reference voltage for the I/O pins of the board to which it is attached."


EDIT:
Pense que era con eso que detectaba la tarjeta pero no, mirando el codigo de wifi.cpp y wifi_drv.cpp hace una coneccion SPI al shield y depende de lo que responda es el valor que da, documentado que devuelve el valor de la MAC.
Pero en los foros muestran que responden con distintas constantes segun sea el caso de que este conectado o no y otro mas.
https://github.com/arduino/Arduino/tree/master/libraries/WiFi
« Última modificación: 09 de Diciembre de 2014, 18:43:24 por KILLERJC »

Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Re: Error con Wifi shield " Wifi shield not present"
« Respuesta #5 en: 10 de Diciembre de 2014, 02:52:33 »
Que depende de la tarjeta si es mas vieja que una Uno rev3 o Mega2560 rev3 deberias usar un jumper, si tenes una de esas nuevas entonces deberias sacarlo. Podria ser eso y no cuestion de firmware nomas?
"The WiFi board uses the IOREF pin on newer Arduino pin layouts (Uno rev3, Mega2560 rev3, and later) to sense the reference voltage for the I/O pins of the board to which it is attached."
Muchas gracias KILLERJC, ahora ya me funciona.
Gracias también PalitroqueZ.

Voy a ir probando cosas y si consigo hacer algo decente lo expondré aquí.

Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Re: Error con Wifi shield " Wifi shield not present"
« Respuesta #6 en: 10 de Diciembre de 2014, 07:51:11 »
Hola, lo prometido es deuda.
Ya tengo algo decente que mostrar.
Aunque sea un código muy básico, es fundamental comprender como funciona para conseguir mejorarlo y hacer aplicaciones interesantes.
Encontré este ejemplo, lo estudie a fondo, me he permitido el derecho de traducir los comentarios.

Código: [Seleccionar]
#include <SPI.h>
#include <WiFi.h>

char ssid[] = "nombredetured";      //  Nombre red
char pass[] = "tucontraseña";   // Contraseña
int keyIndex = 0;                 // solo para wep
char server_IP[] = "www.google.com";
unsigned long test_flag=0;
int i=0;
int status = WL_IDLE_STATUS;
WiFiClient client_IP;
WiFiServer server(80);

void setup() {
  Serial.begin(9600);     
  pinMode(9, OUTPUT);     

  // Comprueba la presencia de la wifi shield
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield no presente");
    while(true);        // no continua
  }

  // Conectando a la red wifi:
  while ( status != WL_CONNECTED) {
    Serial.print("Conectado a la red llamada: ");
    Serial.println(ssid);                   // Imprime en pantalla el nombre de red (SSID);

    // Conectado a red WPA/WPA2. Cambia esta linea si estas conectando a conexion wep:   
    status = WiFi.begin(ssid, pass);
    // espera 10 segundos para conectarse:
    delay(10000);
  }
  server.begin();                           // empieza la conexion en el puerto 80
  printWifiStatus();                        // estas conectado, imprime en pantalla tu conexion
}


void loop() {
 
  if(Serial.available() > 0){
    byte inChar;
    inChar = Serial.read();
   
   if(inChar == 'a'){
    Serial.println("\nStarting connection to dnsdynamic...");
  // si tienes conexion, reporta via serial:
  if (client_IP.connect(server_IP, 80)) {
    Serial.println("conectado al servidor");
   
    client_IP.println("GET / HTTP/1.1");
    client_IP.println("Host:www.google.com");
    client_IP.println("conexion: cerrada");
    client_IP.println();
   
  }
 else {
    Serial.println("fallo de conexion");
    Serial.println();
  }
  int b = client_IP.available();
    while(client_IP.connected() && !client_IP.available()) delay(1); //espera los datos
  while (client_IP.connected() || client_IP.available()) { //conexion de datos disponible
    char c = client_IP.read();
    Serial.print(c);
    //Serial.println(b,DEC);
  }

  Serial.println();
  Serial.println("desconectando.");
  Serial.println("==================");
  Serial.println();
  client_IP.flush();
  client_IP.stop();
 
 
  }
   
   
  }
  client_IP.flush();
  WiFiClient client = server.available();   // escuchando clientes entrantes
  //test_flag=test_flag+1;
  //Serial.println(test_flag,DEC);
 
  if (client) {                             // si tienes un cliente,
    Serial.println("nuevo cliente");           // imprime un dato por puerto serie
    String currentLine = "";                // hacer una cadena para almacenar los datos entrantes desde el cliente
    while (client.connected()) {            // bucle mientras el cliente está conectado
      if (client.available()) {             // si hay bytes a leer desde el cliente,
        char c = client.read();             // lee un byte entonces
        Serial.write(c);                    // imprimir en el monitor serie
        if (c == '\n') {                    // si el byte es un carácter de nueva línea

          // si la línea actual está en blanco, tienes dos caracteres de nueva línea en una fila.
           // Que es el final de la petición HTTP del cliente, por lo que enviar una respuesta:
          if (currentLine.length() == 0) { 
            // HTTP encabezados siempre comienzan con un código de respuesta (por ejemplo, HTTP / 1.1 200 OK)
             // Y un tipo de contenido para que el cliente sabe lo que viene, y luego una línea en blanco:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();

            // el contenido de la respuesta HTTP sigue al encabezado:
            client.print("Click <a href=\"/H\">aqui</a> para encender el led del pin 9 on<br>");
            client.print("Click <a href=\"/L\">aqui</a> para apagar el led del pin 9 off<br>");

            // La respuesta HTTP termina con otra línea en blanco:
            client.println();
            // romper el bucle while:
            break;         
          }
          else {      // Si recibió una nueva línea, currentline luego despejado:
            currentLine = "";
          }
        }     
        else if (c != '\r') {    // si tienes otra cosa que un carácter de retorno de carro,
          currentLine += c;      // añadirlo a la final de la línea actual
        }

        // Compruebe si la solicitud del cliente era "GET / H" o "GET / L":
        if (currentLine.endsWith("GET /H")) {
          digitalWrite(9, HIGH);               // GET / H Enciende el LED
        }
        if (currentLine.endsWith("GET /L")) {
          digitalWrite(9, LOW);                // GET /L apaga el led
        }
      }
    }
    // cierra la conexion:
    client.stop();
    Serial.println("client disonnected");
   
  }
}

void printWifiStatus() {
  // imprimir el SSID de la red a la que está conectado a:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // imprime la direccion ip de tu wifi shield:
  IPAddress ip = WiFi.localIP();
  Serial.print("Direccion IP: ");
  Serial.println(ip);

  // imprimir la intensidad de señal recibida:
  long rssi = WiFi.RSSI();
  Serial.print("Intensidad de la señal (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
  // Imprimir dónde ir en un navegador:
  Serial.print("Para ver esta página en acción, abra un navegador  http://");
  Serial.println(ip);
}


Este ejemplo simplemente enciende y apaga un led desde el navegador.
Lo he probado en el pc, la tablet y el movil siempre por wifi. Tengo que averiguar como hacerlo sin estar conectado via wifi.
Su funcionamiento es sencillo, detecta la conexión wifi, espera 10 segundo y muestra datos de la conexión como la intensidad de la señal y la dirección ip que hay que poner en el navegador. Aparecerán dos lineas una para encender y la otra para apagar el led.
Espero que este ejemplo le sirva a alguien.
Cualquier duda, pregunten y ayudare en lo posible.

 :)

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: [RESUELTO] Wifi shield " Wifi shield not present"
« Respuesta #7 en: 10 de Diciembre de 2014, 21:19:02 »
Muchas gracias por tu aporte Trust

 :)
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Re: [RESUELTO] Wifi shield " Wifi shield not present"
« Respuesta #8 en: 14 de Diciembre de 2014, 09:42:44 »
Hola, he hecho un programa sencillo en Visual Basic 2012 para encender/apagar un led.   :lol:

Con un botón hago la función de encender/apagar el led.
Uso un control Webbrowser para enviar el comando a la dirección ip de la wifi shield.
A partir de este sencillo ejemplo se pueden hacer cosas interesantes con poco código.
He visto otros códigos para hacer cosas parecidas pero son bastante mas complejos para mi.  :shock:
Si alguien sabe como acceder desde el movil sin usar el wifi a la wifi shield me podria ayudar.  ((:-))

Código: vb.net
  1. Public Class Form1
  2.     Dim estado As Integer
  3.  
  4.     Private Sub b3_Click(sender As Object, e As EventArgs) Handles b3.Click
  5.         If estado = 1 Then
  6.             b3.Text = "apagar"
  7.             w1.Navigate("192.168.1.140/H")
  8.         ElseIf estado = 0 Then
  9.             b3.Text = "encender"
  10.             w1.Navigate("192.168.1.140/L")
  11.         End If
  12.         estado = estado + 1
  13.         If estado = 2 Then
  14.             estado = 0
  15.         End If
  16.     End Sub
  17.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
  18.         estado = 1
  19.     End Sub
  20. End Class

Espero les sea útil.
« Última modificación: 15 de Diciembre de 2014, 03:08:06 por Trust »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: [RESUELTO] Wifi shield " Wifi shield not present"
« Respuesta #9 en: 14 de Diciembre de 2014, 11:37:24 »
Citar
w1.Navigate("192.168.1.140/H")
w1.Navigate("192.168.1.140/L")

Estas usando 2 paginas ? con lo cual al acceder a la pagina ejecuta un codigo, es correcto lo que planteo ?.
Lo mas seguro que todos los demas codigos terminen pasando sus datos por GET o POST (a una misma pagina) por eso se complica mas el programa.

Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Re: [RESUELTO] Wifi shield " Wifi shield not present"
« Respuesta #10 en: 14 de Diciembre de 2014, 13:13:58 »
Es correcto lo que dices, accedo a una ip enviandole diferentes datos para que haga una cosa u otra.
En otros códigos usan GET y POST, y me resulta más dificil entender esos códigos porque los he probado y me dan errores que aún no se solucionar.
Sabes como conectarme a la wifi shield desde una red remota?
Estoy leyendo sobre eso pero no me termino de aclarar y quiero hacer pruebas para poder ejecutar codigos estando fuera del alcance del wifi.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: [RESUELTO] Wifi shield " Wifi shield not present"
« Respuesta #11 en: 14 de Diciembre de 2014, 14:47:51 »
Es correcto lo que dices, accedo a una ip enviandole diferentes datos para que haga una cosa u otra.
En otros códigos usan GET y POST, y me resulta más dificil entender esos códigos porque los he probado y me dan errores que aún no se solucionar.
Sabes como conectarme a la wifi shield desde una red remota?
Estoy leyendo sobre eso pero no me termino de aclarar y quiero hacer pruebas para poder ejecutar codigos estando fuera del alcance del wifi.

Primero te explico masomenos, como dije vos estas abriendo 2 paginas, mientras que los demas usan el GET y POST. Estos ultimos son parecidos. Nomas que sus variables se pasan por distintos lados.

Las variables del GET se pasan por la URL, ejemplo
/foros/index.php?board=59.0
donde board es la variable

Ademas se hace una peticion GET

Cabecera HTTP:
Citar
Request URL:http://www.todopic.com.ar/foros/index.php?board=59.0
Request Method:GET
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: es-ES,es;q=0.8,en;q=0.6
Cache-Control: max-age=0
Connection: keep-alive
Cookie: mi cookie en este caso
Host: www.todopic.com.ar
If-Modified-Since: Sun, 14 Dec 2014 17:39:41 GMT
Referer: blabla
User-Agent: bla bla

Por POST se realiza de otra forma, no quedan a la vista en la URL, el metodo se cambia por POST y los datos a enviar se hacen dentro de la cabecera HTTP

Citar
POST /foo.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/test.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
 
first_name=John&last_name=Doe&action=Submit

Generalmente GET para tomar datos ( lees la pagina ) y POST cuando realizas un cambio ( mandarle algo a la pagina y que te devuelva lo que corresponda )

Citar
Sabes como conectarme a la wifi shield desde una red remota?
Te referis a que sea posible accederlo desde internet ? no, realmente no lo se. Me quedo dentro de la LAN o WLAN que se encuentre el mismo.