4 x Relay Bord mit ESP8266-01/01S

Hallo,
ich bin neu hier und beschäftige mich seit kurzer Zeit mit dem esp8266 und möchte ihn nutzen um ein paar Dinge im zu Haus steuern zu können.
Zu meinem Problem bzw. Frage: Ich habe eine kleines Programm geschrieben, mit dem ich über einen ESP8266-01S ein 4-Fach Relay-Board ansteuere. Das Board hat die Bezeichnung: LC-Relay-ESP01-4R-5V. Die Kombination aus ESP8266-01S und Relay-Board läuft einwandfrei. Nun habe ich hier auch einen ESP8266-01 (alte Variante). Auf dem läuft die Software auch (auch auf dem Sockel des Relay-Boards), nur wird das Relay nicht geschaltet. Ist das Relay-Board nicht geeignet für den ESP8266-01 sondern nur für den ESP8266-01S?
Danke schon mal für eure Hinweise.

Bitte verwenden Sie in den englischen Bereichen des Forums die englische Sprache. Ihr Thema wurde in den deutschen Bereich des Forums verschoben.

Eine irrige Hypothese.
Dem Board ist das egal.

Welches Relay-Board verwendest du ?
Bitte einen Link zum Relay / Händler zeigen.

Ich kenne kein reines Relay-Board, auf dem auch eine Software läuft.

Das 5V dürfte für 5V stehen. Der ESP8266 hat an den Ausgängen maximal 3,3V, eher etwas weniger. Wie viel weniger ist vom konkreten Exemplar abhängig.
Also kann es bei dem einen gerade noch so funktionieren, bei dem anderen nicht.

Gruß Tommy

Nöö...
Die beiden passen wie Arsch auf Eimer.

Das Problem steckt wie fast immer in dem geheim gehaltenen Dingen.
Evtl auch ein Defekt. aber so lang sind meine Messstrippen nicht.

Der einzige wirksame Unterschied ist die Flash Größe.

In dem Fall ist das von der Spannungsquelle (Netzteil / Batterie) abhängig. Ein ESP822-01(s) wird direkt mit 3,3 Volt betreiben.

Foto vom Aufbau.
So, dass man sieht wie und wo die ganzen Kabel herkommen und hingehen.
Auch die Versorgungsspannungen.

Hallo,
es könnte sich um sowas handeln

da sollte man eigentlich von ausgehen das es geht und die Spannungen kein problem sind .

Gruß Heinz

Ja genau...könnte.....Warum können Fragesteller hier keine richtigen Angaben machen ?
Oder können die nicht lesen ?
Denn es steht alles ausführlich in der Anleitung, wie man dieses Forum nutzt. Aber diese Anleitung muss man natürlich lesen (können).

Dann hört das mal auf mit der Raterei und den ewigen Rückfragen die meist ohne Antwort bleiben.

Ich frage nicht mehr. (kaum noch)
Denn das ist ermüdend, frustrierend, und endet nicht selten in Streit.

Das Board ist ein LC-Relay-ESP01-4R-5V. Der Link zum Hersteller Relay Board

Code folgt noch. Muß nur noch etwas angehübscht werden.

Dann sieh dir das hier mal an.
Es liegt da an den fehlenden Widerständen auf dem ESP8266-01.

Hier der Code... Danke schon mal für eure Hilfe.

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

const int ESP_OLD_BOARD = 0;
const int ESP_NEW_BOARD = 1;

// voreingestellter Board-Typ
int BOARD_TYP = ESP_OLD_BOARD;

// Anzahl der Relais
const int ANZ_RELAIS = 4;

// Übertragungsrate für Serial.print()
const int BAUDRATE = 115200;

// Name des ESP oder Sonoff wird in Setup vervollständigt
String NAME = "ESP";

// ****************************************************************************
void setup()
{
  // Debug init
  DEBUG_BEGIN(BAUDRATE);

  // ESP ist als Name voreingestellt
  NAME = "ESP";

  // die Chip-Nr wird mit in den Namen aufgenommen
  NAME = NAME + "-" + String(system_get_chip_id());

  // stellt die PINs und Relais ein
  prepareBoardTyp(BOARD_TYP);

  // Board initialisieren
  prepareRelaisBoard();
  
  // LED einrichten und ausschalten
  prepareLed();
  
  // 4 Sekunden warten
  delay(4000);
}
// ****************************************************************************
void loop()
{
  for(int x = 0; x < ANZ_RELAIS; x = x + 1)
  {
    switchOn(x);
    delay(1000);
  }
  for(int x = 0; x < ANZ_RELAIS; x = x + 1)
  {
    switchOff(x);
    delay(1000);
  }

}
// ****************************************************************************
// PIN für die LED
// ESP8266 (neu)-> 2
// ESP8266 (alt)-> 1

#define ESP_LED_PIN_OLD 1
#define ESP_LED_PIN_NEW 2

int LED_PIN = ESP_LED_PIN_OLD;

// PIN für die Relais
// ESP -> 0
// SONOFF -> 12
#define ESP_RELAYS_PIN 0

int RELAIS_PIN = ESP_RELAYS_PIN;

byte RELAIS_ON = 1;
byte RELAIS_OFF = 0;

