Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
SmartESP - SmartPi mit einem ESP32 auslesen
#1
Hallo,

hier ist ein kleines Projekt, bei dem ich den SmartPi mit einem ESP32 NodeMCU auslese und diese Daten dann über MQTT verteile. Es werden keine Daten gespeichert.

Als Grundlage wird das Projekt Basecamp von der Zeitschrift ct genommen. Bei diesen Projekt hat man bereits eine Weboberfläche für die W-LAN und für die MQTT Einstellungen.

https://github.com/merlinschumacher/Basecamp

Benötigte Hardware

1 x SmartPi: https://shop.enerserve.eu/smartpi/262/smartpi-2.0
1 x ESP32 NodeMCU (oder ähnliches) https://www.amazon.de
2 x 3 kOhm Widerstand

IDE

Als IDE wird die Arduino IDE benutzt: https://www.arduino.cc/en/Main/Software
Die Desktop Version runterladen und installieren. 

Im nächsten Schritt muss noch die Informationen für den ESP32 ins Arduino geladen werden. Dazu folgen Sie bitte diese Anleitung: https://github.com/espressif/arduino-esp32

Nun können Sie in der Arduino IDE unter "Werkzeuge" => "Board" das "ESP32 Dev Module" auswählen.

Bibliotheken laden

Es gibt die Möglichkeit die Bibliotheken direkt über die Arduino IDE runter zu laden. Allerdings sind diese nicht immer auf den aktuellsten Stand. Daher empfehle ich die Bibliotheken von Hand runter zu laden und dann in die Arduino IDE hinzuzufügen.

Dazu bitte bei folgenden Bibliotheken wir folgt vorgehen:
- Bei GitHub auf "Clone or download" klicken und als ZIP Datei runter laden
- In der Arduino IDE "Sketch" => "Bibliotheken einbinden" => ".ZIP Bibliothek hinzufügen .." und die Datei auswählen

https://github.com/merlinschumacher/Basecamp
https://github.com/me-no-dev/ESPAsyncWebServer
https://github.com/bblanchon/ArduinoJson
https://github.com/marvinroger/async-mqtt-client
https://github.com/me-no-dev/AsyncTCP

SmartPi mit dem ESP32 verbinden

Die PINs +5V, GND, SCL und SDA müssen mit verbunden werden.
   

Zusätzlich benötigen die I2C Leitungen jeweils noch einen 3 kOhm PullUp Widerstand zu 3,3V da die PullUp Widerstände auf dem SmartPi zu groß sind für den ESP32.
   

Software

Erstelle ein neues Arduino Projekt und füge den Code ein.

Hier kann man den Topic Namen für MQTT anpassen
#define TOPIC "SmartESP" 

Intervall zum Auslesen des SmartPi. Angabe in ms 
#define DELAY 5000

Überprüfen und Hochladen:

Code:
#include <Basecamp.hpp>
#include <Wire.h>

Basecamp iot;

#define TOPIC "SmartESP"
#define DELAY 5000

#define ADE_ADDRESS  0x38
#define BUFSIZE 4
#define PI 3.141592654
#define ADE7878_CLOCK   256000
#define FACTOR_CIRCLE   360
#define   FACTOR_1   256
#define   FACTOR_2   65536
#define   FACTOR_3   16777216
#define   RMS_FACTOR_VOLTAGE   2427873
#define   CURRENT_RESISTOR_A   7.07107
#define   CURRENT_RESISTOR_B   7.07107
#define   CURRENT_RESISTOR_C   7.07107
#define   CURRENT_RESISTOR_N   7.07107
#define   CURRENT_CLAMP_FACTOR_A   0.05
#define   CURRENT_CLAMP_FACTOR_B   0.05
#define   CURRENT_CLAMP_FACTOR_C   0.05
#define   CURRENT_CLAMP_FACTOR_N   0.05
#define   OFFSET_CURRENT_A   0.97129167
#define   OFFSET_CURRENT_B   0.97129167
#define   OFFSET_CURRENT_C   0.97129167
#define   OFFSET_CURRENT_N   0.97129167
#define   OFFSET_VOLTAGE_A   1.0
#define   OFFSET_VOLTAGE_B   1.0
#define   OFFSET_VOLTAGE_C   1.0
#define  POWER_CORRECTION_FACTOR_A   0.019413
#define   POWER_CORRECTION_FACTOR_B   0.019413
#define   POWER_CORRECTION_FACTOR_C   0.019413

