Proyecto de cerradura usando Arduino Leonardo, GSM y Wifi o Bluetooth

Proyectos hechos por una persona o muy pequeño grupo a modo personal, no proyectos industriales.
Avatar de Usuario
Daniel
Mensajes: 11
Registrado: 16 May 2017, 07:58
Agradecido: 74 veces
Agradecimiento recibido: 9 veces

Re: Proyecto de cerradura usando Arduino Leonardo, GSM y Wifi o Bluetooth

Mensaje sin leer por Daniel »

Muy interesante el proyecto pero, ¿cómo de segura es una cerradura así? Con aquel fallo que salió de Bluetooth y los hackeos que hay cada 2x3.....

Tags:
Joselu
Mensajes: 20
Registrado: 13 Feb 2018, 08:49
Agradecido: 1 vez
Agradecimiento recibido: 9 veces

Re: Proyecto de cerradura usando Arduino Leonardo, GSM y Wifi o Bluetooth

Mensaje sin leer por Joselu »

Naguissa escribió: 19 Feb 2018, 09:07
Joselu escribió: 19 Feb 2018, 08:00
Naguissa escribió: 17 Feb 2018, 00:17 Has tenido en cuenta que ek ESP funciona a 3.3v, el Lonardo a 5v, y no son compatibles sin un adaptador de voltaje?
Lo he puesto directo, porque hay cientos de esquemas en Internet que conectan directamente el esp8266 a arduino con softwareserial, sin resistencias ni adaptadores, pero dos módulos que he probado se bloquean al conectarlo, tiene que ser otra cosa, hoy me pondré a ver si lo consigo
Espera, espara! Puedes quemar el ESP!!!

El Leonardo funciona a 5V pero el ESP no es tolerante a ello!

Como mínimo, pon un divisor de tensión en los pines de entrada del ESP, para no freírlo.

He intentado buscar el nivel mínimo de un pin a 1 para el Leonardo pero no lo encuentro; normalmente con 3.3v debería ya detectar un 1, así que no creo que haya problema en las salidas del ESP.


El esquema de un divisor de tensión para tu uso:

divisor tension.png
Hola, estoy esperando un convertidor de nivel lógico, de momento los conecto directo, por lo que parece aguantan bien, al final me he rendido a los comandos AT, son insufribles, llegué a hacerlo funcionar, pero es demasiado inestable, y tuve que hacer una rutina que chequeaba de vez en cuando si la respuesta a un comando era "no change" para saber si había cambiado o se había reseteado, pero no me convence para nada, al final voy a probarlo con el firmware de Arduino, he visto que es muy sencillo, pero no encuentro como limitar el numero de conexiones a la vez, ni como cambiar el puerto, o hacerla oculta, aunque creo que es en esta orden WiFi.softAP(ssid, password,channel,hidden); el puerto no se si es con esta otra: ESP8266WebServer server(80); y lo que no encuentro es como limitar el numero de conexiones simultaneas, pero poco a poco.
Un saludo
Estos usuarios agradecieron al autor Joselu por el mensaje:
Naguissa
Valoración: 33%
Joselu
Mensajes: 20
Registrado: 13 Feb 2018, 08:49
Agradecido: 1 vez
Agradecimiento recibido: 9 veces

Re: Proyecto de cerradura usando Arduino Leonardo, GSM y Wifi o Bluetooth

Mensaje sin leer por Joselu »

Daniel escribió: 20 Feb 2018, 11:29 Muy interesante el proyecto pero, ¿cómo de segura es una cerradura así? Con aquel fallo que salió de Bluetooth y los hackeos que hay cada 2x3.....
Hola, pues no se lo segura que puede ser, en principio debería serlo, porque solo seria un punto de acceso, para recibir datos por Bluetooth o por wifi, los datos irían directamente al serial de Arduino, y tendrían que empezar por un char determinado, un simbolo como $ o & o algo similar, todo lo que no comenzase por ese simbolo, lo borraría directamente del puerto serie, lo que no se es lo robusto que seria el bluetooth o el esp8266 a los ataques y si conseguirían bloquearlo, la puerta no creo que consiguieran abrirla, tampoco creo que nadie pierda el tiempo en esto si no va a poder acceder.
Estos usuarios agradecieron al autor Joselu por el mensaje:
Daniel
Valoración: 33%
Joselu
Mensajes: 20
Registrado: 13 Feb 2018, 08:49
Agradecido: 1 vez
Agradecimiento recibido: 9 veces

Re: Proyecto de cerradura usando Arduino Leonardo, GSM y Wifi o Bluetooth

Mensaje sin leer por Joselu »

He preparado este código a ver si funciona, lo que pasa es que ahora no tengo ningún esp8266 con firmware arduino, luego lo probaré a ver que tal, si funciona, si guarda la configuración, o hay que grabarla en la EEPROM y que acceda al arrancar, a ver que tal, luego haré unas pruebas.

