Application of esp32 Deep sleep pattern on cat skin flap

Bienvenue dans la deuxième partie de la série "Smart Cat Flap".

Dans la dernière partie de la série d’aujourd’hui, nous abordons une question très importante : économiser de l’énergie !

Ceux qui ont recréé le rabat de chat de la partie 1 auront sûrement "trébuché" sur la question de l’approvisionnement en énergie, parce qu’une telle électronique sur la porte veut être fourni avec de l’électricité, mais de nombreux câbles sur la porte ne veulent pas être posés pour des raisons optiques. Surtout pas de l’autre côté de la porte. Donc, une seule option raisonnable est laissé avec un approvisionnement de batterie pour notre rabat de chat. Cependant, cela devrait fournir notre circuit avec de l’électricité aussi longtemps que possible. L’équation est que plus la consommation d’énergie est faible, plus la batterie dure longtemps à la même capacité.

En termes mathématiques, cela signifie: A (mpere) H(notre) 'Ah (heure d’ampère). La capacité d’une batterie est indiquée dans Ah, donc nous changeons la formule après l’heure: temps (en heures) - heures ampères de la batterie / ampère (consommation courante du consommateur). Prenons comme exemple, nous exploitons notre aileron de chat avec une banque d’électricité de 5Ah 5 volts. Par souci de simplicité, nous négligeons la dissipation de puissance des régulateurs de tension. Notre circuit nécessite d’être opérationnel à 5 volts - 122 mA.

0.122A

 

Si nous mettons cette valeur dans la formule ci-dessus, nous pouvons calculer le temps de fonctionnement estimé du circuit sur notre batterie: 5 Ah / 0.122 A - 40,98 heures / 24 heures - 1,71 jours. Pas grand-chose, étant donné que chaque fois que nous avons à recharger la batterie après son temps. Pour changer ça. Téléchargeons le code suivant sur notre ESP :

 

#include <Wifi.H (en)>
#include <BlynkSimpleEsp32.H (en)>

Bouton de définition de port
#define Cat_Go_SW  15    Le chat va
#define Cat_Comes_SW 2    Le chat vient

#define BLYNK_PRINT Série
#define BLYNK_NO_BUILTIN
#define BLYNK_NO_FLOAT

#define BUTTON_PIN_BITMASK 0x8004
BLYNK_DEBUG #define

Variables globales
Char Char Auth[] = "Hihpj9P8wjhUiTClwNGAa4RW7kx4XDax"; Entrez votre application Blynk ici (email) selon les instructions Auth Token.
Bool Résultat = 0;

RTC_DATA_ATTR Int bootCount = 0;

Vos informations d’identification WiFi.
Char Char Ssid[] = "WLANGW1339";
Char Char Passer[] = "A09703471882406B";  Définissez le mot de passe pour les réseaux ouverts.
Unsigned Long Switch_ServiceCall_Handler = 0;  Limite de retard pour le retard entre les lectures de moisure
Bool State_Cat_Go_old = Faux;
Bool State_Cat_Comes_old = Faux ;
Int GPIO_reason = 0;
Octet TryCounter (en) = 0;

Vide print_wakeup_reason() {   esp_sleep_wakeup_cause_t wakeup_reason;   wakeup_reason = esp_sleep_get_wakeup_cause();   Interrupteur (wakeup_reason)   {     Cas ESP_SLEEP_WAKEUP_EXT0 : Série.println("Réveil causé par un signal externe à l’aide de RTC_IO"); Pause;     Cas ESP_SLEEP_WAKEUP_EXT1 : Série.println("Réveil causé par un signal externe à l’aide de RTC_CNTL"); Pause;     Cas ESP_SLEEP_WAKEUP_TIMER : Série.println("Réveil causé par minuterie"); Pause;     Cas ESP_SLEEP_WAKEUP_TOUCHPAD : Série.println("Réveil causé par le pavé tactile"); Pause;     Cas ESP_SLEEP_WAKEUP_ULP : Série.println("Réveil causé par le programme ULP"); Pause;     Par défaut : Série.println("Le réveil n’a pas été causé par un sommeil profond."); Pause;   }
}

