Esp8266 und arduino über digital pins verbinden

Hey ich möchte mit einem esp8266 der in home assistent als schalter konfiguriert ist auf einem arduino verschiedene programme eines led strips durchschalten ich bin leider kein elektriker und habe im internet kein schaltbild dazu gefunden

also habe ich es einfach ausprobiert funktioniert auch soweit aber manchmal wird der arduino vom pc nicht mehr erkannt und ich muss ihn zum programmieren komplett aus der schaltung entfernen hat einer von euch eine idee wie ich das mache oder ob das überhaupt so geht?

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

ESP8266 und ESP32 ist ein 3.3V System, normaler Arduino (Uno Mega Nano) hat an den Pins 5V bei Output das überlebt der ESP nicht, wen auch das kurzzeitig funktioniert.

Verwendest Du die Pins 0 und 1 des Arduino?
Grüße Uwe

Meine "five cents":
Die meisten STM MCU sind 5V tolerant: die koennen einen 5V logic signal sehen/verwenden ohne kaputt zu gehen, auch wenn nur 3V3 an MCU und als GPIO input voltage verwendet werden.

Fuer die Kopplung von zwei MCU boards wuerde ich ueber ein Interface nachdenken, z.B. UART or SPI, oder I2C. Eine MCU sendet z.B. via UART, die andere empfaengt das. Und die Zeichen (Bytes) haben eine Bedeutung ("Protocol", commands).

Direkt ueber simple GPIO pins, toggle ein pin am Tx, versuche das "togglen" am Rx GPIO input zu sehen ... ist sehr kompliziert und "timing sensitive". Das ist sehr tricky und unzuverleassig.
Verwende doch einfach ein Communication Interface zwischen beiden MCUs (UART, SPI, I2C, auch ETH).

Was meinst Du mit "komplett aus der Schaltung entfernen" um zu programmieren?
Ich kann mir nur vorstellen: wenn die MCU komplett ueberlastet ist, die Versorgungsspannung z.B. durch Last an GPIO pins zu hoch ist (und Versrogungsspannung zu trief) - dann ist die nicht mehr "erreichbar" fuer Bootloader oder Debugger. Deshalb musst Du diese herausnehmen.
Kein gutes Zeichen, eher ein Indiz, dass HW-maessig was nicht stimmt.

Auch kann es sein, wenn Du externe HW dran hast, dass die Versorgungsspannung einbricht, so gering wird, dass selbst ein JTAG debugger nicht mehr "connecten" kann. Klingt mehr wie ein "Last-Problem", "Versorgungsspannung bricht ein", "zu viel dran"...

Bitte zeig mal ein Schaltbild was du wie verkabelt hast inkl. Stromversorgung.

Die zweie Sketche die du laufen hast braucht es auch. bitte hier hochladen.




so ist das ganze verkabeld die spannung kommt vom arduino weil des nur ein test aufbau ist

der esp bekommt seinen befehl vom home assistent bei dem er die vier io pins auf high oder low schaltet und der arduino soll dann daraufhin verschiedene programme durchlaufen lassen je nachdem welcher pin auf high ist

#include <FastLED.h>
#define light 100

#define black 0, 0, 0
#define green 0, 255, 0
#define bluegreen 0, 200, 200
#define blue 0, 0, 255
#define lila 200, 0, 200
#define red 255, 0, 0
#define orange 255, 100, 0
#define yellow 200, 200, 0
#define yellowgreen 100, 255, 0

#define ledPin 9
#define LED 40

CRGB leds[LED];
long EffectDelay = 100;
long EffectTime = 0;

//LEDS__________________________________________________________________________________
//LEDSBEAT______________________________________________________________________________

int StartLED1 = 10;
int StartLED2 = 20;
int StartLED3 = 30;

const int Sensor = A1;
unsigned int Sound = 0;
//Lautstärke
const int Stage1 = 40;
const int Stage2 = 45;
const int Stage3 = 47;
const int Stage4 = 50;

long SensorTime = 0;
long SensorDelay = 10;
//LEDSBEAT______________________________________________________________________________
//ReadESP_______________________________________________________________________________

long ReadDelay = 10;
long ReadTime = 0;

#define input_1 2
#define input_2 3
#define input_3 4
#define input_4 5

bool inputState_1 = false;
bool inputState_2 = false;
bool inputState_3 = false;
bool inputState_4 = false;
//ReadESP_______________________________________________________________________________



void setup() 
{
  Serial.begin(9600);
  FastLED.addLeds<NEOPIXEL, ledPin>(leds, LED);
  
  pinMode(input_1, INPUT);
  pinMode(input_2, INPUT);
  pinMode(input_3, INPUT);
  pinMode(input_4, INPUT);
}