Imagen

Creo que solo con la libreria ESP8266WiFi.h es suficiente, pero como desconozco totalmente este tema he puesto las que veo que mas se utilizan en el ESP8266, iré probando quitando librerías.

Un saludo
Estos usuarios agradecieron al autor Joselu por el mensaje:
Naguissa
Valoración: 33%
Avatar de Usuario
Naguissa
Administrador del Sitio
Mensajes: 484
Registrado: 04 Jul 2016, 11:17
Agradecido: 102 veces
Agradecimiento recibido: 134 veces

Re: Proyecto de cerradura usando Arduino Leonardo, GSM y Wifi o Bluetooth

Mensaje sin leer por Naguissa »

Joselu escribió: 21 Feb 2018, 17:40 He preparado este código a ver si funciona, lo que pasa es que ahora no tengo ningún esp8266 con firmware arduino, luego lo probaré a ver que tal, si funciona, si guarda la configuración, o hay que grabarla en la EEPROM y que acceda al arrancar, a ver que tal, luego haré unas pruebas.

Imagen

Creo que solo con la libreria ESP8266WiFi.h es suficiente, pero como desconozco totalmente este tema he puesto las que veo que mas se utilizan en el ESP8266, iré probando quitando librerías.

Un saludo
Para el hidden:

softAP(ssid, password, 8, 1);

El 1 final es el 'hiden'.


El resto de librerías si las necesitas:

La 1a es la base de la Wifi.
La 2a es para manejar los clientes que se conecten (etá claro que algo quieres hacer con ellos, además de conectarse, y se necesita para la 3a).
La 3a es el servidor web, el cual acepta clientes (2a librería) y luego puedes ya hacer lo que desees con ellos).

Si, además, quieres especificar una IP fija para el ESP:

Código: Seleccionar todo

[...]

IPAddress wifiIp(192, 168, 1, xxx);
IPAddress wifiNet(255, 255, 255, 0);
IPAddress wifiGW(192, 168, 1, xxx); // Opcional

void setupWiFi(void){
[...]
	WiFi.mode(WIFI_AP);
	WiFi.softAPConfig(wifiIp, wifiGW, wifiNet);
[...]
La clave es el comando: WiFi.softAPConfig
Joselu
Mensajes: 20
Registrado: 13 Feb 2018, 08:49
Agradecido: 1 vez
Agradecimiento recibido: 9 veces

Re: Proyecto de cerradura usando Arduino Leonardo, GSM y Wifi o Bluetooth

Mensaje sin leer por Joselu »

Naguissa escribió: 21 Feb 2018, 19:42

Para el hidden:

softAP(ssid, password, 8, 1);

El 1 final es el 'hiden'.


El resto de librerías si las necesitas:

La 1a es la base de la Wifi.
La 2a es para manejar los clientes que se conecten (etá claro que algo quieres hacer con ellos, además de conectarse, y se necesita para la 3a).
La 3a es el servidor web, el cual acepta clientes (2a librería) y luego puedes ya hacer lo que desees con ellos).

Si, además, quieres especificar una IP fija para el ESP:

Código: Seleccionar todo

[...]

IPAddress wifiIp(192, 168, 1, xxx);
IPAddress wifiNet(255, 255, 255, 0);
IPAddress wifiGW(192, 168, 1, xxx); // Opcional

void setupWiFi(void){
[...]
	WiFi.mode(WIFI_AP);
	WiFi.softAPConfig(wifiIp, wifiGW, wifiNet);
[...]
La clave es el comando: WiFi.softAPConfig
Hola Naguissa, sigo trasteando con el esp8266, mientras espero que me llegue el nuevo modulo bluetooth,
he hecho un programa, a base de mirar unos y otros, y leer lo que he podido entender, aunque sigo sin aclararme, es este:

Código: Seleccionar todo

[...]

#include <ESP8266WiFi.h>                  //Incluye la librería ESP8266WiFi
 
const char ssid[] = "missid";    //Definimos la SSDI de nuestro servidor WiFi -nombre de red- 
const char password[] = "12password21";       //Definimos la contraseña de nuestro servidor 
WiFiServer server(80);                    //Definimos el puerto de comunicaciones
 
 
void setup() {
  Serial.begin(115200);

 
  server.begin();                         //inicializamos el servidor
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);            //Red con clave, en el canal 1 y visible
  //WiFi.softAP(ssid, password,3,0);      //Red con clave, en el canal 3 no visible 
  //WiFi.softAP(ssid);                    //Red abierta
 
  Serial.println();
 
  Serial.print("Direccion IP Access Point - por defecto: ");      //Imprime la dirección IP
  Serial.println(WiFi.softAPIP()); 
  Serial.print("Direccion MAC Access Point: ");                   //Imprime la dirección MAC
  Serial.println(WiFi.softAPmacAddress()); 
 
  //IPAddress local_ip(192, 168, 1, 1);                           //Modifica la dirección IP 
  //IPAddress gateway(192, 168, 1, 1);   
  //IPAddress subnet(255, 255, 255, 0);
  //WiFi.softAPConfig(local_ip, gateway, subnet);
  //Serial.println();
  //Serial.print("Access Point - Nueva direccion IP: ");
  //Serial.println(WiFi.softAPIP());
}
 
