Relais Platine reagiert nicht

Hallo erst mahl.
bin neu hier und wollte mich erst mahl vorstellen
mein Name ist Peter bin jetzt 52 Jahre und mein erster Computer habe ich mich ca. 16 Jahren gekauft (einen Schneider CPC 6128)
auf dem ich meine ersten Programme in Basic geschrieben habe.

mein aktuelles Projekt soll auf einem ESP8266 (nodemcu mini) laufen, und soll meine Heizung zuhause steuern.
ich bin jetzt so weit das ich 6 DS18B20 Temperatur Sensoren angeschlossen habe die regelmässig eingelesen werden und per MQTT gesendet werden, funktionier super.

jetzt möchte ich eine 8fach Relais Platine von Conrad anschließen über die ich die Pumpen und Brenner schalte.
EAN:4016138544145

in der Beschreibung steht folgendes:
Jedes Kommando und jede Antwort besteht jeweils aus einer Folge von 4 Bytes. Diese nennen
wir nachfolgend Rahmen.
 Rahmenaufbau
Byte 0 Kommando
Byte 1 Kartenadresse
Byte 2 Daten
Byte 3 Prüfsumme (XOR aus Byte0, Byte1 und Byte2 )

SET SINGLE 6 - Adr. - Daten - XOR

ich sende von meinem ESP also 4 Byte
Byte0 = 6
Byte1 = 1
Byte2 = 1 für das erste Relais
Byte3 = 6

irSerial.write(Byte0);
delay(50);
irSerial.write(Byte1);
delay(50);
irSerial.write(Byte2);
delay(50);
irSerial.write(Byte3);

die Ausgabe erfolgt über den softwahre Serial TXD
die Pegel werden dann von einem RS232/TTL Wandler mit MAX3232 angepasst.

den Wandler habe ich mit einem 0Modem Kabel mit der Relais Platine verbunden.

doch leider reagiert die Platine nicht auf meine befehle.
hoffe mir kann jemand weiter helfen.
bei fragen meldet euch
fielen Dank.

Grüße PeterWird verarbeitet: bedienungsanleitung-197720-conrad-components-197720-relaiskarte-baustein-12-vdc-24-vdc (1).pdf …

Dein Link ist defekt. Sollte der zur Relaiskarte gehen?

Gruß Tommy

Der Link ist schon ok - da streikt die ForenSoftware.

Mach mal:

Der ist so geil...

Also ich bekomme da nur eine (eher schlechte) Maßskizze.

Gruß Tommy

Ja. Datenblatt :slight_smile: :slight_smile: :smiley:

Nein nur eine Skizze, kein Datenblatt.

Ein Datenblatt. Schreibt der Verkäufer.
Dafür muss man sich nicht mit einem neuen Account anmelden.

Ohne Infos wird es wohl wenig Hilfe geben.

@TO: Merke: Die Hilfe ist maximal so gut, wie Deine Informationen.

Gruß Tommy

Bei conrad Modulen/Bausätzen findet man die relevanten Technischen Daten oft in der Bedienungsanleitung.
Hier der Link: Relaiskarte

2 Likes

Hallo,
Was hälst du von der Lösung
I2c Porterweiterung auf 8 Output und mehrfach Relaismodul Ist sicher einfacher.
Heinz

a)zeige einen Schaltplan
b)zeige echtbilder von deinem Aufbau - jedes Kabel - jede Verbindung muss eindeutig erkennbar sein
c)zeige deinen Sketch (nur eine einfache Relaisansteuerung, nichts anderes, aber es muss für uns kompilierbar sein).
d) lass mal das Nullmodemkabel weg und probiere eine RX-TX Verbindung
e) mach mal einen Test direkt vom PC zur Relaiskarte -> funktioniert das?

1 Like

Hallo zusammen und vielen dank für die schnellen Antworten.

Als ich die Datei senden wollte bekam ich eine Meldung, das ich noch keine Dateien senden darf da ich ein neues Mitglied bin. Wo die Zeichnung her kommt ist mir unklar.

Danke an Deltaflyer für den Link zu meiner Relaiskarte, diese PDF Datei wollte ich hoch laden.

Hallo Rentner danke für den Tipp.
meine Relaiskarte ist schon im Schaltschrank eingebaut und verkabelt (Foto) und wird von einem Atmege16 gesteuert (Foto) und das jetzt seit ca. 5 Jahren. Auf dem Atmel habe ich eine Software mit Baskom geschrieben. Möchte das ganze jetzt auf einen ESP8266 umstellen und sauber in ein Gehäuse einbauen.

