Paso 5: El software
Si desea utilizar el software como-es, sin ninguna modificación y no importa cómo se hace, el procedimiento es simple: descargar y descomprimir el adjunta 'wakeuplight_esp01.zip', abierto en el IDE de Arduino. Modificar la configuración en 'configuration.h'. Necesita su Wifi SSID y contraseña, información de dirección IP, nombre de un servidor NTP (probablemente puede dejar esto sin cambios) e información de zona horaria - su desvío estándar de UTC en minutos como en las normas de horario.
Después de hacer los cambios apropiados, simplemente sube el bosquejo a la ESP-01.
Si desea hacer algunos cambios en el software, o simplemente está interesado en cómo funciona, alguna información más detallada se incluye a continuación.
Estructura general
Mi primera versión de este software fue en el llano C y creció orgánicamente de la experimentación. En algún momento, funcionaba (un poco), pero fue un total desastre. Entonces decidí refactorizar y cambiar a C++, crear una clase única para cada función independiente (consistiendo en un archivo .h de definición de la clase y un archivo .cpp que contiene la aplicación). Haz crean instancias de las clases en el módulo principal. Por supuesto, la mayoría de las clases dependen de otros. El módulo principal inyecta las dependencias a través de los constructores de las clases según.
Existen las siguientes clases:
- Configuración: proporciona una interfaz para todos los datos de configuración, codificado (mencionadas arriba) así como los datos almacenados en la EEPROM (como la configuración de la alarma). Todos los otros módulos (excepto Dimmer) dependen de la configuración.
- Dimmer: ajusta la intensidad de la luz utilizando PWM.
- Wificlient: establece la conexión a un punto de acceso Wifi.
- NTPClient: proviene un servidor de hora de tiempo universal.
- LocalClock: convierte tiempo universal hora local, teniendo en cuenta DST reglas cualquier.
- Alarma: utiliza Dimmer, LocalClock y configuración para realizar la función básica de encender la luz gradualmente durante un período de tiempo.
- Servidor Web: sirve una página móvil para permitir la configuración de alarma y control manual.
- Serialhost: permite la comunicación serial para propósitos de depuración.
Información más detallada está disponible en los archivos de origen. Los módulos Dimmer y servidor web son especiales en el sentido de que en parte usan código generado. El archivo 'wakeuplight_java_helpers.zip' contiene un proyecto Java de Eclipse que hace la generación. A zoom esta a continuación.
Regulador de luz
El punto de la wake-up light es dejar que la intensidad de luz aumenta gradualmente percibida por un ser humano. El mecanismo PWM nos da control lineal de la intensidad de la luz, pero la percepción humana es más o menos logarítmica ( ley de Weber-Fechner). Si no compensar y dejar que el deber PWM ciclo de aumento de 0 a 100% en decir 1000 pasos, el resultado sería que en la primera parte del ciclo de despertar, intensidad de la luz aumentaría demasiado rápido con saltos notables, alcanzando un alto nivel y luego aumentando muy lentamente desde lo alto al completo en el resto del ciclo. Obviamente no es lo que queremos. Necesitamos cambiar la intensidad de la luz exponencialmente más que linealmente en el tiempo, para dar la percepción de un incremento lineal en el tiempo.
También, el PWM ESP8266 no es perfecto. Tiene alguna inquietud que es sensible en ciclos de trabajo muy pequeño y provoca parpadeo sensible en la lámpara. Así que la luz puede ser completamente apagado, o en algún mínimo valor estable, pero debemos evitar estar en el medio. Este problema llega a ser menos grave si la frecuencia PWM es baja - que es por eso que he elegido a 100Hz.
El archivo 'DutyCycle.java' calcula una función de un paso necesario en la intensidad de la luz percibida (en una escala de 0 a 1800) y un valor PWM (en una escala de 0 a 20000). El programa 'ConvertDutyCycleToEsp.java' calcula esta función y la escribe en un archivo .h para incluirse en el proyecto de Arduino. El código regulador de la Arduino simplemente hace un vistazo para arriba en esta tabla generada.
Servidor Web
Quería controlar el proyecto con mi smartphone. Como tengo mucho más experiencia escribir aplicaciones web a aplicaciones móviles nativas, decidí tomar el enfoque de la aplicación web móvil.
La aplicación web es una aplicación de HTML5/jQuery de una página que envía una solicitud POST de Ajax cuando el usuario presiona un botón (y también recupera periódicamente actualizaciones de estado). La página indica el navegador para obtener jQuery desde el CDN de jsDelivr, se incluye todo el código JavaScript y CSS en el HTML, así como las imágenes utilizando Datos de URLs. Como resultado, la carga de la página implica sólo una sola solicitud GET a ESP-01, mantener todo simple y rápido.
Al incluir las etiquetas 'mobile web-app-capacidad' y 'apple mobile-web-app-compatible' y un enlace del icono de acceso directo, smartphones puede Agregar esta página a la pantalla de inicio. Después de eso, se puede iniciar en la misma forma que una aplicación (se iniciará en un navegador de pantalla completa), en gran parte oculta el hecho de que no es una aplicación nativa.
Tener que cargar un bosquejo en el ESP-01 cada vez cuando pequeños cambios en la página web de la prueba no es un buen desarrollo del ciclo. Por lo tanto, he desarrollado esto en un proyecto de web de Java, con 'LightServlet.java' que simula la respuesta de la ESP-01 a las peticiones de Ajax POST. La 'ConvertWebpageToEsp.java' se convierte el index.html de proyectos web para el 'webserver_homepage.h' incluye archivo que contiene la página web como una constante de cadena.