Aktionen

ESP8266 Wemos D1 Mini Batterie Versorgungsspannung auslesen überwachen

Aus znilwiki

Version vom 23. Februar 2020, 07:24 Uhr von BLinz (Diskussion | Beiträge) (→‎Sketch)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Ein Grund das ich mich so für den Wemos D1 Mini begeistere ist das er ganz leicht mit 2 x 1,5V Batterien betrieben werden kann.
Ich hab noch einige Batteriegehäuse für 2 x AA oder 2 x AAA Batterien - und die lege ich einfach an den 3V3 und GND Pin.

Mein erstes Projekt war ein WLAN-Button. Der Taster löst einen Reset aus, der Wemos fährt hoch, ruft eine URL auf und legt sich wieder schlafen.
Mein Messgerät sagt das er im DeepSleep 0,015mA, also 15µm verbraucht.
Beim Boot lese ich die Spannung der Batterien aus und melde diese an meinen Zabbix-Server, ebenfalls per URL-Aufruf: Zabbix sender per Web URL-Aufruf nutzen

Nachfolgend beschreibe ich wie ich das gemacht habe (habe eine Weile Googeln müssen dafür).


Schaltung

Für die genaue Messung der Spannung muss der Pin A0 mit 3V3 verbunden werden:
Wemos D1 mini A0-3.3V Steckplatine.png


Sketch

Das Sketch gibt die Informationen auf dem Seriellen Monitor aus.
Zusätzlich steht da der Grund für das Booten - Reset oder Stromversorgung hergestellt.

#include <ESP8266WiFi.h> //Ist nur für die Funktionen der Reset-Info eingebunden 

//Spannung auslesen vorbereiten
ADC_MODE(ADC_VCC);
String Ubatt = "";
String ResetOrBoot = "";

void setup() {
  // Serielle Schnittstelle aktivieren für Debugging
  Serial.begin(115200);
  delay(100);
  Serial.println("Setup ...");
  // Grund für den Start erfahren -> Reset oder Stromversorgung hergestellt?
  const rst_info * resetInfo = system_get_rst_info();  // Resetgrund einlesen
  if ((resetInfo->reason) == 6) {
    ResetOrBoot = "Boot (Stromversorgung hergestellt)";
  } else {
    ResetOrBoot = "Reset";
  }
}

void loop() {
  Serial.println();
  // Warum booten wir?
  Serial.println("Auslöser: " + ResetOrBoot);
  Serial.println();
  Serial.print("Versorgungs- oder Batteriespannung:  ");
  // Betriebsspannung auslesen
  // genaue Spannung der Stromquelle, PIN A0 muss mit 3,3V Verbunden werden!
  uint16_t my_getVcc_Voltage = ESP.getVcc();
  float_t my_Voltage_calculated = ((float)my_getVcc_Voltage/1024.0f);
  Ubatt = String(my_Voltage_calculated, 3);
  Serial.println(Ubatt);

  // Und Gute Nacht - bis zum nächsten Reset oder Boot
  ESP.deepSleep(0);
}



Testausgabe

Im Seriellen Monitor sollte folgendes erscheinen:

setup ...

Auslöser: Boot (Stromversorgung hergestellt)

Versorgungs- oder Batteriespannung:  3.587


Hier mal die Aufzeichnungen meines WLAN-Buttons:

ClipCapIt-190308-210049.PNG



Quellen

Das mit der genauen Spannungsmessung habe ich hierher: https://github.com/esp8266/Arduino/issues/721#issuecomment-325149737
Und das mit dem Reset Grund hierher: https://www.mikrocontroller-elektronik.de/wlan-notruftaster-mit-dem-esp8266-modul/


Kommentare

Loading comments...