Voor dit project heb je volgend nodig om je digitale meter uit te lezen https://sites.google.com/view/spikeautomation/esp-projects/slimme-meter-uitlezen
Daarnaast ook Raspberry Pi 3+ of hoger
DOMOTICZ https://www.domoticz.com/wiki/Raspberry_Pi
NODE RED https://nodered.org/docs/getting-started/
Mosquitto MQTT Broker https://randomnerdtutorials.com/how-to-install-mosquitto-broker-on-raspberry-pi/
Controleer ook nog even eerst dit https://sites.google.com/view/spikeautomation/domoticz/json-not-working-domoticz
Als je bovenstaande hebt gecontroleerd dan kunnen we van start !!
Real time Energie Display
Groen = Geïnjecteerd vermogen
Rood = Actueel import van egergie
Wat we nodig hebben, een groene en rode Max7219 Display, een voeding van 5V 1A, Wemos D1 en een behuizing om alles in te bouwen, alle hardware vind je op Ali-Express. En op Thingiverse vind je mijn STL files om je behuizing uit te printen !
Link naar de 3D Behuizing https://www.thingiverse.com/thing:5234956/files
Het Schema (Let op de aansluitingen van D5 D6 en D7, deze kan je altijd aanpassen in de software !
#include <ESP8266WiFi.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include "EspMQTTClient.h"
#include <MD_Parola.h>
#define MAX_DEVICES 8
/*
#define CLK_PIN D5 // or SCK
#define DATA_PIN D7 // or MOSI
#define CS_PIN D4 // or SS
*/
#define CLK_PIN D5
#define CS_PIN D6
#define DATA_PIN D7
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#include "Font_Data.h"
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
const uint8_t MESG_SIZE = 255;
char curMessage[MESG_SIZE];
char newMessage[MESG_SIZE];
char curMessage1[MESG_SIZE];
char newMessage1[MESG_SIZE];
bool newMessageAvailable = false;
#define SPEED_TIME 0
#define PAUSE_TIME 0
EspMQTTClient client(
"Tenda_Spike",
"johanveerle22",
"192.168.1.19", // MQTT Broker server ip
"spike", // Can be omitted if not needed
"1234", // Can be omitted if not needed
"MAX7219_DISPLAY4 verbruik", // Client name that uniquely identify your device
1883 // The MQTT port, default to 1883. this line can be omitted
);
void setup()
{
Serial.begin(115200);
curMessage[0] = newMessage[0] = '\0';
sprintf(curMessage, "Spike");
sprintf(curMessage1, "Tech");
// Initialising the UI will init the display too.
P.begin(2);//2 zones
P.setZone(0, 0, 3); // zone 0 eerste 4 modules van rechts
P.setZone(1, 4, 7); //zone 1 module 5tem8 (linkerkant
P.displayAnimate();
P.setIntensity (0,1);
P.setIntensity (1,15); // Rode display is veel intenser dan de groene vandaar dit verschil in intensiteit
P.displayZoneText(0, curMessage, PA_CENTER, SPEED_TIME, PAUSE_TIME, PA_PRINT, PA_NO_EFFECT);
P.displayZoneText(1, curMessage1, PA_CENTER, SPEED_TIME, PAUSE_TIME, PA_PRINT, PA_NO_EFFECT);
delay(1000);
}
void onConnectionEstablished()
{
client.subscribe("leddisplay1/text", [](const String & payload) { // data van NODE RED
sprintf(curMessage1, payload.c_str());
});
client.subscribe("leddisplay7/text", [](const String & payload) {
sprintf(curMessage, payload.c_str());
});
}
void loop()
{
P.displayAnimate();
client.loop();
P.displayZoneText(0, curMessage, PA_RIGHT, SPEED_TIME, PAUSE_TIME, PA_PRINT, PA_NO_EFFECT);
P.displayZoneText(1, curMessage1, PA_RIGHT, SPEED_TIME, PAUSE_TIME, PA_PRINT, PA_NO_EFFECT);
delay(500);
Serial.println(curMessage);
Serial.println(curMessage1);
P.displayReset();
}