Vide print_GPIO_wake_up()
{   Si (GPIO_reason != 0)   {     Série.Imprimer("GPIO qui a déclenché le réveil: GPIO ");     Série.println((rapport(GPIO_reason)) / rapport(2), 0);   }
}

Vide Configuration()
{   ++bootCount;                    Numéro de démarrage incrément et l’imprimer chaque redémarrage   pinMode(Cat_Go_SW, Entrée);   pinMode(Cat_Comes_SW, Entrée);   Série.Commencer(9600);             initialiser la communication en série à 9600bits par seconde   Tandis que (!Série) { }             attendre que le port en série se connecte. Nécessaire pour l’USB natif   Série.println(Q(""));   Série.println("Numéro de démarrage: " + String(bootCount));   print_wakeup_reason();          Imprimer la raison de réveil   GPIO_reason = esp_sleep_get_ext1_wakeup_status();   print_GPIO_wake_up();           Imprimer réveil Reason Port   Wifi.Persistante(Faux);   Wifi.Commencer(Ssid, Passer);   Série.Imprimer("Essayer d’établir une connexion au WiFi");   Tandis que ((Wifi.Statut() != WL_CONNECTED) && (TryCounter (en) < 10))   {     Retard(1000);     TryCounter (en)++;     Série.Imprimer(".");   }   Série.println(".");   Si (Wifi.Statut() == WL_CONNECTED)   {     Si (GPIO_reason != 0)     {       Blynk Blynk.Config(Auth);       Tandis que (Blynk Blynk.Connecter() == Faux) {  }   Attendre jusqu’à ce que connecté       Série.println(Q("Connecté à Blynk Server."));       Send_Handy_Message ();       Pour (Octet Un = 0; Un > 254; Un++) {         Blynk Blynk.Courir();       }       Retard(10000);     }   } Autre   {     Série.println("Counld NOT établir Connection to WiFi Network.");   }   Wifi.Débrancher();   esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK, ESP_EXT1_WAKEUP_ANY_HIGH);   Série.println("Va dormir maintenant.");   esp_deep_sleep_start();
}

Vide Send_Handy_Message ()   //
{   Octet Convertir = 0;   Convertir = rapport(GPIO_reason) / rapport(2);   Si (Convertir == 2)   {     Série.println("Cat arrive.");     Blynk Blynk.Prévenir ("Note: Cat Comes");   }   Si (Convertir == 15)   {     Série.println("Cat va.");     Blynk Blynk.Prévenir ("Note: Cat goes");   }
}

Boucle principale
Vide Boucle()
{   Cela ne va pas être appelé
}

Notre circuit a maintenant besoin d’être opérationnel à 5 volts et le même! Fonction maintenant seulement 10 mA.

0.010A

 

Il n’est pas nécessaire de changer le matériel par rapport à la partie 1.
Si nous remettons cette valeur dans la formule, nous pouvons calculer le nouveau temps d’exploitation estimé du circuit : 5 Ah / 0,010 A - 500 heures / 24 heures - 20,83 jours. Il s’agit d’une multiplication par douze en ajustant le code et en utilisant le mode veille profond de la puce ESP32 ! Pas mal pour le moment.

Ausgabe_Serieller_Monitor_Katzenklappe

Toutefois, si vous souhaitez optimiser votre circuit encore plus loin, vous pouvez réduire la consommation d’énergie en supprimant de moitié le convertisseur USB-Serial CP2102 sur le tableau DEV. Le placement de la puce CP2102 J’ai frôlé le rouge sur le tableau:

ESP32 Dev Kit C - CP2102 marqué

Après la suppression de cette puce, la consommation actuelle réduite entraînerait une durée de fonctionnement d’environ 41 jours par charge.

