problème bibliothèque TimeAlarms.h

hercule124
lun, 05/29/2023 - 20:17
Bonsoir,
Je suis sur un nouveau projet et je dois utiliser la bibliothèque TimeAlarms avec un esp-12 F .mais je galère.
Dans le moniteur série j'ai bien ma connexion Wi-Fi d'activer et je vois aussi mes alarmes activées.
Mais je ne reçois aucune info sur le pin D1 du esp-12f lorsque j'atteins l'heure souhaiter.
J'ai essayé avec une LED pour voir, mais que dalle, voilà le code de test. si quelqu'un a une idée!
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <TimeLib.h>
#include <TimeAlarms.h>
const char* ssid = "********";
const char* password = "*********";
const int ledPin = D1;
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP);
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
timeClient.begin();
while (!timeClient.update()) {
timeClient.forceUpdate();
}
time_t currentTime = timeClient.getEpochTime();
// Set current time
setTime(currentTime);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Alarm.alarmRepeat(19, 12, 0, turnOnLed);
Serial.print("Alarm set to turn on LED at ");
Serial.print(19);
Serial.print(":");
Serial.println(12);
Alarm.alarmRepeat(19, 13, 0, turnOffLed);
Serial.print("Alarm set to turn off LED at ");
Serial.print(19);
Serial.print(":");
Serial.println(13);
}
void loop() {
Alarm.delay(0);
}
void turnOnLed() {
Serial.println("Turning on LED");
digitalWrite(ledPin, HIGH);
}
void turnOffLed() {
Serial.println("Turning off LED");
digitalWrite(ledPin, LOW);
}
Walter
mar, 05/30/2023 - 08:42
Tu as peut être un problème avec le fuseau horaire, tu as essayé sans récupérer l'heure par le NTP, mais en la mettant à la main 2 minutes avant ton alarme ?
hercule124
mar, 05/30/2023 - 08:54
salut walter,
j'ai pas essayé ,je me suis borné avec le serverNPT,je vais faire un test.
merci
hercule124
ven, 06/02/2023 - 09:12
Bonjour,
le problème est résolu Walter avait raison , il manquait le fuseau horaire dans le code.
j'ai une désynchronisation d'une vingtaine de secondes entre le serveur et TimeAlarms , pas grave pour mon futur projet qui sera présenter sur le forum .
la conception d'une prise intelligente programmable sur 7 jours et 2 programmations possible par jour.
je n’utilise pas blynk pour l'interface mais un formulaire html .
le projet avance bien mais il reste encore du boulot.
Walter
ven, 06/02/2023 - 17:12
Intéressant, cela fait un moment que je voudrais remplacer mon programmateur pour mon aquarium :)
Mais étant pas du tout connaisseur des règles de sécurité sur les tensions du secteur, je ne m'y suis pas essayé :(
La page HTML est hébergée directement sur l'ESP ?
hercule124
sam, 06/03/2023 - 09:05
Bonjour,
OUI le formulaire html est hébergé sur l'ESP-12F.
je recupere les données avec une fonction handleSchedule.
je récupèrent les données du formulaire en utilisant la méthode server.arg(name), mais les données sont envoyées au serveur sous forme d’un objet JSON dans le corps de la requête, plutôt que sous forme de données de formulaire encodées en application/x-www-form-urlencoded.
pour la memoire du esp-12f pour le moment ca suit.j'ai encore un peu de code pour la 2 eme programmation !
hercule124
mar, 06/13/2023 - 22:10
Bonsoir,
Un petit suivi du projet prise intelligente, j'ai rajouté la 2eme programmation.
TimeAlarms active la pin D1 selon les heures et les jours définis.
L’état du relais sur la page HTML bascule correctement sur ON ou OFF selon l'info envoyer par le bouton ou TimeAlarms ainsi que le bouton qui affiche éteindre ou allumer.
Si les données d'entrée sont différentes des valeurs temps et jours,elles sont enregistrées sur l'EEPROM de l'esp-12f afin d'éviter d'écrire constamment sur l'EEPROM qui est prévu pour 100000 écritures à peu près.
La fonction EEPROM.update ne fonctionne pas sur l'esp-12f.
Je compare les données lues de l'EEPROM avec les variables du formulaire.
if (EEPROM.read(0) != onHour) EEPROM.write(0, onHour);
if (EEPROM.read(1) != onMinute) EEPROM.write(1, onMinute);
if (EEPROM.read(2) != offHour) EEPROM.write(2, offHour);
if (EEPROM.read(3) != offMinute) EEPROM.write(3, offMinute);
if (EEPROM.read(4) != onHour2) EEPROM.write(4, onHour2);
if (EEPROM.read(5) != onMinute2) EEPROM.write(5, onMinute2);
if (EEPROM.read(6) != offHour2) EEPROM.write(6, offHour2);
if (EEPROM.read(7) != offMinute2) EEPROM.write(7, offMinute2);
for (int i = 0; i < sizeof(onDays) / sizeof(onDays[0]); i++) {
if (EEPROM.read(8 + i) != onDays[i]) EEPROM.write(8 + i, onDays[i]);
}
EEPROM.commit();
On peut débranché l'esp-12f ou rafraîchir la page html , les données sont sauvegardées.
Les problèmes pour le moment , je n'arrive pas à renvoyer les valeurs lues de l'EEPROM dans le formulaire html.
Le code est bien avancé.
Walter
jeu, 06/15/2023 - 13:31
Tu peux donner le code sur esp, qui renvois le formulaire HTML?
hercule124
ven, 06/16/2023 - 08:52
salut Walter , voila ou ca buche.
Ces lignes de code récupèrent les éléments du formulaire HTML en utilisant
document.getElementById
et mettent à jour leurs valeurs avec les données lues de l’EEPROM. La fonctionupdateFormValues
est exécutée une fois que la page HTML a été chargée en utilisantdocument.addEventListener
.les valeurs des éléments
onTime
etoffTime
sont vides dans la console log ?reponse dans la console -->La fonction updateFormValues a été exécutée
(index):61 Mise à jour des valeurs du formulaire
(index):63 L'événement DOMContentLoaded a été déclenché
html += " console.log(\"Mise à jour des valeurs du formulaire\");";
html += " console.log(\"onHour:\", onHour);";
html += " console.log(\"onMinute:\", onMinute);";
html += " console.log(\"offHour:\", offHour);";
html += " console.log(\"offMinute:\", offMinute);";
html += " console.log(\"onHour2:\", onHour2);";
html += " console.log(\"onMinute2:\", onMinute2);";
html += " console.log(\"offHour2:\", offHour2);";
html += " console.log(\"offMinute2:\", offMinute2);";
mais je ne recupere pas les valeurs dans le formulaire. et dans console log ca reste vide aucune valeur
hercule124
mar, 06/20/2023 - 23:52
Bonsoir,
Un petit suivi du projet, la récupération des valeurs heures minutes et jours cochés fonctionnent.
Il y a avait des erreurs de syntaxes et le plus important, il fallait convertir les entiers onHour offHour ect.....En chaînes de caractères au format hh:mm: ID onTime et ID offTime et ID onTime2 et ID offTme2 .
eh oui
html += "<label for=\"onTime\">Heure d'allumage 1:</label><br>\n";
html += "<input type=\"time\" id=\"onTime\" name=\"onTime\"><br><br>\n";
html += "<label for=\"offTime\">Heure d'extinction 1:</label><br>\n";
html += "<input type=\"time\" id=\"offTime\" name=\"offTime\"><br><br>\n";
html += "</div>\n"; // Fin de la première colonne
html += "<div>\n"; // Deuxième colonne
html += "<label for=\"onTime2\">Heure d'allumage 2:</label><br>\n"; // Ajouter un 2 au nom et à l'id de la deuxième programmation
html += "<input type=\"time\" id=\"onTime2\" name=\"onTime2\"><br><br>\n";
html += "<label for=\"offTime2\">Heure d'extinction 2:</label><br>\n";
html += "<input type=\"time\" id=\"offTime2\" name=\"offTime2\"><br><br>\n";
Si je rafraichis la page html ou si je débranche l'esp-12f le formulaire récupère les données dans l'EEPROM impec c'est ce que je veux.
hercule124
dim, 07/16/2023 - 17:04
Bonjour;
les nouvelles pour le projet en cours, le code est terminé et les promesses sont tenues .
les circuits sont en production, j'ai pris le moins chère, la livraison va surement mettre du temps.
le prochain message sera sous la rubrique Projets réalisés, comme d'hab il y aura une vidéo avec le code et le gerber.
ChrisMartin
dim, 09/03/2023 - 07:16
Bonjour hercule124.
Désolé mais je ne vois qu'une prise programmable, mais rien d'intelligence là-dedans enfin je me trompe sûrement et j'aimerais si tu le veux bien que tu me sortes de mon erreur si tu as deux minutes à me consacrer.