@dieter_p
@andy123andy1 said in S0 - Signal mit Wemos D1 Mini erzeugen?:
@mistral Guten Morgen, ich suche gerade auch nach einer Lösung ein S0 Signal zu erzeugen. Kannst du die verwendetet Hardware und evtl. den Code der Öffentlichkeit zur Verfügung stellen? Dann brauche ich nicht alles neu Recherchieren und Testen 
Das ist die benötigte Hardware wenn ich es richtig aus den vorherigen Post lese:

Wenn jetzt noch jemand einen Code Schnipsel hätte wäre ich glücklich 
Hab mal rumprobiert hier mein Ergebnis:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// WiFi configuration
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
// MQTT configuration
const char* mqtt_server = "broker_address";
const char* mqtt_topic = "energy/consumption";
const int mqtt_port = 1883;
// S0 Pin configuration
const int s0Pin = 7; // Pin connected to the S0 output signal
// Timing variables
unsigned long pulseDuration = 100; // Duration of each pulse in milliseconds
unsigned long pulseInterval = 720; // Interval between pulses in milliseconds (initial value)
// WiFi and MQTT clients
WiFiClient espClient;
PubSubClient client(espClient);
// Function to handle received MQTT messages
void callback(char* topic, byte* payload, unsigned int length) {
char message[length + 1];
strncpy(message, (char*)payload, length);
message[length] = '\0';
float kWh = atof(message); // Convert received message to float
// Assuming 1000 pulses per kWh and 3600 seconds in an hour
pulseInterval = (3600 * 1000) / (kWh * 1000) - pulseDuration;
}
void setup() {
// Set the S0 pin as an output
pinMode(s0Pin, OUTPUT);
// Initialize Serial for debugging
Serial.begin(115200);
// Connect to WiFi
setup_wifi();
// Set up MQTT client
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
// Connect to MQTT broker
reconnect();
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// Generate a pulse
digitalWrite(s0Pin, HIGH); // Set the S0 pin HIGH
delay(pulseDuration); // Wait for the pulse duration
digitalWrite(s0Pin, LOW); // Set the S0 pin LOW
delay(pulseInterval); // Wait for the interval before the next pulse
}
void setup_wifi() {
delay(10);
// Connect to WiFi
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("ESP8266Client")) {
Serial.println("connected");
// Subscribe to topic
client.subscribe(mqtt_topic);
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
Hab leider kein Oszilloskop um das mal zu prüfen.
@Andy123Andy1 :
Ich habe noch einige Wochen nach meinem letzten post hier geschaut, ob es einen reply gibt, jetzt aber leider bereits etwas länger nicht mehr.
Ist Deine Frage an mich noch aktuell?
Falls ja, gleich anschliessend ein paar Infos:
- HW: Habe ich nur die S0 Schnittstelle hier besprochen. Ich habe sonst andere HW mit ESP32 verwendet. 1x ein Olimex Board mit LAN Anschluss (ist jetzt auch bei mir in Gebrauch), 1x ein ESP32 WIFI Modul (hatte auch funktioniert und war temporär in Verwendung, ich wollte dann aber noch auf einen LAN Anschluss wechseln). Welche Beschreibung benötigst Du? Die LAN Variante sieht bei mir so aus (die S0 Leitung ist bei den blauen Klemmen, bei diesem Foto nicht angeschlossen):

- Ich habe für beide Varianten ein eigenes PCB Design erstellt (die "grüne" Platine im oberen Foto; und die Komponenten entweder direkt darauf gelötet bzw. für das ESP board Buchsenleisten auf das PCB board gelötet).
- Software: Die Werte (kW Einspeiseleistung) müssen in meiner Software separat noch von der PV Anlage bezogen und über einen MQTT Broker an das board weitergeleitet werden. Zusätzlich ist meine source code etwas länger, da ich auch exception handlings eingebaut habe, z.B., falls die kW Leistungsinfo aus irgendeinem Grund nicht mehr aktualisiert werden würde oder dass zu tiefe W Leistungsinfos die Übermittlung von eventuell anschliessend höheren kW Werten nicht zu sehr verzögert. Hier habe ich ebenfalls separaten source code für das WIFI ESP32 board und das Olimex ESP32 LAN boad (der USB Anschluss für die Programmierung und wird bei POE bei diesem board im Betrieb nicht benötigt. Da ich jedoch einen Switch ohne POE verwende, habe ich hier den USB Anschluss auch für die Stromversorgung ebenfalls angeschlossen).