void loop() 
{
  ReadEsp();
  ReadSensor();
}
void LEDs(uint16_t led1, uint16_t led2,uint16_t led3, CRGB color)
{
   if(led1 < LED) leds[led1] = color;
   if(led2 < LED) leds[led2] = color;
   if(led3 < LED) leds[led3] = color;
   FastLED.show();
}
void ReadSensor()
{
  while(millis() > SensorTime + SensorDelay)
  {
    SensorTime = millis();

    Sound = analogRead(Sensor);

//    if(Sound < 1023)
//    {
//      if(Sound > signalMax)
//      {
//        signalMax = Sound;
//      }
//      else if(Sound < signalMin)
//      {
//        signalMin = Sound;
//      }
//    }
  }
//  loudness = signalMax - signalMin;
  Sound = map(Sound, 0, 450, 0, 100);
  Serial.println(Sound);
}
void NachBeat()
{
  if(Sound > 0 && Sound < Stage1)
  {
    LEDs(StartLED1, StartLED2, StartLED3, CRGB(green));

    LEDs(StartLED1 +1, StartLED2 +1, StartLED3 +1, CRGB(black));
    LEDs(StartLED1 -1, StartLED2 -1, StartLED3 -1, CRGB(black));
    LEDs(StartLED1 +2, StartLED2 +2, StartLED3 +2, CRGB(black));
    LEDs(StartLED1 -2, StartLED2 -2, StartLED3 -2, CRGB(black));
    LEDs(StartLED1 +3, StartLED2 +3, StartLED3 +3, CRGB(black));
    LEDs(StartLED1 -3, StartLED2 -3, StartLED3 -3, CRGB(black));
    LEDs(StartLED1 +4, StartLED2 +4, StartLED3 +4, CRGB(black));
    LEDs(StartLED1 -4, StartLED2 -4, StartLED3 -4, CRGB(black));
  }
  if(Sound > Stage1 && Sound < Stage2)
  {
    LEDs(StartLED1 +1, StartLED2 +1, StartLED3 +1, CRGB(bluegreen));
    LEDs(StartLED1 -1, StartLED2 -1, StartLED3 -1, CRGB(bluegreen));
    
    LEDs(StartLED1 +2, StartLED2 +2, StartLED3 +2, CRGB(black));
    LEDs(StartLED1 -2, StartLED2 -2, StartLED3 -2, CRGB(black));
    LEDs(StartLED1 +3, StartLED2 +3, StartLED3 +3, CRGB(black));
    LEDs(StartLED1 -3, StartLED2 -3, StartLED3 -3, CRGB(black));
    LEDs(StartLED1 +4, StartLED2 +4, StartLED3 +4, CRGB(black));
    LEDs(StartLED1 -4, StartLED2 -4, StartLED3 -4, CRGB(black));
  }
  if(Sound > Stage2 && Sound < Stage3)
  {
    LEDs(StartLED1 +2, StartLED2 +2, StartLED3 +2, CRGB(blue));
    LEDs(StartLED1 -2, StartLED2 -2, StartLED3 -2, CRGB(blue));
    
    LEDs(StartLED1 +3, StartLED2 +3, StartLED3 +3, CRGB(black));
    LEDs(StartLED1 -3, StartLED2 -3, StartLED3 -3, CRGB(black));
    LEDs(StartLED1 +4, StartLED2 +4, StartLED3 +4, CRGB(black));
    LEDs(StartLED1 -4, StartLED2 -4, StartLED3 -4, CRGB(black));
  }
  if(Sound > Stage3 && Sound < Stage4)
  {
    LEDs(StartLED1 +3, StartLED2 +3, StartLED3 +3, CRGB(lila));
    LEDs(StartLED1 -3, StartLED2 -3, StartLED3 -3, CRGB(lila));
    
    LEDs(StartLED1 +4, StartLED2 +4, StartLED3 +4, CRGB(black));
    LEDs(StartLED1 -4, StartLED2 -4, StartLED3 -4, CRGB(black));
  }
  if(Sound > Stage4)
  {
    LEDs(StartLED1 +4, StartLED2 +4, StartLED3 +4, CRGB(lila));
    LEDs(StartLED1 -4, StartLED2 -4, StartLED3 -4, CRGB(lila));
  }
}
void BlackColors()
{
    for(int i = 0; i < LED; )
    {
      leds[i] = CRGB(green);
      FastLED.show(light);
      if(millis() > EffectTime + EffectDelay)
      {
        EffectTime = millis();
        i++;
      }
    }
    for(int i = LED; i >= 0; )
    {
      leds[i] = CRGB(black);
      FastLED.show(light);
      if(millis() > EffectTime + EffectDelay)
      {
        EffectTime = millis();
        i--;
      }  
    }
}
void Beat()
{
  
}
void ReadEsp()
{
    inputState_1 = digitalRead(input_1);
    inputState_2 = digitalRead(input_2);
    inputState_3 = digitalRead(input_3);
    inputState_4 = digitalRead(input_4);
    
    if(inputState_1)
    {
      //Serial.println("Pin 1");
      BlackColors();
    }
    else
    {
      //Serial.println("Pin 1 LOW");
    }
    if(inputState_2)
    {
      NachBeat();
      //Serial.println("Pin 2");
    }
    else
    {
      //Serial.println("Pin 2 LOW");
    }
    if(inputState_3)
    {
      //Serial.println("Pin 3");
    }
    else
    {
      //Serial.println("Pin 3 LOW");
    }
    if(inputState_4)
    {
      //Serial.println("Pin 4");
    }
    else
    {
      //Serial.println("Pin 4 LOW");
    }
}
type or paste code here

