ESP8266 / NodeMCU Bootloop wenn "attachInterrupt" festgelegt wird

Hallo zusammen,

Bin aktuell am bauen einer kleinen Steuerung für die Wohnung (aktuell noch Funksteckdosen).
Das hat mit dem Arduino ohne großen Aufwand sofort funktioniert. Zur erleichterten Wifi-Verbindung hab ich mir nun noch ein NodeMCU V2 bzw. ESP8266 besorgt, da mir das Wifi-Modul über die Serielle Schnittstelle auf Dauer zu kompliziert läuft.

Also kurzerhand die definierten Pins angepasst, aufgespielt und natürlich gehts NICHT. Hab nun herausgefunden, dass es an der Zeile "attachInterrupt(digitalPinToInterrupt(EncA), EncA_Itr, CHANGE);" liegt. Wenn ich diese auskommentiere, geht alles (bis den KY-040).
Wenn nicht, gibts einen Boot-Loop mit folgender Meldung im Serial-Monitor:

15:00:02.957 -> ets Jan 8 2013,rst cause:2, boot mode:(3,7)
15:00:02.957 ->
15:00:02.957 -> load 0x4010f000, len 3584, room 16
15:00:02.957 -> tail 0
15:00:02.957 -> chksum 0xb0
15:00:02.957 -> csum 0xb0
15:00:02.957 -> v2843a5ac
15:00:02.957 -> ~ld

Laut Datenblatt müssten alle GPIO interruptfähig sein, bis auf GPIO_16.

Hier der Code:

// include the library code:
#include <ESP8266WiFi.h>

// Define Pins
#define EncA D7 
#define EncB D6    
#define EncSw D5

void setup() {
  
  // Set interupt
  pinMode(EncA, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(EncA), EncA_Itr, CHANGE);
  
}

void loop() {
  
}

void EncA_Itr ()  {  

}

Muss ich beim ESP8266 ein paar Besonderheiten beachten?

Wozu brauchst du einen Interrupt ?

Ist das was du baust so zeitkritisch ?

miar90:
Muss ich beim ESP8266 ein paar Besonderheiten beachten?

Ja das musst Du - speziell bei Interrupts, da die ISR in einem speziellen Speicherbereich liegen muss:

void ICACHE_RAM_ATTR EncA_Itr ()  {

...ob Du wirklich einen brauchst ist eine andere Frage :wink:

(deleted)

Ich will das Modul als zentrale Steuerung verwenden, hauptsächlich über die App "BLYNK", aber als Fallback hab ich noch ein OLED-Display mit KY-040 verbaut um auch Offline noch alles Schalten zu können.

Da ich beim Encoder-Poti Flanken prüfen muss, sehe ich ohne Interrupt keine Chance vernünftig die Drehimpulse auszuwerten.

Ich finde die Bedienung über Encoder einfach viel angenehmer als über Taster, Bedienfeld oder ähnliches, deshalb zu der Frage "Brauchen": Aktuell JA, ansonsten muss ich auf Taster o.Ä. ausweichen :slight_smile:

Im Übrigen: Danke Franz-Peter, das hat mein Problem gelöst!

Da sich hauptsächlich nur dieser Punkt vom normalen Arduino-Code unterschiedet, finde ich es allerdings komisch, dass meine Suchergebnisse zu "ESP8266 Interrupt" diese Info vermissen lässt oder teilweise nebenbei erwähnt. Nachdem ich aktiv nach deinem Wortlaut gesucht hab, finde ich auch sehr gute Erklärungen dazu.

Ja das ist manchmal ein Problem bei der Suche: Die richtigen Suchwörter zu finden. Und wenn man die dann kennt, hat man manchmal auch schon die Lösung und braucht eigentlich nicht mehr suchen :wink:

Dann weiterhin viel Spaß mit dem ESP8266