Hallo Tommy56 auch dir Danke für deine Hilfe.
das ist mir schon klar das ihr mehr Infos braucht um mir zu helfen, aber wie ich ja schon oben geschrieben habe, konnte ich keine Dateien senden. Auch wurde mein Account gesperrt als ich meinen Text abgeschickt hatte.

Das ist mein Programm teil zum senden an die Relaiskarte und senden an meinen Seriellen Monitor

{
byte Byte3;
Byte3 = Byte0 ^ Byte1;
Byte3 = Byte3 ^ Byte2;
byte Byte[4];
Byte[0] = Byte0;
Byte[1] = Byte1;
Byte[2] = Byte2;
Byte[3] = Byte3;
Serial.write(Byte, sizeof(Byte));
irSerial.print("Byte0 = ");
irSerial.print(Byte0,BIN);
irSerial.print(" - ");
irSerial.print(Byte0,HEX);
irSerial.print(" = ");
irSerial.println(Byte0);
irSerial.print("Byte1 = ");
irSerial.print(Byte1,BIN);
irSerial.print(" - ");
irSerial.print(Byte1,HEX);
irSerial.print(" = ");
irSerial.println(Byte1);
irSerial.print("Byte2 = ");
irSerial.print(Byte2,BIN);
irSerial.print(" - ");
irSerial.print(Byte2,HEX);
irSerial.print(" = ");
irSerial.println(Byte2);
irSerial.print("Byte3 = ");
irSerial.print(Byte3,BIN);
irSerial.print(" - ");
irSerial.print(Byte3,HEX);
irSerial.print(" = ");
irSerial.println(Byte3);
}

am TXD Ausgang mit dem Oszi gemessen bekomme ich dieses Bild.

Kannst Du mal bitte das hochladen abwarten? Und den kannste komplett auch nehmen und in codetags reinsetzen.

Alles gut.

In der Arduino-IDE einmal STRG-T drücken und dann Bearbeiten - für Forum kopieren ; oder STRG-Umschalt-C

Dann im Post nur noch STRG-V

Da ist was schief gegangen - lässt sich aber schnell ändern.
Post nochmal editiren - alles markieren und oben auf </> klicken.
Speichern.
Fertig.

#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <WiFiClient.h>
#include <EEPROM.h>
#include <SoftwareSerial.h>

char ssid[19];
char password[19];
char mqttServer[29];
const int mqttPort = 1883;
char ClientName[10];
char Eingabe = ' ';
// const char* mqttUser = "test";       // ### Zeile mus aktiviert werden wenn ein 
// const char* mqttPassword = "test";   // ### Benutzername und Password benötigt wird 

byte Bytex = 0;
int Differenz = 2;  // Differenz Daten senden
int WLanEA = 0;
int addr = 0;        // Startadresse EEPROM
int SensAnz = 0;     // Anzahl gespeicherter Sensoren
int SensAuw = 0;     // speicherplatz für sensor
bool SensEin1 = 0;
bool SensEin2 = 0;
bool SensEin3 = 0;
bool SensEin4 = 0;
bool SensEin5 = 0;
bool SensEin6 = 0;
bool Relais1 = 0;
bool Relais2 = 0;
bool Relais3 = 0;
bool Relais4 = 0;
bool Relais5 = 0;
bool Relais6 = 0;
bool Relais7 = 0;
bool Relais8 = 0;
uint8_t TempAddress[8];
uint8_t TempAddress1[8];
uint8_t TempAddress2[8];
uint8_t TempAddress3[8];
uint8_t TempAddress4[8];
uint8_t TempAddress5[8];
uint8_t TempAddress6[8];
float TempC1;
float TempC2;
float TempC3;
float TempC4;
float TempC5;
float TempC6;

// Data wire is plugged TO GPIO 4
#define ONE_WIRE_BUS 4

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

// Number of temperature devices found
int numberOfDevices;

// We'll use this variable to store a found device address
DeviceAddress tempDeviceAddress; 

WiFiClient espClient;
PubSubClient mqttclient(espClient);

 SoftwareSerial irSerial(14, 12);  // D5 = RXD Daten empfangen  D6 = TXD Daten übertragen ## hir geht es weiter

