ESP 32 sendet nur selten Daten

Ich habe eine Bienenstock-Waage gebaut und das Gewicht wird über einen Esp32 mithilfe der Arduino Iot Cloud auf ein Dashboard gesendet. Das Problem ist jetzt das der Esp32 nur selten was sendet. Das Komische ist das irgendwie ein "Zeitmuster" hat. Was ich damit meine ist das der Esp32 die ganze Nacht lang sendet und in der Früh ca.9 Uhr aufhört. Am tag sendet er nur selten meist nach einen Reset ein paar Minuten. Durch diese Erkenntnis glaube ich das Vermutung 2 am wahrscheinlichsten ist.

Der Aufbau ist folgender (ESP32 -> Ein/Aus-Schalter->Powerbank(30.000mAh) und diese Powerbank ist noch mit einem kleinem Photovoltaik Modul verbunden das die Powerbank "dauerhaft" aufgeladen wird.)

Meine 3 Vermutungen sind:

  1. Irgendwo ein Wackelkontakt des Schalters (ich habe einen kleinen Schalter eingebaut mit dem man die Stromversorgung des Esp32 Aus/Ein-schalten kann.

  2. Der Esp32 wird über eine Powerbank versorgt, und ich glaube das der Esp32 zu wenig Strom "zieht" das sich die Powerbank automatisch abschaltet.

  3. Verbindungsprobleme mit dem WLAN, also das die Internet Verbindung zu schlecht ist.

Vielleicht ist es einer dieser Probleme oder ein anderer. Ich bin Ratlos, also bitte ich um Hilfe.

Der Code (Vielleicht ist der das Problem :thinking:):


#include "thingProperties.h"
#include <HX711.h>
#include <Adafruit_BusIO_Register.h>
#include <Adafruit_I2CDevice.h>
#include <Adafruit_I2CRegister.h>
#include <Adafruit_SPIDevice.h>
#include <Wire.h>

HX711 scale;

const int LOADCELL_DOUT_PIN = 21;
const int LOADCELL_SCK_PIN = 22;

const unsigned long MESS_INTERVAL = 3500;
const unsigned long DURCHSCHNITT_PERIODE = 4 * 60 * 60 * 1000; // 4 Stunden in Millisekunden

unsigned long letztemesszeit = 0;
unsigned long lasttime = 0;
unsigned long now = 0;

float aktuellezeit = 0;
float Gewicht = 0.0;
float gewicht = 0.0;

boolean h4;

void setup() {
  Serial.begin(9600);
  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
  scale.set_offset(232534);
  scale.set_scale(28.493797);
  initProperties();
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
  h4 = true;
  status = false;
}

void loop() {
  if (ArduinoCloud.connected()) {
    status = true;
  }
  else {
    status = false;
  }
  ArduinoCloud.update();
  //------------------------
  aktuellezeit = millis();
  if (aktuellezeit - letztemesszeit >= MESS_INTERVAL) {
    letztemesszeit = aktuellezeit;
    if (scale.is_ready()) {
      gewicht = scale.get_units(10);
      gewicht_kg = gewicht / 1000.0;
      if (h4) {
        Gewicht = gewicht_kg;
        h4 = false;
      }
      //24h-----------------------
      if (aktuellezeit >= DURCHSCHNITT_PERIODE) {
        Gewicht = gewicht_kg;
        letztemesszeit = aktuellezeit;
      }
      gewicht_kg_24 = gewicht_kg - Gewicht;
    } else {
      Serial.println("Error");
      status = false;
    }
  }
}
void onGewichtKgChange()  {
  // Add your code here to act upon GewichtKg change
}
/*
  Since GewichtKg24 is READ_WRITE variable, onGewichtKg24Change() is
  executed every time a new value is received from IoT Cloud.
*/
void onGewichtKg24Change()  {
  // Add your code here to act upon GewichtKg24 change
}
/*
  Since Status is READ_WRITE variable, onStatusChange() is
  executed every time a new value is received from IoT Cloud.
*/
void onStatusChange()  {
  // Add your code here to act upon Status change
}

Ich kann jetzt nicht wirklich erkennen, wo du dabei ein Problem hast.
Alle drei Punkte lassen sich doch leicht durch dich überprüfen.
Hast du das schon gemacht und welches Ergebnis kam dabei rraus ?

Erstmal Danke aber:

Wie soll ich Punkt 2 selbst Testen. Mir ist auch schon passiert das ich das Gehäuse wo das ganze verbaut ist, aufgemacht habe und die Powerbank aus war und dann als ich den Power Knopf (Um den Akkustand der Powerbank anzuzeigen) gedrückt habe hat er wieder gesendet.
Also ich glaube das es Punkt 2 ist. Hast du eine vielleicht eine Lösung dafür?

Punkt 1 ist es glaube ich nicht den das würde sich anders äußern (glaube ich zumindest)

Punkt 3 das gleiche wir bei Punkt 1.

Naja, beim ESP32 lassen sich alle Aktivitäten sehr gut loggen und vielseitig speichern bzw. anzeigen.
Und ja, dein Problem sehe ich auch in der Versorgung, die bei zu geringem Strom abschaltet. Durch entsprechende Technik kann das verhindert werden.

Edit:
Dazu müsstest du wissen, nach welcher Zeit die Powerbank abschaltet. Dann kannst du mittels Timer und Transistor einfach einen Widerstand parallel zur Spannung schalten, der einen kurze, höheren Stromfluss bewirkt und damit die Powerbank überlisten.

Allerdings gegen dieses Powerbank Problem spricht, dass die Daten doch wieder ( wenn auch später) gesendet werden. Da wäre eine Logdatei hilfreich, die dir verschieden Parameter sendet. Z.B. ein nicht erwarteter Neustart oder die Betriebsspannung, oder die WLan Feldstärke. Diese Informationen könnten da weiter helfen.

1 Like

Hallo
Du könntest das für ein paar Tage mit einem Steckernetzteil betreiben.
Ich denke auch die Powerbank ist das Problem .

Sendet der EPS32 an ein WLAN oder hängt da noch ein Mobilfunkmodul am ESP32 hinten dran? wohl nicht sendet an Arduino Cloud

Wenn es eine Powerbank ist. Wie viel mAh werden denn an einem Tag verbraucht?
Man kann ESP32 in den deep-sleep Modus versetzen da brauchen 0815-ESP32 einen Strom 8 - 10 mA. Auf stromsparen optimierte ESP32 kommen da auf 0,015 mA.
Wenn alle halbe Stunde mal Meßdaten senden reicht müsste da auch eine 5 Ah Bleigelbatterie kombiniert mit Solarladeregler ganz locker reichen

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.