void prepareBoardTyp(int typ)
{
  // stellt die PINs für das jeweilige Board ein

  // ESP 1.0 mit n Relay
  if(typ == ESP_OLD_BOARD && ANZ_RELAIS > 1)
  {
    RELAIS_PIN = ESP_RELAYS_PIN;
    LED_PIN = ESP_LED_PIN_OLD;

    RELAIS_ON = 0;
    RELAIS_OFF = 1;

    return;
  }

  // ESP 1.1 mit n Relais
  if(typ == ESP_NEW_BOARD && ANZ_RELAIS > 1)
  {
    RELAIS_PIN = ESP_RELAYS_PIN;
    LED_PIN = ESP_LED_PIN_NEW;

    // die Codes für die Relais werden bei 'on' und 'off' gesetzt

    return;
  }
}
// ****************************************************************************
// *************************** Relais *****************************************
// ****************************************************************************
// ****************************************************************************
void prepareRelaisBoard()
{
  // Einstellungen für die Relais vornehmen
  
  // GPIO welches die Infos an das Relais schickt auf Ausgang setzen
  pinMode(RELAIS_PIN, OUTPUT);

  // Pause, sonst sind die Relais noch nicht so weit
  delay(5000);

}
// ****************************************************************************
void switchOff(int nr)
{
    // Nr des Relais berechnen
    nr = nr + 1;

    // Relais ausschalten
    byte off[] = {0xA0, nr, 0x00, 160 + nr};

    // schalten
    switchTo(off);

  // LED ausschalten
  ledOff();
}
// ****************************************************************************
void switchOn(int nr)
{
  // Relais einschalten

  // Nr des Relais berechnen
  nr = nr + 1;

  // Bytefolge zum einschalten
  byte on[] = {0xA0, nr, 0x01, 160 + nr + 1};

  // schalten
  switchTo(on);

  // LED einschalten
  ledOn();
}
// ****************************************************************************
void switchTo(byte* on_off)
{
    // Relais schalten
    Serial.write(on_off, sizeof(on_off));
}
// ****************************************************************************
// ****************************************************************************
// ****************************************************************************
void ledOn()
{
      // LED an
      digitalWrite(LED_PIN, LOW);
}
// ****************************************************************************
void ledOff()
{
      // LED aus
      digitalWrite(LED_PIN, HIGH);
}
// ****************************************************************************
void prepareLed()
{
  // Initialize the LED_BUILTIN pin as an output  
  pinMode(LED_PIN, OUTPUT);

  // LED ausschalten
  ledOff();
 }
// ****************************************************************************
void DEBUG_BEGIN(unsigned long baud)
{
  // Console für Debuggen vorbereiten

  // Debug init
  Serial.begin(baud);
  
  while(!Serial)
  {
    ; // wait for serial port to connect. Needed for native USB port only
  }
}
// ****************************************************************************

Du schreibst doch im Eingangspost, dass die Software auch auf dem ESP8266-01 läuft.
Woran machst du das fest, wenn kein Relais schaltet ?
Und hast du meine Info zum fehlenden Widerstand gelesen ?

Ich habe mir das mit den Widerständen angesehen. Soweit ich verstanden habe, sind sie dafür da, daß der ESP überhaupt startet!???. Ich bitte um Korrektur, wenn das nicht stimmt. Wo soll denn auch ein Widerstand angelötet werden, der ESP01 steckt in einem Sockel auf dem Relay-Board.
Wenn ich den ESP01 auf den Sockel stecke, und die Spannug anlege, dann startet er auch. Er führt alles aus was er soll, bis auf die Schaltvorgänge. Hier in meiner Infrastruktur ist das Konstrukt aus ESP01 und Relay-Board in einer Netzwerkumgebung. Der Sketch antwortet auf alle UDP Anfragen (daher weiß ich dass der ESP01 läuft), er schaltet halt nur das Relay nicht. Kann es evtl. doch am Sketch liegen?
Der gepostete Code ist nicht der, der in der Realität bei mir läuft, es ist nur ein lauffähiges Beispiel, welches das Problem demonstriert.

Wenn man den Code der loop-Schleife abändert wie hier, dann sieht man auch das der ESP01 läuft.

// ****************************************************************************
void loop()
{
  for(int x = 0; x < ANZ_RELAIS; x = x + 1)
  {
    ledOn();
    switchOn(x);
    delay(1000);
  }
  for(int x = 0; x < ANZ_RELAIS; x = x + 1)
  {
    ledOff();
    switchOff(x);
    delay(1000);
  }
}
// ****************************************************************************

Genau das habe ich vermutet, dass er nicht startet. Dann ist der Widerstand auf dem Relaisboard integriert. Da die Boards ESP8266-01S und ESP8266-01 Pinkompatibel sind, sehe da erstmal kein Problem.
Ich habe bei meinen Projekten und Versuchen auch keine Differenzen festgestellt. Evtl solltest du mal die Spannung an den Steuerpins messen.

Um das tatsächliche Problem herauszufinden, ist ein Schaltbild des Relaismoduls sehr nützlich. Liegt dir das vor ?

Ich habe mit 4 anderen ESP01 probiert (weil du das mit den Toleranzen erwähnt hast). Leider auch dabei keine Änderung :expressionless_face:

Schaltbild liegt nicht vor.