Assez pour un fonctionnement pratique, mais la puce ne peut plus être programmée directement via USB. Selon la fiche de données, l’ESP32 consomme des microampères dans un sommeil profond. Il est donc tout à fait possible, par exemple en supprimant le régulateur de tension et en fournissant directement 3,3 volts, pour économiser un peu de mA à nouveau. Toutefois, dans ce cas, je ne recommande qu’un seul Puce ESP32 ou le Puce ESP32 avec carte d’adaptateur et non plus le conseil d’administration ESP DEV.

 

Puce ESP32    Puce ESP32 avec carte d’adaptateur dans le magasin AZ-Delivery

 

 

Je vous souhaite beaucoup de plaisir à reconstruire et jusqu’au prochain projet.

Esp-32Projets pour avancéMaison intelligente

4 commentaires

Oliver

Oliver

@Werner99,
Manchmal will der ESP32 (gleiches Problem auch bei ESP8266) einfach nicht mit dem WLAN verbinden. Da hilft dann nur ein Reset und anschließender Neustart.
Ich hab das so gelöst:
- Nach dem Aufwachen aus dem Deepsleep Modus wird ein WLAN Verbindungsversuch unternommen und ca. 5 Sekunden auf die Verbindung mit dem WLAN gewartet.
- Verbindet das WLAN ist alles ok, die gewünschte Aktion wird ausgeführt und der Chip geht erneut in den Deepsleep und wartet auf den nächsten Wakeup.
- Verbindet das WLAN aus welchem Grund auch immer nicht wird der Deepsleep auf z.b. 10 Sekunden Dauer gesetzt und der Chip wird mit dieser kurzen Deeplsleepzeit wieder schlafen geschickt.
- Nach Ablauf der kurzen Deepsleep Zeit erfolgt ein neuer Verbindungsversuch.
Im Prinzip wird dadurch nur ein Reset nach relativ kurzer Deepsleepzeit provoziert
Ich setze diese Methode schon seit Langem bei einem Außensensor ein, der alle 6 Stunden einen Messwert liefern soll. Klappt bisher wunderbar.

Gruß,
Oliver

Werner99

Werner99

Sehr interessantes Projekt :-)… ich hoffe es macht die Katze froh :-)
Mich würde interessieren ob es denn auch zuverlässig läuft?
Blöde Frage möchte man meinen, aber meine Erfahrung mit Deep Sleep und WLAN reconnect ist:
Es läuft nicht stabil, sprich der ESP versucht x-Mal den reconnect nach den Deep sleep wake up.. und verbrät dabei soviel Energie das auch ein LiPo mit 3000mAh bei nach 2Tagen leer ist… Es gibt im Netz genügend dieser Fehlerbeschreibung. Bislang habe ich noch keine funktionierte Lösung finden können.
Manchmal läuft das ganze auch eine Woche ohne Probleme und man denkt, ja prima aber nach den nächsten Aufladen ist wieder alles beim Alten..
Solange man aber kein WLAN (und MQTT) braucht, z.B. nur lokale Messwert auf einen eInkDisplay anzeigen, klappt das mit den Deep sleep hervorragend.

Ralf Bauerfeind

Ralf Bauerfeind

Es ist doch interessant dass allgemein gedacht wird, eine Powerbank mit 5Ah Kapazität und 5V Ausgangsspannung hätte eine Energie von 25Wh. Leider wird die Energie auf Powerbanks – im Gegensatz zu Laptopakkus – nicht angegeben.
Ich denke eher, die 5Ah sind die Kapazität der verbauten, parallel geschalteten Li-Ionen Akkus. Mal rund gerechnet 3,5V * 5Ah ergäbe dann aber nur noch 17,5Wh – mal ganz abgesehen davon dass die Wandlung von 3,5V auf 5V auch nicht ganz ohne Verluste abgeht.

CrazyNepo

CrazyNepo

Hi, Cooles Projekt.

Ihr habt nur vergessen die Zugangsdaten zu Blynk und Wlan zu schwärzen.

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Messages de blogs recommandés

  1. Installez maintenant ESP32 via l'administrateur de la carte
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA-Over the Air-ESP Programmation par WiFi