Después de definir el equipo informático en la primera parte y de poder utilizar la tarjeta para cambiar los relés de manera segura, en la segunda parte de esta serie donamos a nuestro ESP la primera interfaz de operador para realizar la tarea de configuración alrededor del lector de la tarjeta.El sitio web se ha ampliado de una parte a otra y se ha dotado de más funciones.
Información aportada Primera parte.
En primer lugar, ale, tenemos que adaptar el WLAN local a nuestras necesidades en las siguientes líneas del Código:
Redes inalámbricas.Iniciar("Su guía.","Su contraseña");
Cargamos el siguiente código en nodemu:
35; incluye <Proteína de separación.Hora> 35; incluye <Mfrc 522..Hora> 35; incluye <Esp8266wifi.Hora> / '35; include & lt; wificlient.h & gt; 35; incluye <Servidor web esp8266.Hora> 35; incluye <Esp8266mdn Series.Hora> 35; incluye <Memoria de sólo lectura programable.Hora> - definición. Introduction rst 5 / / SPI re re re Introduction (salida D1) - definición. Relés: 16 Relés (salida D0) [Baja activación] - también hay LED internos cerca del puerto USB - definición. SS - u 15 / / SPI seleccione el pie del tubo del motor - definición. Mezclador 2 / / rojo (salida D4) - definición. Mezcla G 0 / / Verde (salida D3), con LED interno en el módulo ESP - definición. Mezcla B 4 / / azul (salida D2) - definición. WIFI - poudren 25 / / longitud máxima de la contraseña wifi - definición. Estados 20 / / longitud máxima del servicio WiFi - definición. Esphost Corporation 20 / / número máximo de caracteres esphost - definición. LED interno 16 - definición. Línea de distribución 4 - definición. Cable SCL 5 Mfrc 522. Mfrc522.(SS - u, Introduction rst); Ejemplo de creación de mcfrc 522 Mfrc 522.::Clave mifar Llave; Servidor web esp8266 Servidor(80); Ejemplo de creación de servidor web Riguroso adj. Redes inalámbricas { Chamuscar Esphost Corporation[Esphost Corporation]; Chamuscar Cielo[Estados]; / / / nombre de la estación a la que se conectará (si se ha definido) Chamuscar Wifipwd Corporation[WIFI - poudren]; / / wifipassword, si está definido Chamuscar Configuración[3]; / / si la configuración está disponible, es necesario marcar "tk" }; Riguroso adj. Picardrap. { Chamuscar Calder.[4]; Chamuscar Reservas[4]; }; Redes inalámbricas Octopus; Picardrap. Mieloma,; Bourg Resultados = Falso; Bourg Lernavard. = Falso; Nulidad Configuración() { Modo pinmode(Introduction rst,Salida); Escritura digital(Introduction rst,Alto); Modo pinmode(Relés:,Salida); Modo pinmode(Mezclador,Salida); Modo pinmode(Mezcla G,Salida); Modo pinmode(Mezcla B,Salida); Escritura digital(Relés:,Alto); Relés no activados. Escritura digital(Mezclador,Bajo); / / / Australia miembro Escritura digital(Mezcla G,Bajo); Escritura digital(Mezcla B,Bajo); Transporte.Iniciar(9600); Comunicación en serie con pc para la inicialización Producción(); Transporte.Imprimir(PE PE PE.- grippide.()); Proteína de separación.Iniciar(); / / inicialización de las comunicaciones SPI Escritura digital(Introduction rst,Bajo); Resultados = Startwificlient Inc.(); Producción(); Memoria de sólo lectura programable.Iniciar(512); Memoria de sólo lectura programable.Cabra(100,Mieloma,); La tarjeta válida se depositará en la dirección 100. Memoria de sólo lectura programable.Conclusión(); Inicialización httpserver(); Escritura digital(Introduction rst,Alto); Mfrc522..Readaptación PCD(); Mfrc522..Inicio de PCD(); Inicializando módulo de lectura mfrc522 Mfrc522..Antena PCD - u(); Producción(); Escritura digital(Mezclador,Alto); Color de cuero: púrpura activada. Escritura digital(Mezcla G,Bajo); Escritura digital(Mezcla B,Alto); } Activar servidor web Nulidad Mano() { } Nulidad Pie() / / / página web { Cadena Empleados temporales =""; Si (Servidor.Hassage.("Tarjeta de identificación") ) Reiniciar el sistema. { Empleados temporales = "Muéstrale al lector la tarjeta, por favor."; Servidor.Enviar ( 200, "Texto / html", Empleados temporales ); Escritura digital(Mezclador,Alto); / / LED amarillo programación Escritura digital(Mezcla G,Alto); Escritura digital(Mezcla B,Bajo); Lernavard. = ¿En serio?; Servidor.Cliente().Stop(); } Servidor.Cabecera de envío(Control de caché, No hay caché, no hay almacenamiento, hay que volver a verificar); Servidor.Cabecera de envío(Praga, No hay caché.); Servidor.Cabecera de envío("Exhala"., "-1"); Servidor.Longitud del contenido(Contenido desconocido); / / html contenido Servidor.Enviar ( 200, "Texto / html", Empleados temporales ); / guardar - enviar a cleint Empleados temporales = ""; Empleados temporales += "Y?"Doctype - HTML & gt; & lt; html = 'lang =' de '& gt; & lt; Head & gt; & lt; meta = "charset =" UTF - 8 & gt; & lt; meta = "name = ViewPort = =" Content = "width = device =, width, Initial = / scale = 1.0, & gt; Servidor.Enviar contenido(Empleados temporales); Empleados temporales = ""; Empleados temporales += ¡"& lt; Style type = 'text / CSS' & gt; & lt;!- div.container {altura mínima: 10em; visualización: celdas de formulario; alineación vertical: media} {botones {altura: 35px; anchura: 90px; tamaño del tipo de letra: 16px}; Servidor.Enviar contenido(Empleados temporales); Empleados temporales = ""; Empleados temporales += "Texto principal {color de fondo: Azul;} lt; / estilo & gt;"; Empleados temporales += "& lt; título & gt; & lt; título & gt; lector de tarjetas rc522 & lt; / title & gt; & lt; / Head & gt;"; Empleados temporales += "& lt; h2 & gt; lector de tarjetas rc522 Configuration & lt; / H2 & gt;"; Empleados temporales += "; texto principal y gt;"; Servidor.Enviar contenido(Empleados temporales); Empleados temporales = ""; Empleados temporales += "& lt; Performance = /" method = "post" & gt; "; Empleados temporales += "& lt; Button type =" submit "name =" authcard "value =" 1 "style =" altitud: 50 px; anchura: 200 px "& gt; autoricen la siguiente proyección a Lester & lt; / Button & gt;"; Empleados temporales += "/ formulario & gt;"; Servidor.Enviar contenido(Empleados temporales); Empleados temporales = ""; Servidor.Cliente().Stop(); } Nulidad Inicialización httpserver() { Bourg Inicial = Falso; Servidor.En("/", Pie); Servidor.No encontrado ( Mano ); Servidor.Iniciar(); Servidor web activado. } La función de cierre del servidor web * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * La gestión de la función inicial de WiFi * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Bourg Startwificlient Inc.() { Bourg Wificlientstarted Inc. = Falso; Tamaño t Valor A0 ADC = 0; Intercambio Yo = 0; Intercambio Conners = 0; Serial. Set debugoutput (true); / enable for Proceedings. Redes inalámbricas.Nombre del servidor("Crdrdr41667".); Redes inalámbricas.Abróchate.(¿En serio?); Redes inalámbricas.Desconectar vt.(); Redes inalámbricas.Patrón(Sitio web); Si(Documento de carga()) { Redes inalámbricas.Iniciar(Octopus.Cielo, Octopus.Wifipwd Corporation); Aunque (( Conners != 3 ) Y( Conners != 4 ) Y (Yo != 30)) / / si conneres = = "0" ocioso "u - cambiar el Estado de Statius { Yo++; / / serial.print (") / / / vigilancia de los procesos de conexión en interfaces seriales Retraso(500); Producción(); Conners = Redes inalámbricas.Esperando los resultados.(); } Si (Conners == 4 ) { / / / si la contraseña no es correcta Transporte.Imprimir("Atwifi: pwder"); Redes inalámbricas.Desconectar vt.(); } Si (Conners == 6 ) { / / / no configurado en modo de estación Transporte.Imprimir("Estrella".); Redes inalámbricas.Desconectar vt.(); } } Si(Redes inalámbricas.Estatuto() == Conexión WL) { Transporte.Imprimir(Número de ATIP:); Transporte.Imprimir(Redes inalámbricas.Localización()); Redes inalámbricas.Restablecer automáticamente la conexión(¿En serio?); Si el módulo de configuración intenta volver a conectar al punto de acceso al desconectar la conexión Instalar respuesta MDNs Si (!MDN Corporation.Iniciar("Crdrdr41667".)) { Transporte.Imprimir("Atmds: no admisibles"); } Hora prevista de despegue { MDN Corporation.Servicios de dirección("Http: / / www.", Protocolo TCP., 80); } Wificlientstarted Inc. = ¿En serio?; } Hora prevista de despegue { Redes inalámbricas.Desconectar vt.(); Redes inalámbricas.Patrón(Sitio web); Redes inalámbricas.Iniciar("Su guía.","Su contraseña"); / / / modificar o¡Adaptarse! Documento de depósito(); Aunque (( Conners != 3 ) Y( Conners != 4 ) Y (Yo != 30)) / / si conneres = = "0" ocioso "u - cambiar el Estado de Statius { Yo++; / / serial.print (") / / / vigilancia de los procesos de conexión en interfaces seriales Retraso(500); Producción(); Conners = Redes inalámbricas.Esperando los resultados.(); } } Wifi.printdiag (serial); / / active modulación. Regreso Wificlientstarted Inc.; } La función de liquidación de la gestión de WiFi * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * La función de inicio almacena la prueba de WiFi en EPROM. Bourg Documento de carga() { Bourg Revalorización; Memoria de sólo lectura programable.Iniciar(512); Memoria de sólo lectura programable.Cabra(0,Octopus); Memoria de sólo lectura programable.Conclusión(); Si (Cadena(Octopus.Configuración) == Conocimientos tradicionales) { Revalorización = ¿En serio?; } Hora prevista de despegue { Revalorización = Falso; No hay configuración de WLAN. } Regreso Revalorización; } Nulidad Documento de depósito() / / / almacenar las pruebas de WLAN en EPROM { Cadena Uno.; Tamaño t Yo; Para (Yo = 0 ; Yo < Tamaño(Octopus) ; Yo++) Soltar configuración antigua { Memoria de sólo lectura programable.Escribir(Yo, 0); } Para (Yo = 0 ; Yo < Estados ; Yo++) Soltar configuración antigua { Octopus.Wifipwd Corporation[Yo] = 0; } Para (Yo = 0 ; Yo < WIFI - poudren ; Yo++) Soltar configuración antigua { Octopus.Cielo[Yo] = 0; } Uno. = Redes inalámbricas.SSID.().C) estructura u(); Yo = Uno..Longitud(); Uno..Torre la Rey(Octopus.Cielo,Yo+1); Uno. = Redes inalámbricas.PSK.().C) estructura u(); Yo = Uno..Longitud(); Uno..Torre la Rey(Octopus.Wifipwd Corporation,Yo+1); Raya(Octopus.Configuración , Conocimientos tradicionales, Tamaño(Octopus.Configuración) ); Memoria de sólo lectura programable.Iniciar(512); Memoria de sólo lectura programable.Está bien.(0, Octopus); Memoria de sólo lectura programable.Delito(); Memoria de sólo lectura programable.Conclusión(); } Funciones finales: Storey credentials to eepcrom * * * * * * * * * * * * * * * * * * * * * * * * * * Nulidad Correr() El camino principal. { / / / el contenido de la if sólo se ejecutará si se encuentra y puede leer un mapa Si (Mfrc522..China People 's Insurance Company Limited() && Mfrc522..Lector de tarjetas PICC() ) / / PICC = tarjeta de circuito integrado cercano = tarjeta de chip sin contacto { Transporte.Imprimir("China People 's Insurance Company udid:); Para (Intercambio Yo = 0; Yo < Mfrc522..Orientación.Tamaño; Yo++) { La distancia entre el número decimal y el cero en la parte delantera de la Sección de texto & lt; 16 Transporte.Imprimir(Mfrc522..Orientación.Bytes unitarios[Yo] < 0 x 10. ? " 0" : " "); Transporte.Imprimir(Mfrc522..Orientación.Bytes unitarios[Yo], Sistema hexadecimal); } Bourg Funciona. = ¿En serio?; Si (Lernavard.) { Para (Intercambio Yo = 0; Yo < Tamaño(Mieloma,.Calder.); Yo++) { Mieloma,.Calder.[Yo] = Mfrc522..Orientación.Bytes unitarios[Yo]; Memoria de sólo lectura programable.Iniciar(512); Memoria de sólo lectura programable.Está bien.(100,Mieloma,); Memoria de sólo lectura programable.Delito(); Memoria de sólo lectura programable.Conclusión(); Lernavard. = Falso; } Funciona. = ¿En serio?; } Hora prevista de despegue { Para (Intercambio Yo = 0; Yo < Tamaño(Mieloma,.Calder.); Yo++) { Si (Mfrc522..Orientación.Bytes unitarios[Yo] != Mieloma,.Calder.[Yo]) { Funciona. = Falso; } } } Si (Funciona.) { Bourg Alfiler= Lectura digital(Relés:); Alfiler = !Alfiler; Escritura digital(Relés:, Alfiler); Escritura digital(Mezclador,Bajo); - led verde. Escritura digital(Mezcla G,Alto); Escritura digital(Mezcla B,Bajo); Transporte.Imprimir("Efectivo".); Retraso(2000); Escritura digital(Mezclador,Bajo); - led, el Lector de tarjetas azul está casi listo. Escritura digital(Mezcla G,Bajo); Escritura digital(Mezcla B,Alto); } Hora prevista de despegue { Escritura digital(Mezclador,Alto); - la última tarjeta no funciona. Escritura digital(Mezcla G,Bajo); Escritura digital(Mezcla B,Bajo); Transporte.Imprimir("No válida."); Retraso(2000); } Transporte.Imprimir(); Mover los mapas leídos a modo estático para buscar otros mapas. Mfrc522..PICC STOP(); Retraso(1000); } Servidor.Meneo(); / / editar Web Server Search Producción(); / / llamar a la función interna esp8266 Retraso(20); }
Compilamos el Código y lo subimos a nodemu.Durante la carga de los bocetos, se encendió la luz "roja" de la RGB LED.Una vez que se cargue con éxito, el color de LED se vuelve morado con el tiempo.Cambiar el color mostrará que el proceso de carga ha tenido éxito.
Sube a nodemaru. Confiable adj. ¡Durante la compilación de nodemu, hay que pulsar y pulsar!
Cuando el proceso de carga se haya completado satisfactoriamente, activaremos la terminal en serie en el IDE y fijaremos la velocidad de transmisión en 9600 estructuras.Tenemos una salida, una dirección IP en la red local:
Vamos a buscar la dirección de Ping para ver si todo va bien.Cuando obtengamos la respuesta del Ping, entraremos en el sitio web del ESP tecleando la dirección IP indicada en el navegador:
Como nuestro ESP todavía no ha guardado la tarjeta de autorización en el eepcrom interno, ahora pulsamos el botón.Hemos recibido la siguiente información:
La Luz LED indica que hay una tarjeta delante del lector de tarjetas.La siguiente tarjeta que se guarda de este modo antes del lector de tarjetas es aceptada y conservada como tarjeta de autorización.Se eliminará la tarjeta de autorización anterior.Sólo se puede autorizar una tarjeta a la vez.
En la siguiente parte, conectaremos un botón a nuestro nodemu, donde podremos intercambiar automáticamente las claves WPS con el router y grabar permanentemente los datos de acceso de WLAN en nuestro eepcrom.Por lo tanto, la última parte de la configuración fija también se ha activado a partir de nuestro Código.Por lo tanto, una vez compilado, el Código puede utilizarse junto con cualquier encaminador o proyector.Seguiremos utilizando el sistema de archivo interno del sistema de archivo de documentos del sistema de información geográfica para gestionar múltiples mapas mediante la interfaz web.
Hasta la siguiente parte.
1 comentario
Martin
Im Terminal kommt immer nur das. Keine IP
rl
$⸮⸮|
⸮$⸮|⸮$⸮c|⸮⸮⸮2⸮r⸮b⸮#⸮⸮on⸮lNo⸮⸮⸮Bp⸮⸮${l{lp⸮N⸮⸮l⸮⸮bo⸮|l⸮⸮b⸮⸮no⸮$⸮⸮
$`⸮ood`n{⸮ےo#⸮d{⸮⸮n
18:34:54.645 → ATSN:7427403D⸮⸮