Witam wszystkich
Zwracam sie z pytaniem i prośbą do
@krycha88 czy była by szansa do GG wrzucić wsparcie dla PZEM dla 3 faz, ale z obsługą adresowanych PZEM-ów.
Poczyniłem dla siebie i paru znajomych kiedyś kod w Arduino do obsługi takich urządzeń (oczywiście po wcześniejszym adresowaniu które nie jest wcale zbyt skomplikowane)
Może sie komuś przyda (adresowanie PZEM):
Code: Select all
#include <PZEM004Tv30.h>
#include <SoftwareSerial.h>
#define PZEM_RX_PIN D5
#define PZEM_TX_PIN D6
SoftwareSerial pzemSWSerial(PZEM_RX_PIN, PZEM_TX_PIN);
PZEM004Tv30 pzem(pzemSWSerial);
void setup() {
Serial.begin(9600);
}
uint8_t ustaw_adres = 0x02; // tutaj wpisz adres
void loop() {
pzem.setAddress(ustaw_adres);
Serial.print("Ustawiony adres:");
Serial.println(pzem.getAddress());
Serial.println();
delay(1000);
}
Jednak chciałbym bardzo to "urządzenie" zintegrować z SUPLA.
Ze względu na to, że do ESP8266 prócz 3szt PZEM są jeszcze podpięte 3szt przekaźnika SSR, wyświetlacz OLED i czujnik temp, to GPIO są na wyczerpaniu.
Może wyjaśnię choć nie wiem czy to ważne, urządzenie ma na celu pomiar napięcia na każdej z FAZ (L1,L2,L3) i jeżeli napięcie przekracza 248V załącza jeden z przekaźników SSR w który jest wpięta jedna z grzałek 2kW.
Cel: obniżenie napięcia na poszczególnych fazach aby uniknąć wyłączania sie instalacji PV która domyślnie przy 250V (na której z kolwiek faz)
przechodzi w tryb OFF (co jest efektem nie działania PV czyli zero produkcji)
NIe chce udostępniać publicznie całego kodu aby uniknąć zbędnej dla mnie krytyki, jestem amatorem sam sklepałem ten kod i wiem że pewno jest tam masa błędów.
Poniżej fragment kodu który chyba jest najistotniejszy jeśli chodzi o adresowanie:
Code: Select all
// inny OLED 1,3" + WWW
#include <ESP8266WiFi.h>
#include <SPI.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <PZEM004Tv30.h>
#include <SoftwareSerial.h>
//#include <LiquidCrystal_I2C.h>
//#include <Adafruit_GFX.h>
//#include "SSD1306Wire.h"
#include "SH1106Wire.h"
//Encoder myEnc(D6, D7);
const char* ssid = ".........";
const char* password = "...........";
WiFiServer server(80);// Set port to 80
String header; // This storees the HTTP request
#define RX D5
#define TX D6
SoftwareSerial pzemSWSerial(RX, TX);
PZEM004Tv30 pzemL1(pzemSWSerial, 0x01);
PZEM004Tv30 pzemL2(pzemSWSerial, 0x02);
PZEM004Tv30 pzemL3(pzemSWSerial, 0x03);
//LiquidCrystal_I2C lcd(0x27,20,4);
//SSD1306Wire display(0x3c, D2, D1);
SH1106Wire display(0x3c, D2, D1);
OneWire oneWire(D4); //Podłączenie do A5
DallasTemperature sensors(&oneWire); //Przekazania informacji do biblioteki
int maxNapiecie = 244.00;
int temp = 0;
int tempMAX = 80;
int SSR_L1 = D7;
int SSR_L2 = D8;
int SSR_L3 = D0;
int wartosc1 = 0;
float napiecieL1 = 0;
int wartosc2 = 0;
float napiecieL2 = 0;
int wartosc3 = 0;
float napiecieL3 = 0;
Ewentualnie może kolega
@klew zaproponował by coś gotowego do wgrania
Pozdrawiam wszystkich