Stromverbrauch messen mit ESP8266 ESP-12F und PZEM004 100A

  • Hallo an alle,

    ich habe meinen ESP8266 ESP-12F von AZDelivery mit einem PZEM004 in der 100A Variante verbunden.

    Leider erhalte ich keine Messwerte.

    Das Thema wurde mal in der Zeitschrift Make Ausgabe 3/21 behandelt.

    aber auch hier:

    Link

    Am PZEM004 100A gibt es neben 5V und GND auch noch RX und TX.

    Ich muss gestehen ich weiß nicht wirklich was es mit RX und TX auf sich hat. Aber ich habe es an meinen ESP an D9 (RX) und D10 (TX) gehangen.

    Ich nutze für den 5V Anschluss den 3,3V Anschluss vom ESP und GND Anschluss den GND Anschluss vom ESP.

    Ich habe gelesen das der PZEM004 100A auch mit 3,3 V funktionieren soll. Aber auch von einer Separaten Stromquelle die 5 V liefert erhalte ich keine Messwerte.

    Wann mach ich falsch?


  • Stromverbrauch messen mit ESP8266 ESP-12F und PZEM004 100A? Schau mal ob du hier fündig wirst!

  • Zur hilfreichsten Antwort springen
  • Also von der verlinkten Zeitschrift verstehe ich nur die Bilder... :blush:

    RX und TX sind die seriellen Pins über die Dein ESP8266 mit dem die Daten austauscht (per Modbus)

    Hier dürfte auch das (erste?) Problem liegen:

    PZEM004Tv30 pzem(D10,D9); ist kein Konstruktor der bei dieser Library (für mich) Sinn macht.

    In PZEM004Tv30.h man die verschiedenen Konstruktoren und da wird im Konstruktor nicht einfach RX/TX angegeben.

    Ich würde vorschlagen Du hältst Dich an das SoftwareSerial Beispiel (D9 und D10 sind nicht als Hardware Schnittstelle möglich):

    Code
    #define PZEM_RX_PIN D10    //RX Pin: TX des PZEM004
    #define PZEM_TX_PIN D9     //TX Pin: RX des PZEM004
    
    SoftwareSerial pzemSWSerial(PZEM_RX_PIN, PZEM_TX_PIN);
    PZEM004Tv30 pzem(pzemSWSerial);

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

    Einmal editiert, zuletzt von VeryPrivat (27. November 2021 um 10:58) aus folgendem Grund: RX/TX müssen vertauscht werden (fred0815/https://www.instructables.com/Power-Peacefair-PZEM-004-ESP8266-Arduino-Nano/)

  • Hallo und schönen Abend euch zwei.

    fred0815 : ehrlich gesagt verstehe ich nicht was du mir sagen willst ;) soll ich Rx mit Tx tauschen?

    VeryPrivat : ich dachte in

    PZEM004Tv30 pzem(D10,D9); 

    muss der Port am ESP hinterlegt werden.

    Meine Kabel (Rx und Tx) habe ich genau auf diese Pins meines ESP angeschlossen.

  • red0815 : ehrlich gesagt verstehe ich nicht was du mir sagen willst ;) soll ich Rx mit Tx tauschen?

    Fred hat mich darauf hingewiesen, dass RX und TX getauscht werden müssen - also man muss bei der Zuweisung von RX in pzemSWSerial den TX Pin angeben und umgekehrt. Ich habe das entsprechend in meinem Code korrigiert.

    VeryPrivat : ich dachte in

    PZEM004Tv30 pzem(D10,D9);


    muss der Port am ESP hinterlegt werden.

    Meine Kabel (Rx und Tx) habe ich genau auf diese Pins meines ESP angeschlossen.

    Nein, das habe ich versucht Dir zu erklären. Schau Dir bitte das verlinkte Beispiel an, da wird gezeigt wie es richtig geht.

    Falls es einen Quelle gibt, die sagt es gehört so gemacht wie Du es machst, zeig sie uns bitte...

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • fred0815:

    also ist der Tx am PZEM004 100A der Sender und muss auf dem Rx - Pin meines ESP?

    und der Rx am PZEM004 100A der Empfänger und muss auf dem Tx - Pin meines ESP?

    Richtig verstanden?

    Zu mindestens habe ich das mal getestet. Trotzdem empfange ich keine Daten. Kann es noch etwas mit den Pins D9 und D10 zu tun haben?

    • Hilfreichste Antwort

    Moin tutter,

    man sollte schon richtig lesen...

    Von deiner verlinkten Seite:

    Zitat


    Note: Do not enable serial port "Serial.begin (9600);" do not transmit, busy port communicating with PZEM-004

    Dann, um die Bemerkung von fred0815 zu unterstützen..

    Zitat


    PZEM004T pzem(3,1); // (RX,TX) (D9,D10) NodeMCU connect to TX,RX of PZEM /// Defaults pins Serial port = PZEM004T pzem(&Serial); // RX,TX

    Frage, der Code steht so in der Make? Ich schau sonst morgen nach!

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

    Einmal editiert, zuletzt von Bernd666 (28. November 2021 um 14:57) aus folgendem Grund: Typo

  • Bernd666: Vielen Vielen Dank! du hast mir den Abend gerettet. Du kannst gern morgen in die Make schauen, habe ich auch gerade noch einmal getan bzw, die ganze Zeit neben mir liegen. Darin steht der Code genau so wie oben aufgeführt.

    Durch deinen Hinweis konnte ich aber den Artikel noch einmal gezielter "lesen":

    Auf Seite 51 steht:

    In den Zeilen 8 bis 27 werden der Server und die Datenausgabe über die serielle Schnittstelle (via USB) gestartet. Über den USB-Bus kann man sich nämlich für Testzwecke beispielsweise mit dem seriellen Monitor der Arduino-IDE sämtliche Werte anzeigen lassen. Lesen Sie dazu bitte den Warn-Kasten der zweiten Seite dieses Artikels.

    Dort geschrieben das ich bei 230 V nicht drauf rum kauen soll!

    Hier steht nirgends auch nur ein Wort das ich mit der Ausgabe über den Serial Monitor die Kommunikation zum PZEM004 blockiere!

    Das ist echt mies!

    Aber auch Schande über mein Haupt! Ich hätte den anderen Artikel besser lesen können, dann wäre das hier nicht so ausgeartet!

    Danke an alle.

  • Moin tutter,

    also Serial.begin() ausgeschaltet und es ging?

    Es gibt nur eine "hilfreichste Antwort".

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Moin tutter,

    Frage, der Code steht so in der Make? Ich schau sonst morgen nach!

    Darin steht der Code genau so wie oben aufgeführt.

    Nun habe ich doch nach gesehen. Make 3/21 und was sehe ich...

    Code
    PZEM004Tv30 pzem(D1,D2);

    Nichts von D9 / D10.


    Die Erklärung: D9/D10 sind RX/TX die auch von Serial genutzt wird. Wenn du dir per Serial.print was ausgeben läßt, dann kann man nicht gleichzeitig, mit den gleichen Pins, was auslesen.

    73 de Bernd

    Ach, wenn das Thema erledigt ist, dann, bitte als erledigt markieren. Das geht oben bei "Thema bearbeiten". Danke!

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Hallo Bernd,

    danke für die Mühe und die Erklärung. Mein ESP hätte noch weitere RX und TX Anschlüsse zb. D8 = TXD2 und D7 = RXD2. Kann ich diese nutzen um den PZEM004 auszulesen und gleichzeitig den Serial Monitor zu nutzen? Wahrscheinlich nicht. Da ich es nicht hinbekomme. Ich nutze aber auch einfach nur die Pins ohne diese vorher als Rx und Tx zu definieren. Dazu habe ich leider noch nichts passendes gefunden. Kann man sich anzeigen lassen welchen "Zustand" die pins gerade haben?

    #define PZEM_RX_PIN D7 //RX Pin: TX des PZEM004

    #define PZEM_TX_PIN D8 //TX Pin: RX des PZEM004

  • Moin tutter,

    du kannst eigentlich jeden Pin des ESP8266 nehmen.

    in der Library PZEM-004T-V30 wird mit diesem Aufruf: PZEM004Tv30 pzem(D1,D2); altsoftserial mit den übergebenen Pins

    initialisiert.

    Hast du mal D1/D2 probiert.

    Ach und noch was. Welchen ESP nutzt du? Wemos oder NodeMCU

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Hallo Bernd,

    ach sowas geht auch? Ich kann auch in einer Library definieren welche Ports genutzt werden. Das wußte ich noch nicht! Teste ich aber mal aus (morgen),

    Ich habe weder noch - ich nutze ein ESP8266 ESP-12F von AZDelivery. Der hat auf Pin D1 und D2 nur einen normalen GPIO Port. So viel ich weiß muss doch neben dem Pinout auch die "Fähigkeit" des Ports stehen. Damit habe ich bei mir D10 = RxD0 oder D9 = TxD0 oder D8 = TxD2 oder D7 = TxD2 und D4 = TxD1 wo auch immer der "Gegenspieler" RxD1 ist - ich finde ihn nicht.

  • Moin tutter,

    also den nackten ESP8266 plus Adapterplatine?!?

    Respekt!!

    Ich habe mal die Kabeltrommel.ino gegen einen Wemos D1 mini übersetzt. Dabei gab es eine Warnung. Die habe ich beseitigt.

    Spoiler anzeigen

    ach sowas geht auch? Ich kann auch in einer Library definieren welche Ports genutzt werden. Das wußte ich noch nicht! Teste ich aber mal aus (morgen),

    Das geht natürlich auch. Ist aber nicht so gut. Besser man macht sowas im eigenen Code.

    Ok, dann probiere es morgen mal aus und sage Bescheid.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!