// ------------------------------------------------------------------------
void setup(){
  
  Serial.begin(19200);
  irSerial.begin(9600);
  irSerial.println(" ");
  irSerial.println("Programm Start");

  sensors.begin();
  WLanEA = 0;
  EEPROM.begin(512);
  EEPROM.get(500, SensAnz);
  EEPROM.get(505, WLanEA);
  EEPROM.get(510, Differenz);
  EEPROM.get(400, ssid);
  EEPROM.get(420, password);
  EEPROM.get(440, mqttServer);
  EEPROM.get(470, ClientName);
  EEPROM.commit();
  EEPROM.end();

  irSerial.print("ssid = ");
  irSerial.println(ssid);
  irSerial.print("password = ");
  irSerial.println(password);
  irSerial.print("mqttServer = ");
  irSerial.println(mqttServer);
  irSerial.print("Client = ");
  irSerial.println(ClientName);

if(WLanEA < 1)
  {
    irSerial.println("Netzwerk aus");
  }
  else
  {
    irSerial.println("Netzwerk ein");
  }
  
if(WLanEA == 1){
  WLanverbinden();
}
  numberOfDevices = sensors.getDeviceCount();
  
  irSerial.print("Gespeicherte Sensoren ");
  irSerial.print(SensAnz);
  irSerial.print("  angeschlossene Sensoren ");
  irSerial.println(numberOfDevices);

  if (numberOfDevices < 1 or numberOfDevices > 6)
  {
    irSerial.println("Es ist kein DS18B20 angeschlossen");
    irSerial.println("oder es sind mehr als 6 Sensoren angeschlossen");
    irSerial.println("Schliesen sie einen aber nicht mehr als 6 Sensor an");
    irSerial.println("Programm wird neu gestartet");
    for (int i=10;i>0;i--)
    {
      irSerial.println(i);
      delay(1000);
    }
    ESP.restart();
  }
  else
  {
    if (SensAnz < 1)
    {
      SensAnz = 0;
      irSerial.println("keine Sensoren gespeichert");
        SensSuchen();
    }
    else
    {
      SensNrEinl();   // Seriennummern aus EEPROM einlesen
    }
  }
}
//  --------------------------------------------------------------------
void reconnect()
{
  while (!mqttclient.connected()) {
    irSerial.println("Connecting to MQTT...");
    if (mqttclient.connect(ClientName)) {
      irSerial.println("connected");
      mqttclient.publish("outTopic", "hello world");
      mqttclient.subscribe(ClientName);
    } else {
      irSerial.print("failed, rc=");
      irSerial.print(mqttclient.state());
      irSerial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
      int Eingabe = Serial.read();
      Eingabe = Eingabe - 48;
      if(Eingabe > 0)
      {
         Menue();
      }

    }
  }
}