void loop() 
{
  // Comprueba si el cliente se ha conectado
  WiFiClient client = server.available();  
  if (!client) {
    return;
  }
 
  // Espera hasta que el cliente envía alguna petición
  Serial.println("nuevo cliente");
  while(!client.available()){
    delay(1);
  }
 
  // Imprime el número de clientes conectados
  Serial.printf("Clientes conectados al Access Point: %dn", WiFi.softAPgetStationNum()); 
 
  // Lee la petición
  String peticion = client.readStringUntil('r');
  Serial.println(peticion);
  client.flush();
 
  // Envía la página HTML de respuesta al cliente
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println("Connection: close");// La conexión se cierra después de finalizar de la respuesta
    client.println();
    //Pagina html  para el navegador
    client.println("<!DOCTYPE HTML>");
    client.println("<html>");
    
      //client.println("HTTP/1.1 200 OK\r\nnContent-Type: /html\r\nConnection: close\r\n\r\n");
      
      client.println("<html>\n<head>\n<title>JOSELU</title>\n</head>\n<body>");
      client.println("<center>");
      
      client.println("<h2>Control de Acceso</h2>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/1' style='FONT-SIZE: 35pt;'> 1 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/2' style='FONT-SIZE: 35pt;'> 2 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/3' style='FONT-SIZE: 35pt;'> 3 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/A' style='FONT-SIZE: 35pt;'> A </button>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/4' style='FONT-SIZE: 35pt;'> 4 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/5' style='FONT-SIZE: 35pt;'> 5 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/6' style='FONT-SIZE: 35pt;'> 6 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/B' style='FONT-SIZE: 35pt;'> B </button>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/7' style='FONT-SIZE: 35pt;'> 7 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/8' style='FONT-SIZE: 35pt;'> 8 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/9' style='FONT-SIZE: 35pt;'> 9 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/C' style='FONT-SIZE: 35pt;'> C  </button>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/*' style='FONT-SIZE: 35pt;'> * </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/0' style='FONT-SIZE: 35pt;'> 0 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/E' style='FONT-SIZE: 35pt;'> # </button>");// le pongo como E, porque me sale un 
                                                                                                                 //  espacio en blanco y no el simbolo #
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/D' style='FONT-SIZE: 35pt;'> D </button>");
      client.println("</body></html>");  // Se finaliza la petición al cliente. Se inicaliza la espera de una nueva petición.
  //Desconexión de los clientes
  //WiFi.softAPdisconnect();*/
}
[...]
(esta basado en el ejemplo que se enciende y apaga un LED, desde un teléfono mobil), el tuyo también me ha ayudado bastante, gracias.

El caso es que a través de un portátil, me funciona perfectamente, me envia una botonera de 4x4 botones, cuando me conecto a través de su wifi
a 192.168.4.1, y al pulsar cada tecla, envía el numero o el símbolo asociado a cada una de ellas, al String peticion , y que lo lea y compare el Leonardo con su codigo de acceso, seria sencillo, sin embargo si me conecto desde un mobil, hay veces que funciona y otras que no (la mayoria), creo que puede ser por el numero de botones, porque cuando hice pruebas con solo dos botones funcionaba perfectamente, si puedes echarme una mano para depurarlo, o ver el montón de fallos que seguro que tendrá el programa te lo agradecería, aunque creo que me voy a quedar con el bluetooth, ya es un poco por cabezoneria, y porque creo que le pueda servir a alguien.
Seguiremos trasteando
Un saludo
Avatar de Usuario
Naguissa
Administrador del Sitio
Mensajes: 484
Registrado: 04 Jul 2016, 11:17
Agradecido: 102 veces
Agradecimiento recibido: 134 veces

Re: Proyecto de cerradura usando Arduino Leonardo, GSM y Wifi o Bluetooth

Mensaje sin leer por Naguissa »

Joselu escribió: 26 Feb 2018, 10:18
Naguissa escribió: 21 Feb 2018, 19:42

Para el hidden:

softAP(ssid, password, 8, 1);

El 1 final es el 'hiden'.


El resto de librerías si las necesitas:

La 1a es la base de la Wifi.
La 2a es para manejar los clientes que se conecten (etá claro que algo quieres hacer con ellos, además de conectarse, y se necesita para la 3a).
La 3a es el servidor web, el cual acepta clientes (2a librería) y luego puedes ya hacer lo que desees con ellos).

Si, además, quieres especificar una IP fija para el ESP:

Código: Seleccionar todo

[...]

