Aviso

El foro está en modo de sólo lectura.

ESP8266-01s para portalwifi

Más
5 años 9 meses antes #1513 por RedPitiusa
Respuesta de RedPitiusa sobre el tema ESP8266-01s para portalwifi
Saludos a todos !!
llevo ya un tiempo trasteando un este tema del portal wifi y la verdad que va muy bien pero ahora se me ha ocurrido una mejora y no se muy bien como lograrlo ..
bien, imagina que llega un amigo o alguien y quiere un cacharro de estos porque le va muy bien .. ok , tu le programas uno y se lo instalas y va de lujo.. el tema es que como eres tu quien lo programa , tu sabes la clave del punto de acceso y el usuario no sabrá como cambiarlo ( suponiendo que el usuario final no tenga los conocimientos para ello ) si no eres tu quien se lo cambie cosa que seguirías conociendo tu la clave cada vez que lo cambies y eso a veces resulta un poco raro, el echo de no tener la total privacidad de tu acceso.. si es para tu casa no pasa nada , pero si es para otro ... la cosa cambia ..
mi pregunta es , como generar una web que permita al usuario cambiar el nombre del AP , la clave del AP y lo guarde??
creo que es posible ... he visto un código que hace algo similar .. este código permite al usuario cambiar los datos de conexión ( ssid y pass ) de la esp8266 sin tener que re escribir el código.. lo hace desde una web de configuración que genera la propia esp ..

les dejare el código de ejemplo que vi , por si alguien sabe como adaptarlo para este caso ...

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>

//-------------------VARIABLES GLOBALES--------------------------
int contconexion = 0;
unsigned long previousMillis = 0;

char ssid[50];      
char pass[50];

const char *ssidConf = "tutorial";
const char *passConf = "12345678";

String mensaje = "";

//-----------CODIGO HTML PAGINA DE CONFIGURACION---------------
String pagina = "<!DOCTYPE html>"
"<html>"
"<head>"
"<title>Tutorial Eeprom</title>"
"<meta charset='UTF-8'>"
"</head>"
"<body>"
"</form>"
"<form action='guardar_conf' method='get'>"
"SSID:<br><br>"
"<input class='input1' name='ssid' type='text'><br>"
"PASSWORD:<br><br>"
"<input class='input1' name='pass' type='password'><br><br>"
"<input class='boton' type='submit' value='GUARDAR'/><br><br>"
"</form>"
"<a href='escanear'><button class='boton'>ESCANEAR</button></a><br><br>";

String paginafin = "</body>"
"</html>";

//------------------------SETUP WIFI-----------------------------
void setup_wifi() {
// Conexión WIFI
  WiFi.mode(WIFI_STA); //para que no inicie el SoftAP en el modo normal
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED and contconexion <50) { //Cuenta hasta 50 si no se puede conectar lo cancela
    ++contconexion;
    delay(250);
    Serial.print(".");
    digitalWrite(13, HIGH);
    delay(250);
    digitalWrite(13, LOW);
  }
  if (contconexion <50) {   
      Serial.println("");
      Serial.println("WiFi conectado");
      Serial.println(WiFi.localIP());
      digitalWrite(13, HIGH);  
  }
  else { 
      Serial.println("");
      Serial.println("Error de conexion");
      digitalWrite(13, LOW);
  }
}

//--------------------------------------------------------------
WiFiClient espClient;
ESP8266WebServer server(80);
//--------------------------------------------------------------

//-------------------PAGINA DE CONFIGURACION--------------------
void paginaconf() {
  server.send(200, "text/html", pagina + mensaje + paginafin); 
}

//--------------------MODO_CONFIGURACION------------------------
void modoconf() {
   
  delay(100);
  digitalWrite(13, HIGH);
  delay(100);
  digitalWrite(13, LOW);
  delay(100);
  digitalWrite(13, HIGH);
  delay(100);
  digitalWrite(13, LOW);

  WiFi.softAP(ssidConf, passConf);
  IPAddress myIP = WiFi.softAPIP(); 
  Serial.print("IP del acces point: ");
  Serial.println(myIP);
  Serial.println("WebServer iniciado...");

  server.on("/", paginaconf); //esta es la pagina de configuracion

  server.on("/guardar_conf", guardar_conf); //Graba en la eeprom la configuracion

  server.on("/escanear", escanear); //Escanean las redes wifi disponibles
  
  server.begin();

  while (true) {
      server.handleClient();
  }
}

//---------------------GUARDAR CONFIGURACION-------------------------
void guardar_conf() {
  
  Serial.println(server.arg("ssid"));//Recibimos los valores que envia por GET el formulario web
  grabar(0,server.arg("ssid"));
  Serial.println(server.arg("pass"));
  grabar(50,server.arg("pass"));

  mensaje = "Configuracion Guardada...";
  paginaconf();
}

//----------------Función para grabar en la EEPROM-------------------
void grabar(int addr, String a) {
  int tamano = a.length(); 
  char inchar[50]; 
  a.toCharArray(inchar, tamano+1);
  for (int i = 0; i < tamano; i++) {
    EEPROM.write(addr+i, inchar[i]);
  }
  for (int i = tamano; i < 50; i++) {
    EEPROM.write(addr+i, 255);
  }
  EEPROM.commit();
}