//------------------------------------------------------------------------ LOOP
void loop()  // Haupt Teil #####
{
  Datenvonoben();
  Tempeinlesen();
  Tempauswaerten();
    for(int i=0;i < 10; i++)
  {
    delay(50);
    if (irSerial.available())
    {
      Eingabe = irSerial.read();
      if(Eingabe == 'm' or Eingabe == 'M')
      {
        irSerial.print("Eingabe : ");
        irSerial.println(Eingabe);
        Eingabe = ' ';
        Menue();
        seriloe();
      }
    }
  }
}
// ----------------------------------------------------------------------- Temperaturen auswäretn
void Tempauswaerten()
{
  irSerial.println(" Auswärten");
  irSerial.println(Bytex);

  if (Bytex == 1)
  {
    irSerial.println("Warmluft heizung an");
  }
  else if (Bytex == 2)
  {
    irSerial.println("Fusboden heizung an");
  }
  else if (Bytex == 0)
  {
    irSerial.println("heizung aus");
    if (TempC4 > TempC3)
    {
      if (Relais1 = 1)
      {
        Relais1 = 1;   // Pumpe Brenner ein
        irSerial.println ("Pumpe Brenner ein");
      }
    }
    else
    {
      if (Relais1 = 0)
      {
        Relais1 = 0;   // Pumpe Brenner aus
        irSerial.println ("Pumpe Brenner aus");
      }
    }
    if (TempC3 > TempC2)
    {
      Relais2 = 1;   // Pumpe Speicherladung ein
      irSerial.println ("Pumpe Speicherladung ein");
    }
    else
    {
      Relais2 = 0;   // Pumpe Speicherladung aus
      irSerial.println ("Pumpe Speicherladung aus");
    }
    if (TempC2 < 60)
    {
      Relais3 = 1;   // Brenner ein
      irSerial.println ("Brenner ein");
    }
    else
    {
      Relais3 = 0;   // Brenner aus
      irSerial.println ("Brenner aus");
    }
  }
}
// ----------------------------------------------------------------------- Daten von oben einlese
void Datenvonoben()
{
  byte Byte0 = 0;
  byte Byte1 = 0;
  byte Byte2 = 0;
  byte Byte3 = 0;

  if (Serial.available())
  {
      Byte0 = Serial.read();
      Byte1 = Serial.read();
      Byte2 = Serial.read();
      Byte3 = Serial.read();

      Bytex = Byte0 ^ Byte1;
      Bytex = Bytex ^ Byte2;
      if (Bytex == Byte3)
      {
        Bytex = Byte2;
        HEXausgabe(Byte0,Byte1,Byte2); //,Byte3);
      }
      else
      {
        irSerial.println("Übertragungsfehler");
      }
  }
}
// -------------------------------------------------------------- Byte ausgabe
void HEXausgabe(byte Byte0,byte Byte1,byte Byte2) //,byte Byte3)
{
  byte Byte3;
    Byte3 = Byte0 ^ Byte1;
    Byte3 = Byte3 ^ Byte2;

  byte Byte[4];  
    Byte[0] = Byte0;
    Byte[1] = Byte1;
    Byte[2] = Byte2;
    Byte[3] = Byte3;
  Serial.write(Byte, sizeof(Byte));

        irSerial.print("Byte0 = ");
        irSerial.print(Byte0,BIN);
        irSerial.print(" - ");
        irSerial.print(Byte0,HEX);
        irSerial.print(" = ");
        irSerial.println(Byte0);
  
        irSerial.print("Byte1 = ");
        irSerial.print(Byte1,BIN);
        irSerial.print(" - ");
        irSerial.print(Byte1,HEX);
        irSerial.print(" = ");
        irSerial.println(Byte1);
  
        irSerial.print("Byte2 = ");
        irSerial.print(Byte2,BIN);
        irSerial.print(" - ");
        irSerial.print(Byte2,HEX);
        irSerial.print(" = ");
        irSerial.println(Byte2);

        irSerial.print("Byte3 = ");
        irSerial.print(Byte3,BIN);
        irSerial.print(" - ");
        irSerial.print(Byte3,HEX);
        irSerial.print(" = ");
        irSerial.println(Byte3);  
} 
//------------------------------------------------------------------------ Temp Einlesen
void Tempeinlesen()
{
  float Differenz2 = Differenz;
  if(WLanEA == 1)
  {
    if (!mqttclient.connected())
    {
      reconnect();
    }
    mqttclient.loop();
  }
    char TempCS[7];
    char text[20] = "/";
    float TempCA;
    sensors.requestTemperatures();
    if(SensEin1 == 1)
    {
      TempCA = TempC1;
      TempC1 = sensors.getTempC(TempAddress1);
      if(TempCA + (Differenz2/10) < TempC1 or TempCA - (Differenz2/10) > TempC1)
      {
        irSerial.print("Sensor 1 : ");
        irSerial.println(TempC1);
        dtostrf(TempC1, 2, 2, TempCS);
        if(WLanEA == 1){
          if (!mqttclient.connected())
          {
            reconnect();
          }
          mqttclient.loop();
          strcat(text, ClientName);
          strcat(text, "/Sensor1");
          mqttclient.publish(text, TempCS);
          sprintf (text, "/");
          mqttclient.loop();
        }
      delay(100);
      }
      else
      {
        TempC1 = TempCA;
      }
    }
    if(SensEin2 == 1)
    {
      TempCA = TempC2;
      TempC2 = sensors.getTempC(TempAddress2);
      //  if(TempCA != TempC2)
      if(TempCA + (Differenz2/10) < TempC2 or TempCA - (Differenz2/10) > TempC2)
      {
        irSerial.print("Sensor 2 : ");
        irSerial.println(TempC2);
        dtostrf(TempC2, 2, 2, TempCS);
        if(WLanEA == 1){
          if (!mqttclient.connected())
          {
            reconnect();
          }
          mqttclient.loop();
          strcat(text, ClientName);
          strcat(text, "/Sensor2");
          mqttclient.publish(text, TempCS);
          sprintf (text, "/");
        }
      delay(100);  
      }
      else
      {
        TempC2 = TempCA;
      }
    }
    if(SensEin3 == 1)
    {
      TempCA = TempC3;
      TempC3 = sensors.getTempC(TempAddress3);
      //  if(TempCA != TempC3)
      if(TempCA + (Differenz2/10) < TempC3 or TempCA - (Differenz2/10) > TempC3)
      {
        irSerial.print("Sensor 3 : ");
        irSerial.println(TempC3);
        dtostrf(TempC3, 2, 2, TempCS);
        if(WLanEA == 1){
          if (!mqttclient.connected())
          {
            reconnect();
          }
          mqttclient.loop();
          strcat(text, ClientName);
          strcat(text, "/Sensor3");
          mqttclient.publish(text, TempCS);
          sprintf (text, "/");
        }
      delay(100);
      }
      else
      {
        TempC3 = TempCA;
      }
    }
    if(SensEin4 == 1)
    {
      TempCA = TempC4;
      TempC4 = sensors.getTempC(TempAddress4);
      //  if(TempCA != TempC4)
      if(TempCA + (Differenz2/10) < TempC4 or TempCA - (Differenz2/10) > TempC4)
      {
        irSerial.print("Sensor 4 : ");
        irSerial.println(TempC4);
        dtostrf(TempC4, 2, 2, TempCS);
        if(WLanEA == 1){
          if (!mqttclient.connected())
          {
            reconnect();
          }
          mqttclient.loop();
          strcat(text, ClientName);
          strcat(text, "/Sensor4");
          mqttclient.publish(text, TempCS);
          sprintf (text, "/");
        }
      delay(100);
      }
      else
      {
        TempC4 = TempCA;
      }
    }
    
    if(SensEin5 == 1)
    {
      TempCA = TempC5;
      TempC5 = sensors.getTempC(TempAddress5);
      //  if(TempCA != TempC5)
      if(TempCA + (Differenz2/10) < TempC5 or TempCA - (Differenz2/10) > TempC5)
      {
        irSerial.print("Sensor 5 : ");
        irSerial.println(TempC5);
        dtostrf(TempC5, 2, 2, TempCS);
        if(WLanEA == 1){
          if (!mqttclient.connected())
          {
            reconnect();
          }
          mqttclient.loop();
          strcat(text, ClientName);
          strcat(text, "/Sensor5");
          mqttclient.publish(text, TempCS);
          sprintf (text, "/");
        }
      delay(100);
      }
      else
      {
        TempC5 = TempCA;
      }
    }
    if(SensEin6 == 1)
    {
      TempCA = TempC6;
      TempC6 = sensors.getTempC(TempAddress6);
      //  if(TempCA != TempC6)
      if(TempCA + (Differenz2/10) < TempC6 or TempCA - (Differenz2/10) > TempC6)
      {
        irSerial.print("Sensor 6 : ");
        irSerial.println(TempC6);
        dtostrf(TempC6, 2, 2, TempCS);
        if(WLanEA == 1){
          if (!mqttclient.connected())
          {
            reconnect();
          }
          mqttclient.loop();
          strcat(text, ClientName);
          strcat(text, "/Sensor6");
          mqttclient.publish(text, TempCS);
          sprintf (text, "/");
        }
      delay(100);
      }
      else
      {
        TempC6 = TempCA;
      }
    }
}

