Pruebas ESP8266

Me llego un ESP8266, habia escuchado mucho sobre lo fascinante de este micro modulo Wifi. No lo creía hasta ahora.
Es mas estoy jugando con el asi, que cualquier idea para implementar es bienvenida:

Les dejo un pequeño codigo que revisa las redes Wifi disponibles y muestra por Monitor Serial los nombres y la intensidad de señal.

String mensaje = "";
String recibido ="";
int intensidad =0;
byte index=0;
byte inten[30];
String nombre[30];

#define DEBUG true

String sendData(String command, const int timeout, boolean debug){
  String response = "";
    Serial1.print(command); // send the read character to the esp8266
    long int time = millis();
    while( (time+timeout) > millis()){
      while(Serial1.available()){
        char c = Serial1.read(); // read the next character.
        response+=c;
      }  
    }
    if(debug)
    {
      Serial.print(response);
    }
    return response;
  }

void carga_lista(){
  unsigned long C_tiempo= millis();
  String command = "AT+CWLAP\r\n";
  Serial1.print(command);
}


void serialEvent1(){
  String nombre1   ="";
  byte intenso     = 0;
  byte inicio     = 0;
  byte final      = 0;
  byte inte_pos   = 0;
  //while(Serial1.available()<50){}
  while(Serial1.available()){
    char myChar = Serial1.read();

    if(myChar==10){
      Serial1.read();
      //Serial.println(recibido);
      if(recibido.startsWith("+CWLAP:(")){
        inte_pos = recibido.indexOf("(")+1;
        inicio = recibido.indexOf(",")+1;
        final  = recibido.indexOf(",",inicio);
        intenso = recibido.charAt(inte_pos)-'0';
        nombre1 = recibido.substring(inicio, final);
        //Serial.print("Inicio:\t");Serial.println(inicio);
        //Serial.print("Final :\t");Serial.println(final);
        nombre[index]=nombre1;
        inten[index]=intenso;
        //Serial.print("Nombre:\t");Serial.println(nombre1);
        //Serial.print("Intensidad:\t");Serial.println(intenso);
        index++;
      }
      recibido="";
    }else {
      recibido+=myChar;
    }
    //Serial.write(myChar);

  }
}


void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
  sendData("AT+RST\r\n",2000,DEBUG); // reset module
  sendData("AT+CWMODE=3\r\n",1000,DEBUG); // configure as access point
  sendData("AT+RST\r\n",2000,DEBUG); // reset module
  Serial.println("Listo");
  carga_lista();
}

unsigned long tiempo = millis();
void loop(){
  if(millis()-tiempo>10000){
    for(int i = 0; i < index; i++){
      Serial.print("Nombre:\t"); Serial.println(nombre[i]);
      Serial.print("Alcanc:\t"); Serial.println(inten[i]);
      Serial.println();
    }
    index=0;

    carga_lista();
    tiempo=millis();
  }
}

Comento que estoy realizando un servidor Web con este modulo que muestra la señal leída por un HC-SR04. Pero cuando hago la solicitud de datos desde una PC o tablet, los valores se alteran, y se vuelve inestable. Sigo trabajando, pero el codigo quedo en la oficina. Si alguien tiene idea de como solucionarlo les agradeceria.

max-saeta, lo mejor de este módulo es poder usarlo sin un Arduino.
Así tenemos un sistema IoT (Internet de las cosas) por menos de 3€.
En unos días publicaré un paso a paso de un sistema así. Controlar las salidas GPIO via wifi.

Jopapa

Me interesa. Ya que es muy fácil su uso y no requiere mucho para hacerlo funcionar. Pero por ahora lo estoy integrando a proyectos que ya tenia.

Jopapa estuve revisando tu pagina, bastante interesante. Sobretodo lo de la cierra para cortar las baquelitas, creo que te copiare.

Sigo jugando con los codigo. Este es una modificación del de arriba, solo que agrego un LCD/KEYPAD para mostrar las redes. Así pude ir por todo el edificio y buscar donde se original las redes wifi. Jajajaja.

#include <LiquidCrystal.h>

#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5
#define DEBUG  true

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


String mensaje  = "";
String recibido = "";
int intensidad  = 0;
int contador    = 0;
byte index      = 0;
byte inten[30];
String nombre[30];

//--------------------------------------------------------------------------------------------------
//          RUTINA DEL TECLADO
//--------------------------------------------------------------------------------------------------