int write_i2c(char data[],unsigned char length)
{
  unsigned char i;
  Wire.beginTransmission(ADE_ADDRESS);
  for(i=0;i<length;i++)
  {
    Wire.write(data[i]);
  }
  Wire.endTransmission();
  return i;
}

int read_i2c(char * data, int length)
{
 unsigned char i;
 unsigned char ret;
 Wire.requestFrom(ADE_ADDRESS,length);
 ret=Wire.available();
 if(ret!=length) return -1;

 for(i=0;i<ret;i++)
   data[i] = Wire.read();
 
 return ret;
}

void mqtt_publish(char name[],double data)
{
   char string[20];
   char topic[100];
   sprintf(string,"%.4f",data);
   sprintf(topic,"%s/%s",TOPIC,name);
   iot.mqtt.publish(topic, 1, true, string);
}

int init_ade7878()
{
 Wire.begin();
 Serial.println("init");
 char data[10];
 int i;

 data[0] = 0xEC;//0xEC01 (CONFIG2-REGISTER)
 data[1] = 0x01;
 data[2] = 0x02;//00000010 --> Bedeutet I2C-Lock (I2C ist nun die gewählte Übertragungsart)
 if(write_i2c( data, 3) != 3)  return -1;

 data[0] = 0xEC;//0xEC01 (CONFIG2-REGISTER)
 if(write_i2c( data, 1) != 1) return -1;

 data[0] = 0xE7;//0xE7FE writeprotection
 data[1] = 0xFE;
 data[2] = 0xAD;
 if(write_i2c( data, 3) != 3) return -1;
 
 data[0] = 0xE7;//0xE7E3 writeprotection OFF
 data[1] = 0xE3;
 data[2] = 0x00;
 if(write_i2c( data, 3) != 3) return -1;
 
 data[0] = 0xE6;//0xE60E (COMPMODE-REGISTER)
 data[1] = 0x0E;
 data[2] = 0x01;//50HZ 0x60 60HZ
 data[3] = 0xFF;
 if(write_i2c( data, 4) != 4) return -1;

 data[0] = 0x43;//0x43B5 (DICOEFF-REGISTER)
 data[1] = 0xB5;
 data[2] = 0xFF;
 data[3] = 0x80;
 data[4] = 0x00;
 if(write_i2c( data, 5) != 5) return -1;
 
 data[0] = 0x43;//0x43AB (WTHR1-REGISTER)
 data[1] = 0xAB;
 data[2] = 0x00;
 data[3] = 0x00;
 data[4] = 0x00;
 data[5] = 0x17;
 if(write_i2c( data, 6) != 6) return -1;
 
 data[0] = 0x43;//0x43AC (WTHR0-REGISTER)
 data[1] = 0xAC;
 data[2] = 0x00;
 data[3] = 0x85;
 data[4] = 0x60;
 data[5] = 0x16;
 if(write_i2c( data, 6) != 6) return -1;
 
 data[0] = 0x43;//0x43B3 (VLEVEL-REGISTER)
 data[1] = 0xB3;
 data[2] = 0x00;
 data[3] = 0x0C;
 data[4] = 0xEC;
 data[5] = 0x85;
 if(write_i2c( data, 6) != 6) return -1;
 
 delay(875);
 
 data[0] = 0x43;//0x4381 (AVGAIN-REGISTER)
 data[1] = 0x81;
 data[2] = 0xFF;
 data[3] = 0xFC;
 data[4] = 0x1C;
 data[5] = 0xC2;
 if(write_i2c( data, 6) != 6) return -1;
 
 data[0] = 0x43;//0x4383 (BVGAIN-REGISTER)
 data[1] = 0x83;
 data[2] = 0xFF;
 data[3] = 0xFC;
 data[4] = 0x1C;
 data[5] = 0xC2;
 if(write_i2c( data, 6) != 6) return -1;
 
 data[0] = 0x43;//0x4385 (CVGAIN-REGISTER)
 data[1] = 0x85;
 data[2] = 0xFF;
 data[3] = 0xFC;
 data[4] = 0x1C;
 data[5] = 0xC2;
 if(write_i2c( data, 6) != 6) return -1;
 
 data[0] = 0xE7;//0xE702 LCYCMODE
 data[1] = 0x02;
 data[2] = 0x0F;
 if(write_i2c( data, 3) != 3) return -1;
 
 data[0] = 0xE6;//0xE60C LINECYC
 data[1] = 0x0C;
 data[2] = 0xC8;
 if(write_i2c( data, 3) != 3) return -1;
 
 data[0] = 0xE7;//0xE7FE writeprotection
 data[1] = 0xFE;
 data[2] = 0xAD;
 if(write_i2c( data, 3) != 3) return -1;
 
 data[0] = 0xE7;//0xE7E3 writeprotection
 data[1] = 0xE3;
 data[2] = 0x80;
 if(write_i2c( data, 3) != 3) return -1;
 
 data[0] = 0xE2;//0xE228 (RUN-Register)
 data[1] = 0x28;
 data[2] = 0x00;
 data[3] = 0x01;
 if(write_i2c( data, 4) != 4) return -1;
 
 return 0;
}