IPAddress wifiIp(192, 168, 1, xxx);
IPAddress wifiNet(255, 255, 255, 0);
IPAddress wifiGW(192, 168, 1, xxx); // Opcional

void setupWiFi(void){
[...]
	WiFi.mode(WIFI_AP);
	WiFi.softAPConfig(wifiIp, wifiGW, wifiNet);
[...]
La clave es el comando: WiFi.softAPConfig
Hola Naguissa, sigo trasteando con el esp8266, mientras espero que me llegue el nuevo modulo bluetooth,
he hecho un programa, a base de mirar unos y otros, y leer lo que he podido entender, aunque sigo sin aclararme, es este:

Código: Seleccionar todo

[...]

#include <ESP8266WiFi.h>                  //Incluye la librería ESP8266WiFi
 
const char ssid[] = "missid";    //Definimos la SSDI de nuestro servidor WiFi -nombre de red- 
const char password[] = "12password21";       //Definimos la contraseña de nuestro servidor 
WiFiServer server(80);                    //Definimos el puerto de comunicaciones
 
 
void setup() {
  Serial.begin(115200);

 
  server.begin();                         //inicializamos el servidor
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);            //Red con clave, en el canal 1 y visible
  //WiFi.softAP(ssid, password,3,0);      //Red con clave, en el canal 3 no visible 
  //WiFi.softAP(ssid);                    //Red abierta
 
  Serial.println();
 
  Serial.print("Direccion IP Access Point - por defecto: ");      //Imprime la dirección IP
  Serial.println(WiFi.softAPIP()); 
  Serial.print("Direccion MAC Access Point: ");                   //Imprime la dirección MAC
  Serial.println(WiFi.softAPmacAddress()); 
 
  //IPAddress local_ip(192, 168, 1, 1);                           //Modifica la dirección IP 
  //IPAddress gateway(192, 168, 1, 1);   
  //IPAddress subnet(255, 255, 255, 0);
  //WiFi.softAPConfig(local_ip, gateway, subnet);
  //Serial.println();
  //Serial.print("Access Point - Nueva direccion IP: ");
  //Serial.println(WiFi.softAPIP());
}
 
void loop() 
{
  // Comprueba si el cliente se ha conectado
  WiFiClient client = server.available();  
  if (!client) {
    return;
  }
 
  // Espera hasta que el cliente envía alguna petición
  Serial.println("nuevo cliente");
  while(!client.available()){
    delay(1);
  }
 
  // Imprime el número de clientes conectados
  Serial.printf("Clientes conectados al Access Point: %dn", WiFi.softAPgetStationNum()); 
 
  // Lee la petición
  String peticion = client.readStringUntil('r');
  Serial.println(peticion);
  client.flush();
 
  // Envía la página HTML de respuesta al cliente
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println("Connection: close");// La conexión se cierra después de finalizar de la respuesta
    client.println();
    //Pagina html  para el navegador
    client.println("<!DOCTYPE HTML>");
    client.println("<html>");
    
      //client.println("HTTP/1.1 200 OK\r\nnContent-Type: /html\r\nConnection: close\r\n\r\n");
      
      client.println("<html>\n<head>\n<title>JOSELU</title>\n</head>\n<body>");
      client.println("<center>");
      
      client.println("<h2>Control de Acceso</h2>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/1' style='FONT-SIZE: 35pt;'> 1 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/2' style='FONT-SIZE: 35pt;'> 2 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/3' style='FONT-SIZE: 35pt;'> 3 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/A' style='FONT-SIZE: 35pt;'> A </button>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/4' style='FONT-SIZE: 35pt;'> 4 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/5' style='FONT-SIZE: 35pt;'> 5 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/6' style='FONT-SIZE: 35pt;'> 6 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/B' style='FONT-SIZE: 35pt;'> B </button>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/7' style='FONT-SIZE: 35pt;'> 7 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/8' style='FONT-SIZE: 35pt;'> 8 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/9' style='FONT-SIZE: 35pt;'> 9 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/C' style='FONT-SIZE: 35pt;'> C  </button>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/*' style='FONT-SIZE: 35pt;'> * </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/0' style='FONT-SIZE: 35pt;'> 0 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/E' style='FONT-SIZE: 35pt;'> # </button>");// le pongo como E, porque me sale un 
                                                                                                                 //  espacio en blanco y no el simbolo #
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/D' style='FONT-SIZE: 35pt;'> D </button>");
      client.println("</body></html>");  // Se finaliza la petición al cliente. Se inicaliza la espera de una nueva petición.
  //Desconexión de los clientes
  //WiFi.softAPdisconnect();*/
}
[...]
(esta basado en el ejemplo que se enciende y apaga un LED, desde un teléfono mobil), el tuyo también me ha ayudado bastante, gracias.

