L'article de blog suivant nous a été envoyé par notre client Helmut Schmidt. Il s'agit d'une boîte à lettres qui envoie des notifications par e-mail lorsque le courrier a été déposé. L'alimentation électrique a été réalisée à l'aide de petits panneaux solaires et de batteries rechargeables. Bonne lecture et bon bricolage :
La boîte à lettres a été construite en collaboration avec un groupe de travail d'une maison de retraite et de soins. L'idée était d'équiper les boîtes aux lettres d'une notification par e-mail. Dès que quelqu'un dépose une liste de souhaits, un courriel est envoyé à un groupe de bénévoles, les Green Ladies. Après tout, personne ne va vérifier les boîtes aux lettres tous les jours. Le résultat est une boîte aux lettres avec un module solaire et un ESP8266 D1 mini. Le programme utilise le Deep Sleep mode jusqu'à ce qu'une liste de souhaits soit insérée ou que la porte de la boîte aux lettres soit ouverte.
Matériel requis
1 |
|
1 |
|
1 ou 2, en fonction de la luminosité ambiante |
|
1 |
|
1 |
Batterie Li-Ion, 18650, 3,7 V, 2600 mAh avec prise de charge MicroUSB |
1 |
Alternativement batterie Li-ion, 18650, 3,7 V |
3 |
Alternativement nimh piles |
1 |
Support de batterie |
1 |
|
2 |
|
2 |
|
2 |
|
1 |
diodes communes |
1 | compteur |
Préparations
Télécharger l'administrateur du conseil supplémentaire-ULR
Fichier> Préférences:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Installer les neuf paquets avec le conseil d'administration
Outils> Conseil> Gestionnaire du conseil d'administration:
esp8266 by ESP8266 Community
Après l'installation, vous trouverez toutes les cartes ESP8266. Sélectionnez LOLIN(WEMOS) D1 mini&R2.
Sous Fichier > Exemples pour D1 mini > ESP8266, vous trouverez le LowPowerDemo avec 10 tests pour le sommeil du modem, le Light Sleep mode et le Deep Sleep mode.
Cet article de blog a déjà décrit en détail comment les G-mails peuvent être envoyés via l'ESP8266 :
https://www.az-delivery.de/fr/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/g-mails-per-esp
Dans le blog post Envoyer des g-mails via esp8266 A déjà décrit en détail comment les g-mails peuvent être envoyés via ESP8266. Cela a encore besoin de sa propre bibliothèque de github.com être chargé. Ensuite vous pouvez Sketch> Ajouter un fichier> Ouvrir Le simplement téléchargé .zip-Choisissez un fichier. plus de Fichier> Exemples de propres bibliothèques > ESP8266SMTPTP Trouvez le programme G-Mail.
Il est fortement recommandé de créer votre propre compte de messagerie pour envoyer des messages à votre adresse électronique personnelle principale. N'utilisez pas votre adresse électronique personnelle principale pour éviter de bloquer ou de désactiver temporairement votre compte par accident. Pour l'expérimentation, il est recommandé d'utiliser un compte Gmail.com pour envoyer les e-mails. L'e-mail du destinataire peut être votre e-mail personnel.
Tous les détails concernant la création d'un compte et d'une adresse électronique Gmail.com se trouvent sur ce lien.
Connexion entre le module solaire, la batterie et l'ESP8266
Le cahier des charges prévoyait une application à faible coût avec un ou deux panneaux solaires. Les batteries Ni-MH normales présentent l'inconvénient d'une autodécharge relativement élevée, de l'ordre de 15 à 25 % par mois. Entre-temps, il existe déjà de meilleures batteries Ni-MH avec une autodécharge de seulement 15% de perte en un an, mais à un prix similaire à celui des Li-Ion. Deux panneaux solaires fournissent plus de 5 V et généralement plus de 10 V en cas de luminosité ambiante normale. Sous charge, la tension est généralement inférieure à la tension de charge maximale. Grâce à la fonction de protection dans la batterie Li-Ion elle-même (ou avec l'adaptateur d'alimentation DC-DC LM2596S), des tensions de 7 V ne posent aucun problème. Cependant, les batteries Ni-MH doivent être chargées à un maximum de 1,4 V. Un 18650, 3,7 V, 2600 mAh, avec prise de charge MicroUSB a également été choisi comme batterie Li-Ion. Cela signifie que le circuit de protection est déjà intégré dans la batterie. Les premiers essais en extérieur ont montré une charge suffisante par les panneaux solaires, tant pour les batteries NiMH que LiIon. De toute évidence, le circuit de protection consomme plus de courant aux faibles courants de charge que ce qui est stocké dans les batteries. Une possibilité serait d'utiliser une batterie Li-Ion sans circuit de protection intégré uniquement en limitant le courant par commutation avec l'ESP8266.
Pour éviter la surcharge, le Deep Sleep mode est brièvement interrompu par le temporisateur RTC pour une mesure de tension. Si, par temps chaud, la tension est proche de la tension de charge maximale, le Wifi est activé et la tension est ramenée à la norme. La mesure est faite avec analogRead(pin_voltage) à GPIO A0. Le Wemos D1 mini a déjà un diviseur de tension de 220 kOhm / 100 kOhm intégré, avec une résistance interne de 320 kOhm. Si vous ajoutez une autre résistance de 680 kOhm entre A0 et Vin, la gamme de tension est étendue de 1 V à (680 + 320)/320 = 3,1 * 3V = 9,3 V. La tension mesurée doit donc être compatible avec la tension mesurée. La tension mesurée doit donc être multipliée par le facteur 9,3.
Si la tension descend près de la tension de fin de décharge, la première chose à faire est de charger la batterie pendant un certain temps. La tension de décharge finale pour les batteries Li-Ion est de 3,5 V, et de 1,1 V pour les batteries Ni-MH. Pour s'assurer qu'il n'y a pas de courant inverse entre la batterie et le panneau solaire, le panneau solaire et le convertisseur sont reliés par une diode BYV 27/200. La tâche réelle de l'ESP8266 est effectuée par WAKEUP. Il est conseillé de charger au préalable le LowPowerDemo sur l'ESP8266 afin d'essayer toutes les possibilités. Il est préférable de faire fonctionner l'ESP8266 avec une source de tension externe et d'afficher la consommation de courant avec un appareil de mesure. Avec runTest6 en Light Sleep mode, la consommation minimale de courant est de 0,9 mA, en Deep Sleep mode seulement 0,15 mA. Cependant, la veille profonde n'autorise qu'un seul signal externe pour le réveil. Le timer RTC fonctionne également en Deep Sleep mode. Dès que le temps de ESP.deepSleep(microsecondes) est écoulé, LOW est appliqué à D0/GPIO16. Si D0 et RST sont connectés, l'EPS8266 est réinitialisé. Pour pouvoir évaluer d'autres signaux, des diviseurs de tension composés chacun d'une résistance et d'un condensateur sont nécessaires (voir le circuit).
Les symboles des LED derrière la diode BYV 27/200 représentent les modules solaires. Le commutateur (représenté sur les photos sous la forme d'un module d'interrupteur à positions multiples) déconnecte ou ouvre la connexion à la batterie.
Dès qu'une lettre est insérée, le niveau LOW est appliqué via un microcontact D5. Lorsque la boîte aux lettres est ouverte, LOW est à D7. La réinitialisation s'effectue brièvement via le condensateur. L'ESP8266 démarre et enregistre les entrées de D5 et D7. La constante de temps doit être aussi courte que possible pour que le pic effectue la réinitialisation en toute sécurité, mais que l'entrée de D5 et D7 soit toujours LOW. La diode entre RST et D0 permet également de programmer l'ESP8266.
Il est également important de surveiller l'état du WiFi. S'il n'y a pas de connexion au réseau, la tentative de connexion est abandonnée après wifiTimeout = 60 secondes. La tentative suivante est effectuée par la minuterie après environ 71 minutes. Si la connexion au réseau n'est toujours pas établie après un temps plus long, la tension tombe en dessous de la tension minimale et, comme décrit ci-dessus, la batterie est d'abord rechargée. L'événement déclencheur est enregistré dans l'EEPROM.
Calcul de la consommation d'électricité
Sans panneaux solaires, la consommation en Deep Sleep mode est de 0,15 mA . En supposant un courriel par jour, la consommation est d'environ 60 mA pendant environ 30 secondes. Par jour, cela donne 0,15 mA * 24 h + 60 mA * 1/60 / 2 h = 4,1 mAh. Avec une batterie Li-Ion de 2600 mAh, le D1 mini pourrait donc fonctionner en continu pendant 2600 * 70% / 4,1 h = 440 jours. Même à la luminosité ambiante, les deux modules solaires fournissent environ 0,5 mA, ce qui donne environ 0,5 mA * 12 h = 6 mAh. Cela devrait couvrir complètement la consommation électrique. En extérieur, les performances des modules solaires seraient encore meilleures. Pour plus de sécurité, le niveau de charge de la batterie est affiché avec chaque e-mail. Lors de l'envoi, il y a des pics allant jusqu'à 200 mA. Après l'envoi d'un courriel (avec 3 piles NiMH), la même tension a été mesurée après 3 heures qu'avant le courriel. Les mesures de la tension de charge et de décharge par un ampèremètre doivent être prises avec précaution. En particulier au point d'inversion (approximativement U = 0 et I = 0) avec un compteur électronique, la lecture dépend de sa résistance interne. Ainsi, si des valeurs inhabituelles apparaissent, le remède consiste à régler la gamme de mesure sur 10 A, avec des pas de 10 mA.
Toutes les batteries ont des avantages et des inconvénients. Une batterie LiFePO4 a une tension de 3,3 V et conviendrait donc, mais elle nécessite également un circuit de protection sûr, car elle ne doit pas être chargée au-dessus de 3,65 V. Les batteries NiMH présentent l'inconvénient d'une autodécharge plus importante. Les NiMH LSD (low self-discharge) sont les meilleures. L'utilisation des batteries LiIon dépend de la luminosité ambiante. Aucune garantie n'est donnée pour les batteries Li-Ion sans circuit de protection. Alternativement, un NodeMCU-32S a également été essayé. La consommation électrique était de 9,8 mA pendant le Deep Sleep mode. On peut dire que le NodeMCU-32S était plus en demi-sommeil qu'en Deep Sleep mode. Le port USB du NodeMCU-32S n'est pas désactivé pendant le Deep Sleep mode. Une consommation de courant inférieure à 20 µA est possible avec le DFRobot FireBeetle ESP32 IoT et le DFRobot FireBeetle ESP-12F (ESP8266) IoT.
Conclusion
Les tests à long terme de la boîte aux lettres avec notification par e-mail et module solaire sont toujours en cours. Le grand problème est de réaliser l'alimentation permanente. Les panneaux solaires ne fournissent pas toujours une tension suffisante et le courant stocké dans les batteries peut ne pas être suffisant. Le passage de l'ESP32 à l'ESP8266 m'a un peu aidé en raison de la moindre consommation d'énergie. Mais il était également important de montrer comment utiliser trois entrées malgré le Deep Sleep mode.
Suggestion d'un capteur météo open source :
https://www.ltspiceusers.ch/threads/opensource-wettersensor-werdegang.392/
Documentation de la bibliothèque ESP8266WiFi :
https://arduino-esp8266.readthedocs.io/en/latest/libraries.html
Vous trouverez ci-joint le programme complet avec des notes ou à télécharger ici :
N'oubliez pas d'entrer les détails de votre compte wifi et de votre compte e-mail (à partir des lignes 36 et 90).
// mini_solarpanel 5V et batterie Connectez via une diode de verre fritté à l'avalanche ultra-frontale BYV 27/200 //
// auteur:
// dr. Helmut Schmidt <Grueneengel17@gmail.com>
// LIION_AKKU
// const int int charge voltage_max = 5500; // La tension de charge idéale pour les batteries lithium-ion est d'environ 4,2 volts. Batterie de lion protégée de la surtension
// const int int charge voltage_min = 3500; // tension de décharge
// pour nimh_akkus
octet N_akkus = 3;
contam int TENSION DE CHARGEMENT_MAX = N_akkus * 1400; // Tension de charge max. 1,4 V pour NIMH_AKKU
contam int TENSION DE CHARGEMENT_MIN = N_akkus * 1100; // Voltage de décharge = 3.3 V minimum sous charge
int tension;
contam int Pin_ Tension = Août;
octet Flag_post = faux, Flag_Lustration = faux,
uint16_t Exceptionnel_email = 0;
uint16_t e-mail = 0;
uint32_t temps libre = 60E3; // 60 Deuxième fois sur la connexion WiFi
// pour w a k e u p //
// d7 / gpio13
// d5 / gpio14
// wake_up_timer est connecté à d0 / gpio16 dans esp8266 >> d0 provoque une réinitialisation
// pour wifi //
// Entrez votre configuration WiFi ci-dessous
contam Char * Ap_sid = "Nom du réseau WiFi"; // nom du réseau wifi
contam Char * Ap_pass = "Mot de passe réseau wifi"; // mot de passe réseau wifi
annuler d'installation() {
punaise(Wake_up_pin, Input_Pullup);
punaise(Taston_lection, Input_Pullup);
punaise(TASTON_POST, Input_Pullup);
SI (digitalRead(Taston_lection) == Faible) Flag_Lustration = vrai; // bouton poussé
SI (digitalRead(TASTON_POST) == Faible) Flag_post = vrai;
// s p a n n u n g s k o n t r o l e
// la résistance intérieure dans Wemos D1 Mini est de 320 kohm avec un diviseur de tension de 680KOHM / 320 kohm devrait
// Le matériau est la conversion du facteur 3.1 * 3 = 9.3. Tension à Mvolt.
tension = analogique(Pin_ Tension) * 9.3;
/////////////////// // e ///// /////www.hrägnänd
// tension = 4000;
// Données de l'EEPROM
Eeprom.Commencer(512);
Exceptionnel_email = Eeprom.en train de lire(0); e-mail = Eeprom.en train de lire(4);
SI (Flag_post == faux && Flag_Lustration == faux && tension < TENSION DE CHARGEMENT_MAX && Exceptionnel_email == 0) Espiègler.sommeil profond(0XFFFFFFFFFFFF); // Continuer à dormir
// n'actifie pas le WiFi à la poste et aux sous-tensions
SI (tension < TENSION DE CHARGEMENT_MIN) {
SI (Flag_post == vrai) { // profondsleep o h n e wifi
Exceptionnel_email++;
Eeprom.l'écriture(0, Exceptionnel_email); Eeprom.s'engager();
En série.Commencer(115200); En série.Imprimeur("Exceptionnel_email" + Chaîne (Exceptionnel_email)); // seulement pour tester
}
Espiègler.sommeil profond(0XFFFFFFFFFFFF); // convertir
}
Eeprom.Commencer(512);
En série.Commencer(115200);
En série.Imprimeur();
En série.Imprimeur("Voltage =" + Chaîne(tension) + "Mvolt");
En série.Imprimeur("Commencez");
Wifi.persistant(faux); // ne stocke pas la connexion à chaque fois pour enregistrer l'usure sur le flash
Wifi.Mode(Wifi_sta);
Wifi.SetOutputPower(10); // réduire la puissance de sortie RF, augmenter s'il ne se connecte pas
Wifi.Commencer(Ap_sid, Ap_pass);
En série.imprimer(F("Connexion au wifi"));
En série.Imprimeur(Ap_sid);
int wifitime = millis() + temps libre; // ou 60 secondes
Pendant que (Wifi.statut() != Wl_connected && wifitime > millis()) {
En série.imprimer(".") ;
retard (1000);
}
SI (Wifi.statut() == Wl_connected) {
Smtp.se soucier("Large@gmail.com")
.SetPassword("Mot de passe")
.Matière("Matière")
.partir("De")
.setforgmail(); // définit simplement le port sur 465 et SetServer ("smtp.gmail.com");
SI (Flag_post == vrai || Exceptionnel_email > 0) {
e-mail++; Eeprom.l'écriture(4, e-mail); Exceptionnel_email = 0; Eeprom.l'écriture(0, Exceptionnel_email);
Smtp.Diffuser("Dr.h.schmidt@online.de", Chaîne(tension) + "Mvolt \ r" + Chaîne(e-mail) + "Une liste de souhaits est entré dans la boîte aux lettres de la gare 2");
}
Autre SI (Flag_Lustration == vrai ) {
Smtp.Diffuser("Dr.h.schmidt@online.de", Chaîne(tension) + "Boîte aux lettres Mvolt \ R sur la gare 2");
Exceptionnel_email = 0; Eeprom.l'écriture(0, Exceptionnel_email); Eeprom.l'écriture(4, 0);
}
Autre SI (tension > TENSION DE CHARGEMENT_MAX) {
Smtp.Diffuser("Dr.h.schmidt@online.de", "Voltage de surtension =" + Chaîne(tension) + "Mvolt email =" + Chaîne(e-mail) + "Email exceptionnel =" + Chaîne(Exceptionnel_email)); // Commentaire sur éventuellement
Eeprom.s'engager();
Espiègler.sommeil profond(0x10000000) ; /// toutes les 10 secondes pour la dégradation des surtensions
}
//////// que pour tester la minuterie
Autre SI (vrai) {
Smtp.Diffuser("Dr.h.schmidt@online.de", "Email =" + Chaîne(e-mail) + "Email exceptionnel =" + Chaîne(Exceptionnel_email) + "Voltage =" + Chaîne(tension) + "Mvolt"); // Commentaire sur éventuellement
}
///////
}
Eeprom.s'engager();
Espiègler.sommeil profond(0XFFFFFFFFFFFF); // Nombre de microsecondes de microsecondes pour dormir. La valeur maximale est 4294967295US ou ~ 71 minutes.
// Il ne veut jamais arriver ici!
}
annuler boucle() { // Il ne veut jamais arriver ici!
}
///////// pour le bon usage, commencez toutes les commandes d'impression série //////////////
Merci à M. Schmidt pour sa contribution.
7 commentaires
Gorcon
Wo finde ich den aktualisierten Schaltplan? im oben angegebenen Schaltplan ist nicht einmal der Schalter eingezeichnet, geschweige denn die Bauteilnummern. Verbindungspunkte fehlen ebenfalls. Oder wird das jetzt neuerdings so gezeichnet (kenne ich so nicht und ich mache das schon seit über 45 Jahren.)
Helmut Schmidt
Hallo,
@ Herrn Carius,
Ihn Vorschlag ist interessant. Ich gehe davon aus, dass es sich dabei um wieder aufladbaren Akku handelt. Z.B. von Conrad
CR123 A Li-Ion Akku 16340 mit 3,7 Volt, min.700mAh, typisch 760mAh, max. 820mAh, 35×16mm
Ich habe ja den Li-Ion-Akku, 18650, 3,7 V, 2600 mAh, inkl. MicroUSB Ladebuchse getestet. In der Kombination mit Solarpanel ist dieser Akku aber schlechter aufladbar als NiMH. Ich würde davon ausgehen, dass in CR123 ebenfalls eine Ladenkontrolle eingebaut ist.
Aus meiner Sicht haben alle Li-Ion-Akku, soweit sie gesichert sind, oder die Anwendung des TP4056 den Nachteil, dass die Ladenkontrolle etwas Strom verbraucht. Im Freien, ist das kein Problem. Sollen die Solarpannels aber bei Zimmerhelligkeit aufgeladen werde, verbraucht die Ladenkontrolle bereits den Strom. Sprich, die Ladebilanz ist negativ. Es ist nicht einfach den sehr geringen Strom aus Solarpannels auch in einen Akku zu speichern. Ob eine Z-Diode nötig ist und ob die Ladebilanz damit positiv, hängt von den Gegebenheiten ab.
Helmut Schmidt
Hallo,
@ Herrn Burmester
bei der Berechnung des Innenwiderstandes habe ich es mir zu einfach gemacht. Ich habe geschrieben: Setzt man einen weitere Widerstand von 680 kOhm zwischen A0 und Vin dazu, wird der Spannungsbereich von 1 V auf (680 + 320)/320 = 3.1 * 3V = 9.3 V erweitert.
Die korrekte Berechnung liefert 10V. Google weist zum Thema „Wemos D1 mini Innenwiderstand an Analogeingang“ einige Internetseiten, z.B. https://www.nikolaus-lueneburg.de/2016/12/spannungsteiler/ .
Insgesamt sind 3 Widerstände von 100 kOhm (intern), 220 kOhm (intern) und 680 kOhm (extern) in Reihe geschaltet. Am 100 kOhm Widerstand wird mit dem Analog Digital Converter (ADC) des D1 mini die Spannung gemessen, der für eine maximale Spannung von 1 Volt ausgelegt ist. Zusammen mit dem externen 680 kOhm Widerstand, wird der Spannungsbereich auf 10 Volt erweitert. Sorry, bin halt nur Hobby-Elektriker. Der Schaltplan wird abgeändert.
veit burmester
Hallo
Da meine ersten Anmerkungen nicht angezeigt werden möchte ich hier weitere Änderungswünsche für den Artikel machen.
Ein Spannungsteiler aus 220 kOhm und 100 kOhm kann keinen Innenwiderstand von 320 kOhm abbilden höchstens eine Reihenschaltung der Widerstände. Die Parallelschaltung von einem Kondensator und einem Widerstand ist ein RC Kombination und kein Spannungsteiler. Die Berechnung des Spannungsbereiches ist von mir (Elektromeister) nicht nachzuvollziehen. Vielleicht fehlen mir auch entsprechende Werte für die Berechnung. Deshalb meine Bitte hier mehr Transparenz zu schaffen.
Trotzdem ein gutes Projekt das auch für andere Anwendungen genutzt werden kann. Z.b. Zutrittskontrolle in Abwesenheit. Ich sage hier extra nicht “Alarmanlage”.
Frank Carius
Man lernt jedes mal bei euren Beispielen was dazu. Gerade der Betrieb eines ESP mit Akku und Solarzelle ist ja schon eine oft geforderte Aufgabe. Laderegler oder selbst LowPowerSpannungsregler haben oft mehr Eigenbedarf als die ganze DeepSleep Schaltung. Ihr kommt aber 4.1mAh/Tag. Da könnte man mit CR123 Batterien (ca. 700mAh) eventuell besser fahren, zumal der ESP dann nicht immer wieder zu “Ladekontrolle” aufwachen muss. Quasi “D5/D7” Kontakt als Aufwachtrigger reicht und vielleicht einmal am Tag einen "ich lebe noch und meine Batterie hat so viel Volt) Statusmeldung.
Eine andere Option wäre doch einfach die Eingangsspannung durch die Solarzelle durch eine Zehnerdiode zu begrenzen. Dann “verheizt” man zwar etwas am Wiederstand und Z-Diode aber das macht die Schaltung heute ja auch durch “WLAN” als Verbraucher einschalten. Notfalls macht man die Solarzelle etwas größer (mehr Strom, nicht mehr Spannung) um noch genug Ladestrom zu haben.
Da hätte ich aber mehr vertrauen in die “eingebaute” Hardwaresicherheit ohne Software.
Oder man greift gleich zum TP 4056 (Auch hier bei AZ https://www.az-delivery.de/products/az-delivery-laderegler-tp4056-mini-usb) der bis zu 8V Eingang kann und den LiPo vermutlich besser schützt. Notfalls mit einer Z-Diode davor, wenn die Solarzelle eine höhere Leerlaufspannung haben sollte.
Aber bitte weiter so.
Andreas Wolter
@Winfried Gräf: der Beitrag (samt Schaltung) wurde noch einmal aktualisiert. Danke für den Hinweis.
Winfried Gräf
Stimmt der Schaltplan ? Schalter ?