int read_ade7878()
{
   Serial.println("read");
   double ua=230,ub=230,uc=230,ia=0,ib=0,ic=0,pa=0,pb=0,pc=0,pac=0,cosa=1,cosb=1,cosc=1,hza=50,hzb=50,hzc=50,pfa,pfb,pfc;
   double awatt,ava,avar,bwatt,bva,bvar,cwatt,cva,cvar;
   char data[30],data_out[20];
   float ergebnis;
   double VAL = PI / 180.0;
   double rms_factor_current = 4191910;
   double ia_corr=1,ib_corr=1,ic_corr=1;
   char ua_gemessen=1,ub_gemessen=1,uc_gemessen=1;
   char string[100];

   ua_gemessen=1;
   ub_gemessen=1;
   uc_gemessen=1;
   //0 current phase a
   data_out[0] = 0x43;//0x43C0 (AIRMS; Current rms an A)
   data_out[1] = 0xC0;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, 4) != 4) return -1;
   ergebnis=(double) (FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];

   ia=((((ergebnis * 0.3535) / rms_factor_current) / CURRENT_RESISTOR_A) / CURRENT_CLAMP_FACTOR_A) * 100.0 * OFFSET_CURRENT_A;

   //1 current phase b
   data_out[0] = 0x43;//0x43C2 (BIRMS; Current rms an B)
   data_out[1] = 0xC2;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(double) (FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   ib=((((ergebnis * 0.3535) / rms_factor_current) / CURRENT_RESISTOR_B) / CURRENT_CLAMP_FACTOR_B) * 100.0 * OFFSET_CURRENT_B;

   //2 current phase c
   data_out[0] = 0x43;//0x43C4 (CIRMS; Current rms an C)
   data_out[1] = 0xC4;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(double) (FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   ic=((((ergebnis * 0.3535) / rms_factor_current) / CURRENT_RESISTOR_C) / CURRENT_CLAMP_FACTOR_C) * 100.0 * OFFSET_CURRENT_C;
   
   //3 current phase n
   
   //4 voltage phase a
   data_out[0] = 0x43;//0x43C1 (AVRMS; Voltage rms an A)
   data_out[1] = 0xC1;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   if( ergebnis/10000 > 100) ua=ergebnis/10000;
   else ua_gemessen=0;
   
   //5 voltage phase b
   data_out[0] = 0x43;//0x43C3 (BVRMS; Voltage rms an B)
   data_out[1] = 0xC3;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   if( ergebnis/10000 > 100) ub=ergebnis/10000;
   else ub_gemessen=0;

   //6 voltage phase c
   data_out[0] = 0x43;//0x43C5 (CVRMS; Voltage rms an C)
   data_out[1] = 0xC5;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   if( ergebnis/10000 > 100) uc=ergebnis/10000;
   else uc_gemessen=0;
   
   //7  Phase A total active power.
   data_out[0] = 0xE5;//0xE513 (AWATT total active power an A)
   data_out[1] = 0x13;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   if( ua_gemessen) awatt=(ergebnis*POWER_CORRECTION_FACTOR_A);
   else awatt=ia*ua;
   
   //8  Phase B total active power.
   data_out[0] = 0xE5;//0xE514 (BWATT total active power an B)
   data_out[1] = 0x14;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   if( ub_gemessen) bwatt=(ergebnis*POWER_CORRECTION_FACTOR_B);
   else bwatt=ib*ub;
   
   //9  Phase C total active power.
   data_out[0] = 0xE5;//0xE515 (CWATT total active power an C)
   data_out[1] = 0x15;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   if( uc_gemessen) cwatt=(ergebnis*POWER_CORRECTION_FACTOR_C);
   else cwatt=ic*uc;

   //10 cosphi phase a
   data_out[0] = 0xE6;//0xE601 (ANGLE0 cosphi an A)
   data_out[1] = 0x01;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, 2) != 2) return -1;
   ergebnis=(FACTOR_1*data[0])+data[1];
   if( ua_gemessen) cosa=cos(ergebnis * FACTOR_CIRCLE * 50 / ADE7878_CLOCK * VAL);
   else cosa=1;

   //11 cosphi phase b
   data_out[0] = 0xE6;//0xE601 (ANGLE1 cosphi an B)
   data_out[1] = 0x02;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, 2) != 2) return -1;
   ergebnis=(FACTOR_1*data[0])+data[1];
   if( ub_gemessen) cosb=cos(ergebnis * FACTOR_CIRCLE * 50 / ADE7878_CLOCK * VAL);
   else cosb=1;

   //12 cosphi phase c
   data_out[0] = 0xE6;//0xE601 (ANGLE2 cosphi an C)
   data_out[1] = 0x03;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, 2) != 2) return -1;
   ergebnis=(FACTOR_1*data[0])+data[1];
   if( uc_gemessen) cosc=cos(ergebnis * FACTOR_CIRCLE * 50 / ADE7878_CLOCK * VAL);
   else cosc=1;

   //13 frequency phase a
   data_out[0] = 0xE7;//MMODE-Register measure frequency at VA
   data_out[1] = 0x00;
   data_out[2] = 0x1C;
   if(write_i2c(data_out, 3) != 3) return -1;
   delay(50);
   data_out[0] = 0xE6;//0xE607 (PERIOD)
   data_out[1] = 0x07;
   if(write_i2c(data_out, 2) != 2) return -1;
   if (read_i2c(data, 2) != 2) return -1;
   ergebnis=(FACTOR_1*data[0])+data[1];
   hza=(double) ADE7878_CLOCK / (ergebnis +1 );
   
   //14 frequency phase b
   data_out[0] = 0xE7;//MMODE-Register measure frequency at VB
   data_out[1] = 0x00;
   data_out[2] = 0x1D;
   if(write_i2c(data_out, 3) != 3) return -1;
   delay(50);
   data_out[0] = 0xE6;//0xE607 (PERIOD)
   data_out[1] = 0x07;
   if(write_i2c(data_out, 2) != 2) return -1;
   if (read_i2c(data, 2) != 2) return -1;
   ergebnis=(FACTOR_1*data[0])+data[1];
   hzb=(double) ADE7878_CLOCK / (ergebnis +1 );
   
   //15 frequency phase c
   data_out[0] = 0xE7;//MMODE-Register measure frequency at VC
   data_out[1] = 0x00;
   data_out[2] = 0x1E;
   if(write_i2c(data_out, 3) != 3) return -1;
   delay(50);
   data_out[0] = 0xE6;//0xE607 (PERIOD)
   data_out[1] = 0x07;
   if(write_i2c(data_out, 2) != 2) return -1;
   if (read_i2c(data, 2) != 2) return -1;
   ergebnis=(FACTOR_1*data[0])+data[1];
   hzc=(double) ADE7878_CLOCK / (ergebnis +1 );
   
   //16 Phase A total apparent power.
   data_out[0] = 0xE5;//0xE519 (AVA total apparent power an A)
   data_out[1] = 0x19;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   ava=ergebnis;
   
   //17 Phase B total apparent power.
   data_out[0] = 0xE5;//0xE519 (BVA total apparent power an B)
   data_out[1] = 0x1A;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   bva=ergebnis;
   
   //18 Phase C total apparent power.
   data_out[0] = 0xE5;//0xE519 (CVA total apparent power an C)
   data_out[1] = 0x1B;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   cva=ergebnis;
   
   //19 Phase A total reactive power.
   data_out[0] = 0xE5;//0xE516 (AVAR total reactive power an A)
   data_out[1] = 0x16;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   avar=ergebnis;
   
   //20 Phase A total reactive power.
   data_out[0] = 0xE5;//0xE516 (AVAR total reactive power an B)
   data_out[1] = 0x17;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   bvar=ergebnis;
   
   //21 Phase A total reactive power.
   data_out[0] = 0xE5;//0xE516 (AVAR total reactive power an C)
   data_out[1] = 0x18;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   cvar=ergebnis;

   pa=awatt*(-1.0);
   pb=bwatt*(-1.0);
   pc=cwatt*(-1.0);

   if( ua_gemessen)
   {
     if(avar<0)
       pfa=awatt/POWER_CORRECTION_FACTOR_A/ava;
     else
       pfa=awatt/POWER_CORRECTION_FACTOR_A/ava*(-1.0);
     ia=ia*fabs(pfa);
   }

   if( ub_gemessen)
   {
     if(bvar<0)
       pfb=bwatt/POWER_CORRECTION_FACTOR_B/bva;
     else
       pfb=bwatt/POWER_CORRECTION_FACTOR_B/bva*(-1.0);
     ib=ib*fabs(pfb);
   }

   if( uc_gemessen)
   {
     if(cvar<0)
       pfc=cwatt/POWER_CORRECTION_FACTOR_C/cva;
     else
       pfc=cwatt/POWER_CORRECTION_FACTOR_C/cva*(-1.0);
     ic=ic*fabs(pfc);
   }

   pac=pa+pb+pc;
   
   if(pac>=0)
   {
     sprintf(string,"BEZUG: %f",pac);
     Serial.println(string);
   }
   else
   {
     sprintf(string,"EINSPEISUNG: %f",pac);
     Serial.println(string);
   }

   mqtt_publish("P0",pac);
   mqtt_publish("P1",pa);
   mqtt_publish("P2",pb);
   mqtt_publish("P3",pc);
   
   mqtt_publish("COS1",cosa);
   mqtt_publish("COS2",cosb);
   mqtt_publish("COS3",cosc);
   
   mqtt_publish("I1",ia);
   mqtt_publish("I2",ib);
   mqtt_publish("I3",ic);

   mqtt_publish("U1",ua);
   mqtt_publish("U2",ub);
   mqtt_publish("U3",uc);

   mqtt_publish("HZ1",hza);
   mqtt_publish("HZ2",hzb);
   mqtt_publish("HZ3",hzc);

   mqtt_publish("PF1",pfa);
   mqtt_publish("PF2",pfb);
   mqtt_publish("PF3",pfc);

   mqtt_publish("VAR1",avar);
   mqtt_publish("VAR2",bvar);
   mqtt_publish("VAR3",cvar);

   mqtt_publish("VA1",ava);
   mqtt_publish("VA2",bva);
   mqtt_publish("VA3",cva);
   
   sprintf(string,"Leistung : %.4f %.4f %.4f = %.4f W",pa,pb,pc,pac);
   Serial.println(string);
   sprintf(string,"Cos Phi  : %.4f %.4f %.4f",cosa,cosb,cosc);
   Serial.println(string);
   sprintf(string,"PF     : %.4f %.4f %.4f",pfa,pfb,pfc);
   Serial.println(string);
   sprintf(string,"VAR    : %.4f %.4f %.4f",avar,bvar,cvar);
   Serial.println(string);
   sprintf(string,"VA     : %.4f %.4f %.4f",ava,bva,cva);
   Serial.println(string);
   sprintf(string,"Strom    : %.4f %.4f %.4f A",ia,ib,ic);
   Serial.println(string);
   sprintf(string,"Spannung : %.4f %.4f %.4f V",ua,ub,uc);
   Serial.println(string);
   sprintf(string,"Frequenz : %.4f %.4f %.4f Hz",hza,hzb,hzc);
   Serial.println(string);
   delay(DELAY);
}


