Étape 5: Le logiciel
Si vous souhaitez utiliser le logiciel en tant que-est sans aucune modification et n’aime pas comment c’est fait, la procédure est simple : Télécharger et décompresser le joint « wakeuplight_esp01.zip », ouvert dans l’IDE Arduino. Modifiez les paramètres dans « configuration.h ». Il a besoin de votre Wifi SSID et mot de passe, informations d’adresse IP, le nom d’un serveur NTP (vous pouvez probablement pas laisser inchangé) et information de fuseau horaire - votre standard offset d’UTC en minutes ainsi que des règles d’heure d’été.
Après avoir apporté les modifications appropriées, il suffit de télécharger le croquis à l’ESP-01.
Si vous souhaitez apporter des modifications au logiciel, ou sont tout simplement intéressés par son fonctionnement, des informations plus détaillées sont incluses ci-dessous.
Architecture globale
Ma première version de ce logiciel était en plaine C et a grandi organiquement de l’expérimentation. À un certain moment, cela a fonctionné (un peu), mais c’était un désordre total. J’ai alors décidé de refactorisation, passer au C++, créez une classe unique pour chaque fonction séparée (consistant en un fichier .h, définition de la classe et le fichier .cpp contenant l’implémentation). Les classes s’instanciées dans le module principal. Bien sûr, la plupart des classes sont dépendantes d’autres personnes. Le module principal injecte ces dépendances via les constructeurs des classes selon.
Les classes suivantes sont présentes :
- Configuration : fournit une interface pour toutes les données de configuration, tant en dur (mentionné ci-dessus) que les données stockées en EEPROM (comme les réglages de l’alarme). Tous les autres modules (sauf variateur) dépendent de la Configuration.
- Dimmer : ajuste la luminosité à l’aide de PWM.
- Wificlient : établit la connexion à un point d’accès Wifi.
- NTPClient : obtient temps universel à partir d’un serveur de temps.
- LocalClock : convertit temps universel, heure locale, en prenant en compte le cas échéant des règles de DST.
- Alarme : utilise le variateur, LocalClock et Configuration pour exercer les fonctions de base d’allumer la lumière progressivement pendant une période de temps définie.
- WebServer : propose une page de web mobile facile pour activer la configuration de l’alarme et de contrôle manuel.
- Serialhost : permet la communication série à des fins de débogage.
Informations plus détaillées sont disponibles dans les fichiers source. Les modules Dimmer et serveur Web sont particuliers en ce sens qu’ils utilisent en partie code généré. Le fichier « wakeuplight_java_helpers.zip » contient un projet Eclipse Java qui fait de la génération. Nous allons zoomer sur ci dessous.
Gradateur
Le point de l’Éveil lumière est de laisser l’intensité lumineuse augmente graduellement telle que perçue par un être humain. Le mécanisme PWM nous donne contrôle linéaire sur l’intensité de la lumière, mais la perception humaine est plus ou moins logarithmique (la Loi de Weber-Fechner). Si nous ne serait pas compenser cela et de laisser le devoir PWM cycle augmentation de 0 à 100 % à dire 1000 marches, le résultat serait que dans la première partie du cycle de réveil, intensité lumineuse augmenterait trop vite avec des sauts notables, atteignant un niveau élevé au début et ensuite augmenter très lentement de haut en plein dans le reste du cycle. C’est évidemment pas ce que nous voulons. Il faut changer l’intensité lumineuse façon exponentielle et non linéaire dans le temps, de donner la perception d’une augmentation linéaire dans le temps.
En outre, le PWM ESP8266 n’est pas parfait. Il a une gigue qui est perceptible en heavy duty infime et provoque le scintillement perceptible dans la lampe. Si la lumière peut être entièrement éteint, ou à une valeur minimale de stable, mais nous devrions éviter d’être entre les deux. Ce problème devient moins sévère si la fréquence PWM est faible - qui est pourquoi j’ai choisi seulement 100Hz.
Le fichier « DutyCycle.java » calcule une fonction à partir d’une étape obligatoire dans l’intensité lumineuse perçue (sur une échelle de 0 à 1 800) et une valeur PWM (sur une échelle de 0 à 20000). Le programme « ConvertDutyCycleToEsp.java » calcule cette fonction et l’écrit dans un fichier .h à inclure dans le projet Arduino. Le code variateur dans l’Arduino fait simplement un coup d’oeil vers le haut sur cette table générée.
Serveur Web
J’ai voulu contrôler le projet avec mon smartphone. Comme je l’ai beaucoup plus d’expérience web-apps que des applications mobiles natives d’écriture, j’ai décidé d’adopter l’approche de l’environnement mobile web-app.
La web-app est une application HTML5/jQuery page simple qui envoie une demande POST Ajax lorsque l’utilisateur appuie sur un bouton (et récupère également les mises à jour périodiquement). La page indique au navigateur de jQuery en retire la jsDelivr ca, tout le code JavaScript et CSS est inclus dans le code HTML, ainsi que les images en utilisant Des URL de données. Ainsi, le chargement de la page comporte juste une seule requête GET à l’ESP-01, gardant tout simple et rapide.
En incluant les balises « mobile-web-app-compatible » et « apple-mobile-web-app-compatible » et un lien d’icône de raccourci, smartphones pouvez ajouter cette page Web à l’écran d’accueil. Après cela, il peut être démarré de la même manière comme une application (il sera lancé dans un navigateur plein écran), en grande partie cacher le fait qu’il n’est pas une application native.
Avoir à télécharger un croquis à l’ESP-01 chaque fois quelle test de petits changements à la page web n’est pas une belle évolution du cycle. Donc, j’ai cela développé dans un projet web Java, avec « LightServlet.java » simuler la réaction de l’ESP-01 pour les requêtes Ajax POST. Le « ConvertWebpageToEsp.java » convertit l’index.html de projets web à la « webserver_homepage.h » inclure de fichiers qui contient la page web comme une constante de chaîne.