1+ /* 1.0.0 VERSION */
2+
3+ #include < Arduino.h>
4+ #include < ArduinoJson.h>
5+
6+ #include " config.h"
7+
8+ #include < ddcommon.h>
9+ #include < ddwifi.h>
10+ #include < ddmqtt.h>
11+ #include < ddpzem004t.h>
12+
13+ // Wifi
14+ DDWifi wifi (ssid, password, wifihostname, LEDSTATUSPIN);
15+
16+ // MQTT
17+ DDMqtt clientMqtt (DEVICE, MQTT_HOST, MQTT_PORT, MQTT_USER, MQTT_PWD, TOPIC_S, MQTT_QOS, LEDSTATUSPIN);
18+
19+ // PZEM
20+ DDPzem004t pzemWrapper (LEDSTATUSPIN);
21+
22+ PZEM004T pzemPower = PZEM004T(PZEMPIN1, PZEMPIN2);
23+ IPAddress ipPower = IPAddress(192 , 168 , 1 , 1 );
24+ float lastPowerTriggerValue;
25+
26+ // JSON
27+ DynamicJsonBuffer jsonBuffer;
28+ JsonObject& configRoot = jsonBuffer.createObject();
29+ JsonObject& root = jsonBuffer.createObject();
30+
31+ unsigned long startMillis;
32+
33+ void createJsonConfig (){
34+ configRoot[" readInterval" ] = READ_INTERVAL;
35+ configRoot[" maxSamples" ] = MAX_SAMPLES;
36+ }
37+
38+ void printDebugPowerData (DDPZEM004TVal values){
39+ writeToSerial (" POWER READ Success = " , false );
40+ writeToSerial (values.success ? " True" : " False" , true );
41+ if (values.success ){
42+ writeToSerial (" Voltage: " , false );
43+ writeToSerial (values.voltage , false );
44+ writeToSerial (" V " , true );
45+ writeToSerial (" Current: " , false );
46+ writeToSerial (values.current , false );
47+ writeToSerial (" A " , true );
48+ writeToSerial (" Power: " , false );
49+ writeToSerial (values.power , false );
50+ writeToSerial (" W " , true );
51+ writeToSerial (" Energy: " , false );
52+ writeToSerial (values.energy , false );
53+ writeToSerial (" Wh " , true );
54+ }
55+ }
56+
57+ String generateJsonMessage (DDPZEM004TVal values){
58+ root[" voltage" ] = values.voltage ;
59+ root[" current" ] = values.current ;
60+ root[" power" ] = values.power ;
61+ root[" energy" ] = values.energy ;
62+ String json;
63+ root.printTo (json);
64+ return json;
65+ }
66+
67+ void setup () {
68+ createJsonConfig ();
69+ pinMode (LEDSTATUSPIN, OUTPUT);
70+ digitalWrite (LEDSTATUSPIN, LOW);
71+ if (SERIAL_ENABLED)
72+ Serial.begin (SERIAL_BAUDRATE);
73+ writeToSerial (" ESP8266MCU12 Booting..." , true );
74+
75+ // WIFI
76+ wifi.connect ();
77+
78+ // MQTT
79+ clientMqtt.reconnectMQTT (&startMillis);
80+
81+ // PZEM
82+ pzemWrapper.init (&pzemPower, ipPower);
83+
84+ lastPowerTriggerValue = -999.0 ;
85+ startMillis = millis ();
86+ }
87+
88+ void loop () {
89+
90+ // Wait a few seconds between measurements.
91+ if (myDelay (configRoot[" readInterval" ], &startMillis)){
92+ clientMqtt.loop ();
93+ DDPZEM004TVal values = pzemWrapper.getValues (&pzemPower, ipPower);
94+ printDebugPowerData (values);
95+ writeToSerial (" lastPowerTriggerValue " , false );
96+ writeToSerial (lastPowerTriggerValue, true );
97+ if (abs (lastPowerTriggerValue - values.power ) >= DIFF_POWER_TRIGGER || (lastPowerTriggerValue != values.power && values.power == 0 )){
98+ clientMqtt.sendMessage (TOPIC_P, generateJsonMessage (values), &startMillis);
99+ lastPowerTriggerValue = values.power ;
100+ }
101+ }
102+ }
0 commit comments