El caso es que a través de un portátil, me funciona perfectamente, me envia una botonera de 4x4 botones, cuando me conecto a través de su wifi
a 192.168.4.1, y al pulsar cada tecla, envía el numero o el símbolo asociado a cada una de ellas, al String peticion , y que lo lea y compare el Leonardo con su codigo de acceso, seria sencillo, sin embargo si me conecto desde un mobil, hay veces que funciona y otras que no (la mayoria), creo que puede ser por el numero de botones, porque cuando hice pruebas con solo dos botones funcionaba perfectamente, si puedes echarme una mano para depurarlo, o ver el montón de fallos que seguro que tendrá el programa te lo agradecería, aunque creo que me voy a quedar con el bluetooth, ya es un poco por cabezoneria, y porque creo que le pueda servir a alguien.
Seguiremos trasteando
Un saludo

Hay un sistema por el cuál asignas rutas a funciones y te quitas los problemas de ir procesando cada petición manualmente.

Te pongo tu código modificado y con comentarios:

Código: Seleccionar todo


#include <ESP8266WiFi.h>                  //Incluye la librería ESP8266WiFi
 
const char ssid[] = "missid";    //Definimos la SSDI de nuestro servidor WiFi -nombre de red- 
const char password[] = "12password21";       //Definimos la contraseña de nuestro servidor 
WiFiServer server(80);                    //Definimos el puerto de comunicaciones
 
 
void setup() {
  Serial.begin(115200);

// Aún no, lo inicializamos tras tener la IP y todo - No es necesario pero sí es buena práctica.
//  server.begin();                         //inicializamos el servidor 
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);            //Red con clave, en el canal 1 y visible
  //WiFi.softAP(ssid, password,3,0);      //Red con clave, en el canal 3 no visible 
  //WiFi.softAP(ssid);                    //Red abierta
 
  Serial.println();
 
  Serial.print("Direccion IP Access Point - por defecto: ");      //Imprime la dirección IP
  Serial.println(WiFi.softAPIP()); 
  Serial.print("Direccion MAC Access Point: ");                   //Imprime la dirección MAC
  Serial.println(WiFi.softAPmacAddress()); 

  //IPAddress local_ip(192, 168, 1, 1);                           //Modifica la dirección IP 
  //IPAddress gateway(192, 168, 1, 1);   
  //IPAddress subnet(255, 255, 255, 0);
  //WiFi.softAPConfig(local_ip, gateway, subnet);
  //Serial.println();
  //Serial.print("Access Point - Nueva direccion IP: ");
  //Serial.println(WiFi.softAPIP());

// Podríamos añadir mas rutas, para cada una de las cosas que desees hacer, así:
//server.on("/ruta", HTTP_POST, funcion_que_procesa_un_get_a_ruta);
//server.on("/ruta", HTTP_GET, funcion_que_procesa_un_post_a_ruta);
/**
 * Ejemplos que te pueden ser útiles:
server.on("/A", HTTP_GET, haPulsadoA);
server.on("/B", HTTP_GET, haPulsadoB);
server.on("/C", HTTP_GET, haPulsadoC);
[...]

Y definir esas funciones, que serían llamadas cuando pulse esos botones.
 */


// Como es la única ruta será la que SIEMPRE se ejecute
  server.processRequest(handleFiles);
  server.begin();
}
 
void loop() 
{
/**
Si usas las rutas ya no necesitas hacer nada de ésto:

  // Comprueba si el cliente se ha conectado
  WiFiClient client = server.available();  
  if (!client) {
    return;
  }
 
  // Espera hasta que el cliente envía alguna petición
  Serial.println("nuevo cliente");
  while(!client.available()){
    delay(1);
  }
 
// Esto podrías hacerlo cuando quisieras, aquí (con un delay o mirando los milis()) o en processRequest:
  // Imprime el número de clientes conectados
  Serial.printf("Clientes conectados al Access Point: %dn", WiFi.softAPgetStationNum()); 
 
 
// No necesario, ya lo gestiona él.
  //Desconexión de los clientes
  //WiFi.softAPdisconnect();*/
*/
}