// ----------------------------------------------------------------------- Seriennummern einlesen
//  Seriennummern aus EEPROM einlesen
void SensNrEinl(){
  irSerial.println("gespeicherte Seriennummern einlesen");

  EEPROM.begin(512);
  EEPROM.get(10,TempAddress1);
  EEPROM.get(8,SensEin1);
  irSerial.print("Sensor 1 = ");
  irSerial.print(SensEin1);
    if(SensEin1 == 1){
    irSerial.print(" - ");
    irSerial.print("Seriennummer 1 : ");
    printAddress(TempAddress1);
    }

  EEPROM.get(20,TempAddress2);
  EEPROM.get(18,SensEin2);
  irSerial.print("Sensor 2 = ");
  irSerial.println(SensEin2);
    if(SensEin1 == 2){
    irSerial.print(" - ");
    irSerial.print("Seriennummer 2 : ");
    printAddress(TempAddress2);
    }
  
  EEPROM.get(30,TempAddress3);
  EEPROM.get(28,SensEin3);
  irSerial.print("Sensor 3 = ");
  irSerial.println(SensEin3);
    if(SensEin1 == 3){
    irSerial.print(" - ");
    irSerial.print("Seriennummer 3 : ");
    printAddress(TempAddress3);
    }

  EEPROM.get(40,TempAddress4);
  EEPROM.get(38,SensEin4);
  irSerial.print("Sensor 4 = ");
  irSerial.println(SensEin4);
    if(SensEin1 == 4){
    irSerial.print(" - ");
    irSerial.print("Seriennummer 4 : ");
    printAddress(TempAddress4);
    }

  EEPROM.get(50,TempAddress5);
  EEPROM.get(48,SensEin5);
  irSerial.print("Sensor 5 = ");
  irSerial.println(SensEin5);
    if(SensEin1 == 5){
    irSerial.print(" - ");
    irSerial.print("Seriennummer 5 : ");
    printAddress(TempAddress5);
    }

  EEPROM.get(60,TempAddress6);
  EEPROM.get(58,SensEin6);
  irSerial.print("Sensor 6 = ");
  irSerial.println(SensEin6);
    if(SensEin1 == 6){
    irSerial.print(" - ");
    irSerial.print("Seriennummer 6 : ");
    printAddress(TempAddress6);
    }

  EEPROM.commit();
  EEPROM.end();

}
// -------------------------------------------------------------------------- Temp Sensoren suchen
//  Sensoren suchen
void SensSuchen()
{
  irSerial.println("Sensoren Suchen");
  irSerial.print("es wurden ");
  irSerial.print(numberOfDevices);
  irSerial.println(" DS18B20 sensoren gefunden");
  
  for(int i=0;i<numberOfDevices; i++)
  {
    if(sensors.getAddress(tempDeviceAddress, i))
    {
      irSerial.print("unter welcher nummer soll der Sensor ");
      irSerial.println(i+1, DEC);
      irSerial.print(" mit der adresse : ");
      printAddress(tempDeviceAddress);
      irSerial.println("gespeichert werden");
      irSerial.println("mögliche eingabe 1 - 6");
      irSerial.print("Auswahl : ");
      SensAuw = irSerial.read();
      SensAuw = 0;
      while (SensAuw < 1)
      {
        SensAuw = irSerial.read();
        delay(100);
      }
    SensAuw = SensAuw - 48;
    SensAuw = SensAuw * 10;
    irSerial.println(SensAuw / 10);
    irSerial.println();
    
    EEPROM.begin(512);
    EEPROM.put(SensAuw-2,1);
    EEPROM.put(SensAuw,tempDeviceAddress);
    EEPROM.commit();
    EEPROM.end();

    }
    else 
    {
      irSerial.print("Found ghost device at ");
      irSerial.print(i, DEC);
      irSerial.print(" but could not detect address. Check power and cabling");
    }
  }
  SensAnz = numberOfDevices;
  EEPROM.begin(512);
  EEPROM.put(500, SensAnz);
  EEPROM.commit();
  EEPROM.end();

  SensNrEinl();
}
// ------------------------------------------------------------------------ Adresse ausgeben
// Adresse ausgeben ###############
void printAddress(DeviceAddress deviceAddress) 
{
for (uint8_t i = 0; i < 8; i++)
  {
  if (deviceAddress[i] < 16) irSerial.print("0");
    irSerial.print(deviceAddress[i], HEX);
  }
  irSerial.println();
}
// ----------------------------------------------------------------------- Monitor löschen
void seriloe()
{
  for (int i = 0; i < 10; i++)
  {
    irSerial.println(" ");
  }
}
// ----------------------------------------------------------------------- Menue text ausgeben
void Menuetext()
{
  seriloe();
  irSerial.println("M E N U E");
  irSerial.println();
  // Serial.println("1 - test HC-05");
  irSerial.println("B - Bluetooth einstellungen");
  irSerial.println("R - Relais test");
  irSerial.println("D - Differenz");
  irSerial.println("V - Verbindungs Einstellungen");
  irSerial.println("S - Sensoren suchen");
  irSerial.println("Z - Zurücksetzen");
  irSerial.println("E - Exit");
  irSerial.print("auswahl : ");
  Eingabe = irSerial.read();
  Eingabe = ' ';

}
// ------------------------------------------------ Menue
void Menue()
{
  Menuetext();
  Eingabe = ' ';
  while (Eingabe != 'e')
  {
    Eingabe = ' ';
    if (irSerial.available())
    {
      Eingabe = irSerial.read();
      delay(100);
      irSerial.println(Eingabe);
      
      if(Eingabe == 'z' or Eingabe == 'Z')
      {
        seriloe();
        for(int i=0;i<512;i++)
        {
          EEPROM.begin(512);
          EEPROM.put(i,0);
          EEPROM.commit();
          EEPROM.end();
        }
        SensAnz = 0;
        ESP.restart();
      }
      if(Eingabe == 's' or Eingabe == 'S')
      {
        seriloe();
        irSerial.println("Sensoren suchen");
        SensSuchen();
        Menuetext();  
      }
      if(Eingabe == 'v' or Eingabe == 'V')
      {
        seriloe();
        irSerial.println("Verbindungs Einstellungen");
        VerbindungsEin();
        Menuetext();
      }
      if(Eingabe == 'd' or Eingabe == 'D')
      {
        seriloe();
        irSerial.println("Differenz");
        DifferenzEin();
        Menuetext();
      }
      if(Eingabe == 'r' or Eingabe == 'R')
      {
        seriloe();
        irSerial.println("Relais test");
        Relais();
        Menuetext();
      }
      if(Eingabe == 'b' or Eingabe == 'B')
      {
        seriloe();
        irSerial.print("Bluetooth einstellungen");
        Bluetooth();
        Menuetext();
      }
      if(Eingabe == 'z' or Eingabe == 'Z' or Eingabe == 'E' or Eingabe == 'x' or Eingabe == 'X')
      {
        ESP.restart();
      }
    }
  }
  seriloe();
  ESP.restart();
}
// ---------------------------------------------------------------------- Bluetooth
void Bluetooth()
{
  char c=' ';
boolean NL = true;

 irSerial.print("Sketch: "); irSerial.println(__FILE__);
 irSerial.print("Uploaded: "); irSerial.println(__DATE__);
 irSerial.println(" ");

 
 irSerial.println("BTserial started at 38400");
 irSerial.println(" ");

 while (c != 'x')
 {
 if (Serial.available())
 {
 c = Serial.read(); 
 irSerial.write(c);
 }
  if (irSerial.available())
 {
 c = irSerial.read();
 Serial.write(c);

 if (NL) { irSerial.print(">"); NL = false; }
 irSerial.write(c);
 if (c==10) { NL = true; }
 }
 }
} 
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
void Relais()
{
  byte Byte0 = 3;
  byte Byte1 = 1;
  byte Byte2 = 0;
  byte Byte3 = 0;

  HEXausgabe(Byte0,Byte1,Byte2); // ,Byte3);
  
  int Eingabe = 0;
  irSerial.println("welches Rellais soll eingeschaltet werden");
  irSerial.println("mögliche auswahl 0 bis 9");
  irSerial.println("0 schaltet alle relais aus");
  irSerial.println("9 schaltet alle relais ein");
  irSerial.println("x zurück zum Menü");
  irSerial.println();
  while (Eingabe != 72)
  {
    Byte2 = 0;
    irSerial.print("Eingabe = ");
    Eingabe = irSerial.read();
    Eingabe = 0;
    while (Eingabe < 1)
      {
       Eingabe = irSerial.read();
       delay(100);
      }
      irSerial.print(Eingabe); irSerial.print(" : ");
    Eingabe = Eingabe - 48;
    irSerial.println(Eingabe);
    if(Eingabe == 9){Byte2 = 255; Byte0 = 3;}
    if(Eingabe == 8){Byte2 = 128; Byte0 = 8;}
    if(Eingabe == 7){Byte2 = 64; Byte0 = 8;}
    if(Eingabe == 6){Byte2 = 32; Byte0 = 8;}
    if(Eingabe == 5){Byte2 = 16; Byte0 = 8;}
    if(Eingabe == 4){Byte2 = 8; Byte0 = 8;}
    if(Eingabe == 3){Byte2 = 4; Byte0 = 8;}
    if(Eingabe == 2){Byte2 = 2; Byte0 = 8;}
    if(Eingabe == 1){Byte2 = 1; Byte0 = 8;}
    if(Eingabe == 0){Byte2 = 0; Byte0 = 3;}    
    HEXausgabe(Byte0,Byte1,Byte2);  // ,Byte3);
  }
}
// ------------------------------------------------------------------------
 void callback(char* topic, byte* payload, unsigned int length) {
 
  irSerial.print("Message arrived in topic: ");
  irSerial.println(topic);
 
  irSerial.print("Message:");
  for (int i = 0; i < length; i++) {
    irSerial.print((char)payload[i]);
    irSerial.print(payload[i]);
  }
    if ((payload[0]) = 49);
    {
      irSerial.println("Aktualieseren");
      TempC1 = 0;
      TempC2 = 0;
      TempC3 = 0;
      TempC4 = 0;
      TempC5 = 0;
      TempC6 = 0;
    }
 
  irSerial.println();
  irSerial.println("-----------------------");
}
// ------------------------------------------------------------ Verbindung einstellungen
void VerbindungsEin()
{
  void seriloe();

String Text = "";
Text = irSerial.readString();
Text = "";

irSerial.println("Netzwerk Wifi einstellungen");
irSerial.println();
irSerial.println("E = Wifi ein");
irSerial.println("A = Wifi aus");
irSerial.println("S = Netzwerk Name ssid");
irSerial.println("N = Netzwerk Schlüssel");
irSerial.println("M = mqtt Server Adresse");
irSerial.println("C = Client Name");
irSerial.println("P = Speichern");
irSerial.println("Z = Zurück");
irSerial.println();

irSerial.print("Eingabe = ");

while (Eingabe != 'z')
  {
    Eingabe = ' ';
    if (irSerial.available())
      {
        Eingabe = irSerial.read();
        delay(100);
        if(Eingabe == 'E' or Eingabe == 'e')
          {
            irSerial.println(Eingabe);
            irSerial.println("Wifi ein");
            irSerial.println();
            irSerial.print("Eingabe = ");
            WLanEA = 1;
          }
        if(Eingabe == 'A' or Eingabe == 'a')
          {
            irSerial.println(Eingabe);
            irSerial.println("Wifi aus");
            irSerial.println();
            irSerial.print("Eingabe = ");
            WLanEA = 0;
          }
        if(Eingabe == 'S' or Eingabe == 's')
          {
            irSerial.println(Eingabe);
            Text = irSerial.readString();
            Text = "";
            irSerial.print("Netzwerk Name ssid =  ");
            while (Text == "")
              {
                Text = irSerial.readString();
                delay(100);
              }
            Text.toCharArray(ssid,Text.length());
            irSerial.println(ssid);
            irSerial.println();
            irSerial.print("Eingabe = ");
          }
        if(Eingabe == 'N' or Eingabe == 'n')
          {
            irSerial.println(Eingabe);
            Text = irSerial.readString();
            Text = "";
            irSerial.print("Netzwerk Schlüssel =  ");
            while (Text == "")
              {
                Text = irSerial.readString();
                delay(100);
              }
            Text.toCharArray(password,Text.length());
            irSerial.println(password);
            irSerial.println();
            irSerial.print("Eingabe = ");
          }
        if(Eingabe == 'M' or Eingabe == 'm')
          {
            irSerial.println(Eingabe);
            Text = irSerial.readString();
            Text = "";
            irSerial.print("mqtt Server Adresse =  ");
            while (Text == "")
              {
                Text = irSerial.readString();
                delay(100);
              }
            Text.toCharArray(mqttServer,Text.length());
            irSerial.println(mqttServer);
            irSerial.println();
            irSerial.print("Eingabe = ");
          }
        if(Eingabe == 'C' or Eingabe == 'c')
          {
            irSerial.println(Eingabe);
            Text = irSerial.readString();
            Text = "";
            irSerial.print("Client Name = ");
            while (Text == "")
              {
                Text = irSerial.readString();
                delay(100);
              }
            Text.toCharArray(ClientName,Text.length());
            irSerial.println(ClientName);
            irSerial.println();
            irSerial.print("Eingabe = ");
          }
        if(Eingabe == 'P' or Eingabe == 'p')
          {
            irSerial.println(Eingabe);
            irSerial.println();
            irSerial.println("Daten Speichern");
            irSerial.println();
            irSerial.println(ssid);
            irSerial.println(password);
            irSerial.println(mqttServer);
            irSerial.println(ClientName);
            irSerial.print("Wifi ");
            irSerial.println(WLanEA);
            
            EEPROM.begin(512);
            EEPROM.put(505, WLanEA);
            EEPROM.put(400, ssid);
            EEPROM.put(420, password);
            EEPROM.put(440, mqttServer);
            EEPROM.put(470, ClientName);
            EEPROM.commit();
            EEPROM.end();

          }
      }
  } 
}
// ------------------------------------------------------ WLan Verbinden
void WLanverbinden()
{

  WiFi.begin(ssid, password);
  // WiFi.begin(Text, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    irSerial.println("Connecting to WiFi..");
    int Eingabe = irSerial.read();
    Eingabe = Eingabe - 48;
    if(Eingabe > 0)
    {
      Menue();
    }
  }
  irSerial.println("Connected to the WiFi network");
  mqttclient.setServer(mqttServer, mqttPort);
  mqttclient.setCallback(callback);
}
// ------------------------------------------------------ Differenz Einstelen
void DifferenzEin()
{
  irSerial.println();
  irSerial.println("Differenz eingeben");
  irSerial.println("Mögliche eingabe");
  irSerial.println(" 0 - 9 ");
  irSerial.print("Eingabe = ");
  
  Differenz = irSerial.read();
  Differenz = 0;
  while (Differenz < 1)
    {
     Differenz = irSerial.read();
     delay(100);
    }
  Differenz = Differenz - 48;
  irSerial.println(Differenz);
  EEPROM.begin(512);
  EEPROM.put(510,Differenz);
  EEPROM.commit();
  EEPROM.end();

  
}

Ich glaube ich habe mein Problem gefunden, aber noch keine Lösung.

wenn ich die Relaiskarte an meinem ATMEGA8 anschließe funktioniert sie und ich bekomme am Oszi dieses Bild.

wenn ich die Relaiskarte am ESP8266 anschließe funktioniert nichts und am Oszi bekomme ich das

gemessen direkt an der Relaisplatine.

Mehr infos.

Wo, wie, was hast Du gemessen?
schaltplan
Grüße Uwe

Hallo
Mit welche Logik-Pegel arbeitet der ESP8266 und ist dieser kompatibel zur Relais Platine?

An einem schaltplahn arbeite ich gerade und werde ihn sobald er fertig ist hochladen.

Der esp arbeitet mit 3,3v Pegel und die relais Karte mit 12v zwischen esp und relais Karte ist ein pegelwandler.