//-----------------Función para leer la EEPROM------------------------
String leer(int addr) {
   byte lectura;
   String strlectura;
   for (int i = addr; i < addr+50; i++) {
      lectura = EEPROM.read(i);
      if (lectura != 255) {
        strlectura += (char)lectura;
      }
   }
   return strlectura;
}

//---------------------------ESCANEAR----------------------------
void escanear() {  
  int n = WiFi.scanNetworks(); //devuelve el número de redes encontradas
  Serial.println("escaneo terminado");
  if (n == 0) { //si no encuentra ninguna red
    Serial.println("no se encontraron redes");
    mensaje = "no se encontraron redes";
  }  
  else
  {
    Serial.print(n);
    Serial.println(" redes encontradas");
    mensaje = "";
    for (int i = 0; i < n; ++i)
    {
      // agrega al STRING "mensaje" la información de las redes encontradas 
      mensaje = (mensaje) + "<p>" + String(i + 1) + ": " + WiFi.SSID(i) + " (" + WiFi.RSSI(i) + ") Ch: " + WiFi.channel(i) + " Enc: " + WiFi.encryptionType(i) + " </p>\r\n";
      //WiFi.encryptionType 5:WEP 2:WPA/PSK 4:WPA2/PSK 7:open network 8:WPA/WPA2/PSK
      delay(10);
    }
    Serial.println(mensaje);
    paginaconf();
  }
}

//------------------------SETUP-----------------------------
void setup() {

  pinMode(13, OUTPUT); // D7 
  
  // Inicia Serial
  Serial.begin(115200);
  Serial.println("");

  EEPROM.begin(512);

  pinMode(14, INPUT);  //D5
  if (digitalRead(14) == 0) {
    modoconf();
  }

  leer(0).toCharArray(ssid, 50);
  leer(50).toCharArray(pass, 50);

  setup_wifi();
}

//--------------------------LOOP--------------------------------
void loop() {

  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= 5000) { //envia la temperatura cada 5 segundos
    previousMillis = currentMillis;
    Serial.println("Funcionado...");
  }
}


este ejemplo lo que hace es que al entrar en modo AP , genera una web de configuración donde no permite cambiar los datos y grabarlos en la EEPROM para luego tomar de allí mismo los datos de conexión ..
yo llevo unos dias probando he intentado adaptar esta funcionalidad al proyecto de portal wifi pero de momento no lo consigo ..
espero a ver si alguien me echa una mano en esto..!!!

gracias !!
Más
5 años 9 meses antes #1514 por Jose Luis
Respuesta de Jose Luis sobre el tema ESP8266-01s para portalwifi
Entiendo lo que quieres hacer., pero como tengo hecho yo el proyecto no me convence. El portalwifi trabaja en modo Ap, con lo que no va a conectarse a otra web. Habria que cambiar a que funcione como ap mas cliente, nunca lo he probado.

Lo mas facil, creo yo, es que se instale con el nombre y la clave por omision, y una vez indentidicado, poder añadirle un pequeño formulario de cambiar clave.
No veo mucho problema en hacerlo, eso si, para poder hacer esto , has de guardar y recuperar la clave de la memoria eeprom, si no lo haces asi, cada vez que quites tension vovlera a los datos por omision.

Un saludo tio.
Más
5 años 9 meses antes - 5 años 9 meses antes #1515 por Jose Luis
Respuesta de Jose Luis sobre el tema ESP8266-01s para portalwifi
Por cierto, tengo un par de videos por ahi donde clono el mando de un huevo vbrador (en el canal de youtube). Pues bien, tambien he usado un wemos (tarjeta con esp8266) para simular el mando, usando un emisor rf y y activando y desactivando el mando desde internet (fuera de mi intranet). Es algo interesante para futuros proyectos, porque ademas el wemos mini pro, que es el que compre yo, aparte de una antena en placa decente, trae un conector para antena externa, con lo que se deberia ganar mucho en cobertura.
Última Edición: 5 años 9 meses antes por Jose Luis.
Más
5 años 9 meses antes - 5 años 9 meses antes #1516 por Jose Luis
Respuesta de Jose Luis sobre el tema ESP8266-01s para portalwifi
No habia mirado el codigo, ya veo que haces lo que yo comentaba. :D

Me adelante sin mirar lo que querias hacer con el codigo. Como decias ir a una web, pense que te referias a otra, no incluir el codigo dentro del web server del wifi portal.
Última Edición: 5 años 9 meses antes por Jose Luis.
Más
5 años 9 meses antes #1517 por RedPitiusa
Respuesta de RedPitiusa sobre el tema ESP8266-01s para portalwifi
Ya.. si mas o menos la idea esta.. pero no logro encajar bien el código.. puedes echarme un cable con ello??
Más
5 años 9 meses antes #1518 por Jose Luis
Respuesta de Jose Luis sobre el tema ESP8266-01s para portalwifi
Ahora mismo estoy de trabajao hasta la coronilla, hasta mediados de septiembre no me llega la tranquilidad de nuevo. Intentare probarlo, pero si te corre prisa no te puedo garantizar nada.

Que problemas te esta dando y que es lo que no te funciona?
Tiempo de carga de la página: 0.108 segundos
Gracias a Foro Kunena