Proyecto de cerradura usando Arduino Leonardo, GSM y Wifi o Bluetooth
-
- 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
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:
-
- 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
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.Naguissa escribió: ↑19 Feb 2018, 09:07Espera, espara! Puedes quemar el ESP!!!Joselu escribió: ↑19 Feb 2018, 08:00Lo 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
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
Un saludo
- Estos usuarios agradecieron al autor Joselu por el mensaje:
- Naguissa
- Valoración: 33%
-
- 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
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%
-
- 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
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.
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
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%
-
- Administrador del Sitio
- Mensajes: 502
- Registrado: 04 Jul 2016, 11:17
- Agradecido: 110 veces
- Agradecimiento recibido: 134 veces
Re: Proyecto de cerradura usando Arduino Leonardo, GSM y Wifi o Bluetooth
Para el hidden: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.
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
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);
[...]
-
- 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
Hola Naguissa, sigo trasteando con el esp8266, mientras espero que me llegue el nuevo modulo bluetooth,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:
La clave es el comando: WiFi.softAPConfigCó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); [...]
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("  ");
client.println("<button type='button' onClick=location.href='/2' style='FONT-SIZE: 35pt;'> 2 </button>");
client.println("  ");
client.println("<button type='button' onClick=location.href='/3' style='FONT-SIZE: 35pt;'> 3 </button>");
client.println("  ");
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("  ");
client.println("<button type='button' onClick=location.href='/5' style='FONT-SIZE: 35pt;'> 5 </button>");
client.println("  ");
client.println("<button type='button' onClick=location.href='/6' style='FONT-SIZE: 35pt;'> 6 </button>");
client.println("  ");
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("  ");
client.println("<button type='button' onClick=location.href='/8' style='FONT-SIZE: 35pt;'> 8 </button>");
client.println("  ");
client.println("<button type='button' onClick=location.href='/9' style='FONT-SIZE: 35pt;'> 9 </button>");
client.println("  ");
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("  ");
client.println("<button type='button' onClick=location.href='/0' style='FONT-SIZE: 35pt;'> 0 </button>");
client.println("  ");
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("  ");
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();*/
}
[...]
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
-
- Administrador del Sitio
- Mensajes: 502
- Registrado: 04 Jul 2016, 11:17
- Agradecido: 110 veces
- Agradecimiento recibido: 134 veces
Re: Proyecto de cerradura usando Arduino Leonardo, GSM y Wifi o Bluetooth
Joselu escribió: ↑26 Feb 2018, 10:18Hola Naguissa, sigo trasteando con el esp8266, mientras espero que me llegue el nuevo modulo bluetooth,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:
La clave es el comando: WiFi.softAPConfigCó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); [...]
he hecho un programa, a base de mirar unos y otros, y leer lo que he podido entender, aunque sigo sin aclararme, es este:(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.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("  "); client.println("<button type='button' onClick=location.href='/2' style='FONT-SIZE: 35pt;'> 2 </button>"); client.println("  "); client.println("<button type='button' onClick=location.href='/3' style='FONT-SIZE: 35pt;'> 3 </button>"); client.println("  "); 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("  "); client.println("<button type='button' onClick=location.href='/5' style='FONT-SIZE: 35pt;'> 5 </button>"); client.println("  "); client.println("<button type='button' onClick=location.href='/6' style='FONT-SIZE: 35pt;'> 6 </button>"); client.println("  "); 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("  "); client.println("<button type='button' onClick=location.href='/8' style='FONT-SIZE: 35pt;'> 8 </button>"); client.println("  "); client.println("<button type='button' onClick=location.href='/9' style='FONT-SIZE: 35pt;'> 9 </button>"); client.println("  "); 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("  "); client.println("<button type='button' onClick=location.href='/0' style='FONT-SIZE: 35pt;'> 0 </button>"); client.println("  "); 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("  "); 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();*/ } [...]
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("  ");
client.println("<button type='button' onClick=location.href='/2' style='FONT-SIZE: 35pt;'> 2 </button>");
client.println("  ");
client.println("<button type='button' onClick=location.href='/3' style='FONT-SIZE: 35pt;'> 3 </button>");
client.println("  ");
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("  ");
client.println("<button type='button' onClick=location.href='/5' style='FONT-SIZE: 35pt;'> 5 </button>");
client.println("  ");
client.println("<button type='button' onClick=location.href='/6' style='FONT-SIZE: 35pt;'> 6 </button>");
client.println("  ");
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("  ");
client.println("<button type='button' onClick=location.href='/8' style='FONT-SIZE: 35pt;'> 8 </button>");
client.println("  ");
client.println("<button type='button' onClick=location.href='/9' style='FONT-SIZE: 35pt;'> 9 </button>");
client.println("  ");
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("  ");
client.println("<button type='button' onClick=location.href='/0' style='FONT-SIZE: 35pt;'> 0 </button>");
client.println("  ");
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("  ");
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.
-
- 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
Gracias, por las molestias, muy interesante tu codigo, al igual que el del juego de colores, lo he intentado probar pero me da un errorNaguissa 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("  "); client.println("<button type='button' onClick=location.href='/2' style='FONT-SIZE: 35pt;'> 2 </button>"); client.println("  "); client.println("<button type='button' onClick=location.href='/3' style='FONT-SIZE: 35pt;'> 3 </button>"); client.println("  "); 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("  "); client.println("<button type='button' onClick=location.href='/5' style='FONT-SIZE: 35pt;'> 5 </button>"); client.println("  "); client.println("<button type='button' onClick=location.href='/6' style='FONT-SIZE: 35pt;'> 6 </button>"); client.println("  "); 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("  "); client.println("<button type='button' onClick=location.href='/8' style='FONT-SIZE: 35pt;'> 8 </button>"); client.println("  "); client.println("<button type='button' onClick=location.href='/9' style='FONT-SIZE: 35pt;'> 9 </button>"); client.println("  "); 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("  "); client.println("<button type='button' onClick=location.href='/0' style='FONT-SIZE: 35pt;'> 0 </button>"); client.println("  "); 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("  "); 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.
¿puede ser que utilices alguna librería mas aparte de ESP8266wifi?
-
- Administrador del Sitio
- Mensajes: 502
- Registrado: 04 Jul 2016, 11:17
- Agradecido: 110 veces
- Agradecimiento recibido: 134 veces
Re: Proyecto de cerradura usando Arduino Leonardo, GSM y Wifi o Bluetooth
Error de copia-pega!
Ese handleFiles debería ser processRequest
Ese handleFiles debería ser processRequest
Joselu escribió: ↑26 Feb 2018, 14:03Gracias, por las molestias, muy interesante tu codigo, al igual que el del juego de colores, lo he intentado probar pero me da un errorNaguissa 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("  "); client.println("<button type='button' onClick=location.href='/2' style='FONT-SIZE: 35pt;'> 2 </button>"); client.println("  "); client.println("<button type='button' onClick=location.href='/3' style='FONT-SIZE: 35pt;'> 3 </button>"); client.println("  "); 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("  "); client.println("<button type='button' onClick=location.href='/5' style='FONT-SIZE: 35pt;'> 5 </button>"); client.println("  "); client.println("<button type='button' onClick=location.href='/6' style='FONT-SIZE: 35pt;'> 6 </button>"); client.println("  "); 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("  "); client.println("<button type='button' onClick=location.href='/8' style='FONT-SIZE: 35pt;'> 8 </button>"); client.println("  "); client.println("<button type='button' onClick=location.href='/9' style='FONT-SIZE: 35pt;'> 9 </button>"); client.println("  "); 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("  "); client.println("<button type='button' onClick=location.href='/0' style='FONT-SIZE: 35pt;'> 0 </button>"); client.println("  "); 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("  "); 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.
¿puede ser que utilices alguna librería mas aparte de ESP8266wifi?
-
- 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
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
Saludos
-
- Similar Topics
- Respuestas
- Vistas
- Último mensaje
-
- 0 Respuestas
- 26252 Vistas
-
Último mensaje por Naguissa
-
- 1 Respuestas
- 17051 Vistas
-
Último mensaje por Naguissa
-
- 0 Respuestas
- 24272 Vistas
-
Último mensaje por Naguissa
-
- 2 Respuestas
- 14101 Vistas
-
Último mensaje por Naguissa
-
- 1 Respuestas
- 8388 Vistas
-
Último mensaje por Naguissa