int read_LCD_buttons()
{
  int adc_key_in = analogRead(0);      // read the value from the sensor 
  if (adc_key_in > 850) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
  if (adc_key_in < 50)   return btnRIGHT;  
  if (adc_key_in < 250)  return btnUP;  
  if (adc_key_in < 450)  return btnDOWN; 
  if (adc_key_in < 650)  return btnLEFT;   
  if (adc_key_in < 850)  return btnSELECT; 
  return btnNONE;  // when all others fail, return this...
}


String sendData(String command, const int timeout, boolean debug){
  String response = "";
    Serial1.print(command); // send the read character to the esp8266
    long int time = millis();
    while( (time+timeout) > millis()){
      while(Serial1.available()){
        char c = Serial1.read(); // read the next character.
        response+=c;
      }  
    }
    if(debug)
    {
      Serial.print(response);
    }
    return response;
  }


void carga_lista(){
  unsigned long C_tiempo= millis();
  String command = "AT+CWLAP\r\n";
  Serial1.print(command);
}


void serialEvent1(){
  String nombre1   ="";
  byte intenso     = 0;
  byte inicio     = 0;
  byte final      = 0;
  byte inte_pos   = 0;
  while(Serial1.available()){
    int myChar = Serial1.read();
    if(myChar==10){
      //Serial.println(recibido);
      //Serial1.read();
      if(recibido.startsWith("+CWLAP:(")){
        inte_pos = recibido.indexOf("(")+1;
        inicio = recibido.indexOf("\"")+1;
        final  = recibido.indexOf("\"",inicio);
        intenso = recibido.charAt(inte_pos)-'0';
        nombre1 = recibido.substring(inicio, final);
        nombre[index]=nombre1;
        inten[index]=intenso;
        //Serial.println(nombre1);
        index++;

      }
      recibido="";
    }else {
      recibido+=char(myChar);
    }
  }
}

void muestra(){
  if(index>=0){
    lcd.clear();
    lcd.print(nombre[contador]);
    lcd.setCursor(0,1);
    lcd.print("Intensidad: ");lcd.print(inten[contador]);
  }
}

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
  lcd.begin(16,2);
  lcd.print("Wifi Disponibles");
  sendData("AT+RST\r\n",2000,DEBUG); // reset module
  sendData("AT+CWMODE=3\r\n",1000,DEBUG); // configure as access point
  //sendData("AT+RST\r\n",2000,DEBUG); // reset module
  Serial.println("Listo");
  carga_lista();
  if(index>0)muestra();
}

unsigned long tiempo = millis();
void loop(){
  switch (read_LCD_buttons()) {
      case btnRIGHT:
        index=0;
        contador=0;
        while(read_LCD_buttons()==btnRIGHT){}
        carga_lista();
        muestra();
        break;
      case btnUP:
        while(read_LCD_buttons()==btnUP){}
          if(contador<index-1)contador++;
          muestra();
        break;
      case btnDOWN:
        if(contador>0)contador--;
        while(read_LCD_buttons()==btnDOWN){}
          muestra();
        break;

  }
}

Ok agrego imágenes para complementar.

Al mismo tiempo me disculpo es un codigo lo que quería colgar al principio pero se esta volviendo un proyecto.

Aunque por ahora es solo pruebas, creo que se para que los usare.

::slight_smile: Dios proveera :o

Jajaja, este es el subforo de software hablemos de politica en el de debate. jajajaja

Chicos que les pasa, max manda una respuesta de ESP8266 en otro post ahora ehrja habla de cualquier cosa en este jajajaja, necesitan vacaciones.

apoco no se dieron cuenta que así se llama una de las redes? :smiley:
never mind.

También tengo un modulo de esos, pero no he podido hacer nada, me enrolle un poco con los freemwares que hay disponibles y el trabajo que tengo pendiente.
pero esta interesante tu proyecto, me parece que puedes mostrar el numero de redes disponibles y en otra pantalla, presionando un boton x, un rastreador de señal de una red determinada, con una barra que represente la intensidad de la señal.

con eso puedes rastrear donde hay señal en una casa y/o detectar donde haría falta un repetidor, algo tambien muy util seria ver el canal de la señal, para evitar que la que se va a medir este en un canal cercano a otras.
ya se que eso lo hace un celular pero, quedaría bonito el proyecto.

Pues ya he terminado el tutorial de esp8266 sin usar Arduino.
Esta en Documentación.

Espero sea útil

Jopapa

Yo logre montar un servidor web con este tutorial y el ESP 8266, http://www.prometec.net/servidor-web-esp8266/, lo que no e conseguido es poder resivir imagenes desde este servidor y mostralas en el navegador, si alguien me puede ayudar se los agradeceria mucho.

Saludos
Podrias usar base64 para convertir la imagen en un arreglo de caracteres y asi enviarlo.