void setup() {
 iot.begin();
 init_ade7878();
 Serial.println(WiFi.localIP());
}

void loop() {
  read_ade7878();
}

MQTT

Gesamtleistung [W]: P0
Leistung L1 [W]: P1
Leistung L2 [W]: P2
Leistung L3 [W]: P3

Cos L1 []: COS1
Cos L2 []: COS2
Cos L3 []: COS3

Strom L1 [A]: I1
Strom L2 [A]: I2
Strom L3 [A]: I3

Spannung L1 [V]: U1
Spannung L2 [V]: U2
Spannung L3 [V]: U3
   
Frequenz L1 [Hz]: HZ1
Frequenz L2 [Hz]: HZ2
Frequenz L3 [Hz]: HZ3

Power Faktor L1 [Hz]: PF1
Power Faktor L2 [Hz]: PF2
Power Faktor L3 [Hz]: PF3

Blindleistung L1 [Hz]: VAR1
Blindleistung L2 [Hz]: VAR2
Blindleistung L3 [Hz]: VAR3

Scheinleistung L1 [Hz]: VA1
Scheinleistung L2 [Hz]: VA2
Scheinleistung L3 [Hz]: VA3

Stromversorgung

Variante 1: Stromversorgung über den ESP32
Wenn man nur die Stromklemmen anschließen möchte, ohne die Spannung anschließen zu wollen, kann man das ganze über ein 5V Netzteil versorgen

Variante 2: Stromversorgung über den SmartPi
Man kann den ESP32 auch über den SmartPi mit 230V versorgen. Dazu müssen 230V an L und N angeschlossen werden. Siehe Handbuch: https://shop.enerserve.eu/media/pdf/8b/8...Pi-2-0.pdf

Inbetriebnahme

Nachdem der SmartPi und der ESP32 mit Strom versorgt sind, baut der ESP32 ein W-LAN Access Point auf.
Verbinden Sie sich z.B. mit Handy mit dem WLAN Netzwerk "ESP32".
Rufen Sie die Webseite "192.168.4.1" auf.
Hier können Sie die SSID und Passwort Ihres W-LAN Netzwerkes einstellen, sowie den MQTT Broker.
Nach dem Speichern wird der ESP32 neu gestartet und das System ist fertig eingerichtet.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)