Wo kommt die Spannung am Vin her? Welcher Pegel liegt dort an?

  1. Du kannst den Arduino NANO nicht über Vin mit 5V versorgen. Da müssen mindestens 6,5V sein.
  2. Du kannst nicht 40 WS2812 über den Arduino versorgen.

40 WS2812 brauchen ca 2,4A. Die USB Schnittstelle liefert ca 500mA; der Spannungsstabilisator auf dem NANO schafft noch weniger.

Grüße Uwe

die spannung kommt vom usb der am arduino steckt

ich hab noch n netzteil mit 5 volt 3 ampere soll ich darüber die ganzen vin versorgen?

Nein. Nach dem Vin kommt ein Spannungsregler. Damit nach dem Spannungsregler 5V Anliegen, braucht es am Vin mehr Potenzial. Wieviel ist abhängig vom verbauten Regler und dem Strom der über ihn fließt. 7V sollten ausreichen.

Mir war gar nicht bewusst, das der Spannungsregler Rückwärts Spannung von 5V an Vin gibt. Gerade mal mein Nano(Clone) rausgeholt und es liegen nur 3,55V an Vin, wenn der Nano über USB versorgt wird.

aber dann müsste ich die leds ja über den arduino mit strom versorgen weil die sind ja nur für 5v geeignet

Ein Versorgen der vielen LEDs über den Arduino ist nicht ratsam. Jeglicher Strom für deine Verbraucher muss entweder von USB oder über den internen Spannungsregler bereit gestellt werden. Der Strom der da verfügbar ist, ist begrenzt.

Ich erkenne zwar nicht richtig, welche LEDs es sind. Aber vermutlich WS2812b. Laut Datenblatt mit einer Versorgung 3,7-5,3V lauffähig.
http://www.world-semi.com/DownLoadFile/108

Aus Erfahrung aber auch bis 2,8V Lauffähig.

ich probiere des mal mit nem extra netzteil für die leds das die ihre eigene stromquelle haben

Auch wenn es hier schon anders geschrieben wurde, ist laut Datenblatt dein ESP an den GPIOs nur mit maximal 3,6V angegeben. Dein Arduino Nano schadet dem ESP über kurz oder lang, da dessen Ausgänge 5V ausgeben.
0a-esp8266ex_datasheet_en (espressif.com)

Warum steuerst du den Strip nicht gleich über den ESP8266 und verzichtest auf den Arduino Nano?

naja der arduino gibt dem esp ja keine signale über die pins ich mach des so weil ich im home assistent mit lambda code nicht das hinbekomme was ich möchte deswegen hab ich mir gedacht das ich des so machen kann weil ich dann im home assistent nur n schalter programmiere und auf dem arduino den ganzen code hab mit dem ich mich super auskenne

Ok. Ich denke, es wäre einfacher mit nur dem ESP8266. Aber jedem das seine. Du legst also mit dem ESP8266 3,3V Pegel an den Arduino Nano Pins D2, D3, D4, D5 an.

Es kann passieren das dies nicht sicher vom Arduino Nano erkannt wird. Laut Datenblatt wird ein HIGH Pegel erst sicher ab 3,5V (5V * 0,7) erkannt.

Den Arduino Nano könntest du auch mit dem 5V Netzteil am 5V Pin versorgen.
Den NodeMCU könntest du auch mit dem 5V Netzteil am 5V Pin versorgen.

Was machen dann die Kabel an Vin?

Dann leuchten sie aber nur nocht rot.

Schon probiert? Also meine nicht.

Aber ja, außerhalb der Spezifikation.