void processRequest() 
{

	server.setContentLength(CONTENT_LENGTH_UNKNOWN);
	WiFiClient client = server.client();
	if (!client) {
		return;
	}
 
  // Imprime el número de clientes conectados
  Serial.printf("Clientes conectados al Access Point: %dn", WiFi.softAPgetStationNum()); 
 
  // Envía la página HTML de respuesta al cliente
   	server.send(200, "text/html", "");

    //Pagina html  para el navegador
    client.println("<!DOCTYPE HTML>");
    client.println("<html>");
    
      client.println("<html>\n<head>\n<title>JOSELU</title>\n</head>\n<body>");
      client.println("<center>");
      
      client.println("<h2>Control de Acceso</h2>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/1' style='FONT-SIZE: 35pt;'> 1 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/2' style='FONT-SIZE: 35pt;'> 2 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/3' style='FONT-SIZE: 35pt;'> 3 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/A' style='FONT-SIZE: 35pt;'> A </button>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/4' style='FONT-SIZE: 35pt;'> 4 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/5' style='FONT-SIZE: 35pt;'> 5 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/6' style='FONT-SIZE: 35pt;'> 6 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/B' style='FONT-SIZE: 35pt;'> B </button>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/7' style='FONT-SIZE: 35pt;'> 7 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/8' style='FONT-SIZE: 35pt;'> 8 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/9' style='FONT-SIZE: 35pt;'> 9 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/C' style='FONT-SIZE: 35pt;'> C  </button>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/*' style='FONT-SIZE: 35pt;'> * </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/0' style='FONT-SIZE: 35pt;'> 0 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/E' style='FONT-SIZE: 35pt;'> # </button>");// le pongo como E, porque me sale un 
                                                                                                                 //  espacio en blanco y no el simbolo #
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/D' style='FONT-SIZE: 35pt;'> D </button>");
      client.println("</body></html>");  // Se finaliza la petición al cliente. Se inicaliza la espera de una nueva petición.
  //Desconexión de los clientes
  //WiFi.softAPdisconnect();*/
}


Puedes ver un ejemplo de su uso aquí:

https://github.com/Naguissa/NaguissaSha ... Shapes.ino


Que corresponde a un juego de formas y colores usando un ESP8266 y un TFT.
Joselu
Mensajes: 20
Registrado: 13 Feb 2018, 08:49
Agradecido: 1 vez
Agradecimiento recibido: 9 veces

Re: Proyecto de cerradura usando Arduino Leonardo, GSM y Wifi o Bluetooth

Mensaje sin leer por Joselu »

Naguissa escribió: 21 Feb 2018, 19:42




Hay un sistema por el cuál asignas rutas a funciones y te quitas los problemas de ir procesando cada petición manualmente.

Te pongo tu código modificado y con comentarios:

Código: Seleccionar todo


#include <ESP8266WiFi.h>                  //Incluye la librería ESP8266WiFi
 
const char ssid[] = "missid";    //Definimos la SSDI de nuestro servidor WiFi -nombre de red- 
const char password[] = "12password21";       //Definimos la contraseña de nuestro servidor 
WiFiServer server(80);                    //Definimos el puerto de comunicaciones
 
 
void setup() {
  Serial.begin(115200);

// Aún no, lo inicializamos tras tener la IP y todo - No es necesario pero sí es buena práctica.
//  server.begin();                         //inicializamos el servidor 
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);            //Red con clave, en el canal 1 y visible
  //WiFi.softAP(ssid, password,3,0);      //Red con clave, en el canal 3 no visible 
  //WiFi.softAP(ssid);                    //Red abierta
 
  Serial.println();
 
  Serial.print("Direccion IP Access Point - por defecto: ");      //Imprime la dirección IP
  Serial.println(WiFi.softAPIP()); 
  Serial.print("Direccion MAC Access Point: ");                   //Imprime la dirección MAC
  Serial.println(WiFi.softAPmacAddress()); 

  //IPAddress local_ip(192, 168, 1, 1);                           //Modifica la dirección IP 
  //IPAddress gateway(192, 168, 1, 1);   
  //IPAddress subnet(255, 255, 255, 0);
  //WiFi.softAPConfig(local_ip, gateway, subnet);
  //Serial.println();
  //Serial.print("Access Point - Nueva direccion IP: ");
  //Serial.println(WiFi.softAPIP());

// Podríamos añadir mas rutas, para cada una de las cosas que desees hacer, así:
//server.on("/ruta", HTTP_POST, funcion_que_procesa_un_get_a_ruta);
//server.on("/ruta", HTTP_GET, funcion_que_procesa_un_post_a_ruta);
/**
 * Ejemplos que te pueden ser útiles:
server.on("/A", HTTP_GET, haPulsadoA);
server.on("/B", HTTP_GET, haPulsadoB);
server.on("/C", HTTP_GET, haPulsadoC);
[...]

Y definir esas funciones, que serían llamadas cuando pulse esos botones.
 */


// Como es la única ruta será la que SIEMPRE se ejecute
  server.processRequest(handleFiles);
  server.begin();
}
 
void loop() 
{
/**
Si usas las rutas ya no necesitas hacer nada de ésto:

  // Comprueba si el cliente se ha conectado
  WiFiClient client = server.available();  
  if (!client) {
    return;
  }
 
  // Espera hasta que el cliente envía alguna petición
  Serial.println("nuevo cliente");
  while(!client.available()){
    delay(1);
  }
 
// Esto podrías hacerlo cuando quisieras, aquí (con un delay o mirando los milis()) o en processRequest:
  // Imprime el número de clientes conectados
  Serial.printf("Clientes conectados al Access Point: %dn", WiFi.softAPgetStationNum()); 
 
 
// No necesario, ya lo gestiona él.
  //Desconexión de los clientes
  //WiFi.softAPdisconnect();*/
*/
}



