Wemos D1 mini Interrupt funktiniert nicht

Hallo zusammen,
ich möchte an den Wemos D1 mini knöpfe anschließen, die im Programm leider mit Interrupt ausgewertet werden müssen.
Aber es scheitert schon an der Basis.
Wenn ich :
attachInterrupt(digitalPinToInterrupt(D0), Code, LOW);
oder
attachInterrupt(D0, Code, LOW);
im Code an der richtigen stelle (im Setup) stehen habe, druckt er mir, wenn der Code auf dem Wemos D1 mini ist,
durch den Seriellen Monitor, obwohl ich diesen nicht einmal benutze.
Er schreibt mir:
ets Jan 8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1392, room 16
tail 0
chksum 0xd0
csum 0xd0
v3d128e5c
~ld

Ich habe schon andere Pins probiert, aber auch da dasselbe.
Ist Interrupt beim Wemos D1 mini nicht möglich? oder bin ich einem Fake aufgesessen?
Danke für jeden Hilfe versuch,
Adrian

Der Wemos startet im Programmiermodus, nicht im normalen Modus. wenn du alle Kabel abklemmst, bleibt die serielle Ausgabe trotzdem so?

Was verstehst du unter "Knöpfe" ?
Und warum mit Interrupt ?

Danke.
Was kann ich dagegen tun?
Also wie kann ich einen Knopf als Interrupt nutzen, um ihn zu detektieren und zu verarbeiten, ohne es im Hauptcode zu schreiben?

adrianbeichler:
Was kann ich dagegen tun?

Einfach mal Fragen beantworten und auch deinen Sketch zeigen.

Man benutzt keinen Interrupt um einen Button abzufragen.

HotSystems:
Was verstehst du unter "Knöpfe" ?
Und warum mit Interrupt ?

Ich habe einen Hauptcode, der Arbeitet und einiges an Zeit in Anspruch nimmt.
Da habe ich die Sorge, dass das Drücken des Knopfes, der eine andere Funktion unabhängig des Hauptcodes hat, nicht registriert wird.

PS.: Ich bin hier noch neu. Meine Antwort galt dem vor mir.
Ein Code habe ich noch nicht. Ich wollte erst ausprobieren, ob der Interrupt funktioniert, also ein ganz leichter Code der beim Interrupt eine LED einschalten soll.

void setup() {
  pinMode(D0, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(D0),Code, LOW);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);
}

void loop() {
  // put your main code here, to run repeatedly:

}

void Code() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
}

Was ich schon vom großen Code verraten kann, ist, dass der Code seriell den Sensor anfragt und direkt im Anschluss die Daten einließt. Danach zeigt er die Werte auf einem Display an und sendet diese Seriell aus.
Danach macht er ein delay(5000); (Vielleicht lässt sich dort auch die Abfrage der Knöpfe einbauen mit einer Loop mit digitalRead und delay(1):wink:
Daraufhin beginnt der Code von neuem

Hallo,
kannst du bitte mal so schreiben, dass man das auch versteht.

Was du meinst sind Taster oder Button. Knöpfe sind u.a. am Hemd.

Für einen Taster brauchst du keinen Interrupt. Wurde auch dir schon geschrieben.
Wenn dein Sketch das fordert, dann hast du den falsch geschrieben.
Und ein Delay(5000) ist für deine Sache total ungeeignet.
Verwende millis und lies dir das Beispiel "BlinkWithoutDelay" in der IDE durch.

Zum Interrupt am Wemos. Hast du mal die entsprechenden Datenblätter studiert ?

Z.B. hier steht etwas zum IRQ am D0.
Ziemlich am Ende:

So now the only Pins available for Interrupt are :
D0 - GPIO16 - This Pin has NO interrupt/pwm/I2C/one-wire support (So NOT usable for Interrupt)

D4 - GPIO2 - The interrupt is working, however :

Danke,
millis werde ich auf jeden Fall einbauen.
Das sollte auch das Problem der Abfrage, ob der Nutzer gerade den Taster gedrückt hat beheben.
Was ist jedoch, wenn ein Code, der alle 15000 Millisekunden ausgeführt wird, länger braucht. Zum Beispiel 2,5 Sekunden. Denn dann wird ein langer serieller Text übertragen. (Vielleicht löse ich das noch dadurch, dass dieser nur auf Anfrage gesendet wird.) Aber meine Frage dazu. Wenn diese serielle Übertagung 2,5sek benötigt, werden dann Tastendrücke in dieser Zeit nicht registriert?

Das kommt darauf an wie die serielle Übertragung implementiert ist. Das kann man auch völlig nicht-blockierend machen. Im Prinzip ist die serielle Übertragung sehr langsam und jedes Zeichen braucht eine gewisse Zeit (1 / Baudrate / 10 Sekunden). Dazwischen kann man andere Dinge erledigen.

adrianbeichler:

  attachInterrupt(digitalPinToInterrupt(D0),Code, LOW);

.....
void Code() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
}

Und delay() in einer Interruptroutine ist schonmal prinzipiell fehl am Platz. Das darf man da nicht machen.