void processRequest() 
{

	server.setContentLength(CONTENT_LENGTH_UNKNOWN);
	WiFiClient client = server.client();
	if (!client) {
		return;
	}
 
  // Imprime el número de clientes conectados
  Serial.printf("Clientes conectados al Access Point: %dn", WiFi.softAPgetStationNum()); 
 
  // Envía la página HTML de respuesta al cliente
   	server.send(200, "text/html", "");

    //Pagina html  para el navegador
    client.println("<!DOCTYPE HTML>");
    client.println("<html>");
    
      client.println("<html>\n<head>\n<title>JOSELU</title>\n</head>\n<body>");
      client.println("<center>");
      
      client.println("<h2>Control de Acceso</h2>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/1' style='FONT-SIZE: 35pt;'> 1 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/2' style='FONT-SIZE: 35pt;'> 2 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/3' style='FONT-SIZE: 35pt;'> 3 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/A' style='FONT-SIZE: 35pt;'> A </button>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/4' style='FONT-SIZE: 35pt;'> 4 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/5' style='FONT-SIZE: 35pt;'> 5 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/6' style='FONT-SIZE: 35pt;'> 6 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/B' style='FONT-SIZE: 35pt;'> B </button>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/7' style='FONT-SIZE: 35pt;'> 7 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/8' style='FONT-SIZE: 35pt;'> 8 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/9' style='FONT-SIZE: 35pt;'> 9 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/C' style='FONT-SIZE: 35pt;'> C  </button>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/*' style='FONT-SIZE: 35pt;'> * </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/0' style='FONT-SIZE: 35pt;'> 0 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/E' style='FONT-SIZE: 35pt;'> # </button>");// le pongo como E, porque me sale un 
                                                                                                                 //  espacio en blanco y no el simbolo #
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/D' style='FONT-SIZE: 35pt;'> D </button>");
      client.println("</body></html>");  // Se finaliza la petición al cliente. Se inicaliza la espera de una nueva petición.
  //Desconexión de los clientes
  //WiFi.softAPdisconnect();*/
}


Puedes ver un ejemplo de su uso aquí:

https://github.com/Naguissa/NaguissaSha ... Shapes.ino


Que corresponde a un juego de formas y colores usando un ESP8266 y un TFT.
Gracias, por las molestias, muy interesante tu codigo, al igual que el del juego de colores, lo he intentado probar pero me da un error
Imagen

¿puede ser que utilices alguna librería mas aparte de ESP8266wifi?
Avatar de Usuario
Naguissa
Administrador del Sitio
Mensajes: 484
Registrado: 04 Jul 2016, 11:17
Agradecido: 102 veces
Agradecimiento recibido: 134 veces

Re: Proyecto de cerradura usando Arduino Leonardo, GSM y Wifi o Bluetooth

Mensaje sin leer por Naguissa »

Error de copia-pega!

Ese handleFiles debería ser processRequest
Joselu escribió: 26 Feb 2018, 14:03
Naguissa escribió: 21 Feb 2018, 19:42




Hay un sistema por el cuál asignas rutas a funciones y te quitas los problemas de ir procesando cada petición manualmente.

Te pongo tu código modificado y con comentarios:

Código: Seleccionar todo


#include <ESP8266WiFi.h>                  //Incluye la librería ESP8266WiFi
 
const char ssid[] = "missid";    //Definimos la SSDI de nuestro servidor WiFi -nombre de red- 
const char password[] = "12password21";       //Definimos la contraseña de nuestro servidor 
WiFiServer server(80);                    //Definimos el puerto de comunicaciones
 
 
void setup() {
  Serial.begin(115200);

// Aún no, lo inicializamos tras tener la IP y todo - No es necesario pero sí es buena práctica.
//  server.begin();                         //inicializamos el servidor 
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);            //Red con clave, en el canal 1 y visible
  //WiFi.softAP(ssid, password,3,0);      //Red con clave, en el canal 3 no visible 
  //WiFi.softAP(ssid);                    //Red abierta
 
  Serial.println();
 
  Serial.print("Direccion IP Access Point - por defecto: ");      //Imprime la dirección IP
  Serial.println(WiFi.softAPIP()); 
  Serial.print("Direccion MAC Access Point: ");                   //Imprime la dirección MAC
  Serial.println(WiFi.softAPmacAddress()); 

  //IPAddress local_ip(192, 168, 1, 1);                           //Modifica la dirección IP 
  //IPAddress gateway(192, 168, 1, 1);   
  //IPAddress subnet(255, 255, 255, 0);
  //WiFi.softAPConfig(local_ip, gateway, subnet);
  //Serial.println();
  //Serial.print("Access Point - Nueva direccion IP: ");
  //Serial.println(WiFi.softAPIP());

// Podríamos añadir mas rutas, para cada una de las cosas que desees hacer, así:
//server.on("/ruta", HTTP_POST, funcion_que_procesa_un_get_a_ruta);
//server.on("/ruta", HTTP_GET, funcion_que_procesa_un_post_a_ruta);
/**
 * Ejemplos que te pueden ser útiles:
server.on("/A", HTTP_GET, haPulsadoA);
server.on("/B", HTTP_GET, haPulsadoB);
server.on("/C", HTTP_GET, haPulsadoC);
[...]

Y definir esas funciones, que serían llamadas cuando pulse esos botones.
 */


// Como es la única ruta será la que SIEMPRE se ejecute
  server.processRequest(handleFiles);
  server.begin();
}
 
void loop() 
{
/**
Si usas las rutas ya no necesitas hacer nada de ésto:

  // Comprueba si el cliente se ha conectado
  WiFiClient client = server.available();  
  if (!client) {
    return;
  }
 
  // Espera hasta que el cliente envía alguna petición
  Serial.println("nuevo cliente");
  while(!client.available()){
    delay(1);
  }
 
// Esto podrías hacerlo cuando quisieras, aquí (con un delay o mirando los milis()) o en processRequest:
  // Imprime el número de clientes conectados
  Serial.printf("Clientes conectados al Access Point: %dn", WiFi.softAPgetStationNum()); 
 
 
// No necesario, ya lo gestiona él.
  //Desconexión de los clientes
  //WiFi.softAPdisconnect();*/
*/
}



void processRequest() 
{

	server.setContentLength(CONTENT_LENGTH_UNKNOWN);
	WiFiClient client = server.client();
	if (!client) {
		return;
	}
 
  // Imprime el número de clientes conectados
  Serial.printf("Clientes conectados al Access Point: %dn", WiFi.softAPgetStationNum()); 
 
  // Envía la página HTML de respuesta al cliente
   	server.send(200, "text/html", "");

    //Pagina html  para el navegador
    client.println("<!DOCTYPE HTML>");
    client.println("<html>");
    
      client.println("<html>\n<head>\n<title>JOSELU</title>\n</head>\n<body>");
      client.println("<center>");
      
      client.println("<h2>Control de Acceso</h2>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/1' style='FONT-SIZE: 35pt;'> 1 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/2' style='FONT-SIZE: 35pt;'> 2 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/3' style='FONT-SIZE: 35pt;'> 3 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/A' style='FONT-SIZE: 35pt;'> A </button>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/4' style='FONT-SIZE: 35pt;'> 4 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/5' style='FONT-SIZE: 35pt;'> 5 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/6' style='FONT-SIZE: 35pt;'> 6 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/B' style='FONT-SIZE: 35pt;'> B </button>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/7' style='FONT-SIZE: 35pt;'> 7 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/8' style='FONT-SIZE: 35pt;'> 8 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/9' style='FONT-SIZE: 35pt;'> 9 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/C' style='FONT-SIZE: 35pt;'> C  </button>");
      client.println("<br/>");
      client.println("<br/>");
      client.println("<button type='button' onClick=location.href='/*' style='FONT-SIZE: 35pt;'> * </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/0' style='FONT-SIZE: 35pt;'> 0 </button>");
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/E' style='FONT-SIZE: 35pt;'> # </button>");// le pongo como E, porque me sale un 
                                                                                                                 //  espacio en blanco y no el simbolo #
      client.println("&nbsp;&nbsp");
      client.println("<button type='button' onClick=location.href='/D' style='FONT-SIZE: 35pt;'> D </button>");
      client.println("</body></html>");  // Se finaliza la petición al cliente. Se inicaliza la espera de una nueva petición.
  //Desconexión de los clientes
  //WiFi.softAPdisconnect();*/
}


Puedes ver un ejemplo de su uso aquí:

https://github.com/Naguissa/NaguissaSha ... Shapes.ino


Que corresponde a un juego de formas y colores usando un ESP8266 y un TFT.
Gracias, por las molestias, muy interesante tu codigo, al igual que el del juego de colores, lo he intentado probar pero me da un error
Imagen

¿puede ser que utilices alguna librería mas aparte de ESP8266wifi?
Joselu
Mensajes: 20
Registrado: 13 Feb 2018, 08:49
Agradecido: 1 vez
Agradecimiento recibido: 9 veces

Re: Proyecto de cerradura usando Arduino Leonardo, GSM y Wifi o Bluetooth

Mensaje sin leer por Joselu »

Hola Naguissa, lo tengo aparcado, porque me ha llegado el modulo hc-08, y estoy haciendo pruebas con el, el código sigue dándome error en esa parte, pero no he podido hacer mas pruebas, tampoco se exactamente que hay que cambiar para que no de error, ahora estoy liado con un programa para hacer apps para android, y me he hecho un teclado, pero de momento no va muy fino, solo es para que lo supieras, gracias por tu ayuda, cuando lo tenga funcionando lo colgaré en foro.
Saludos
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje