esp32 Absturz beim Setzen von GPO

Schönen Feiertag in die Runde,

bei meinem TTGO T-Display (siehe Bild) wollte ich mal testen, welche Pins als Ausgang funktionieren. Wenn ich dazu folgenden Code verwende

byte pins[] = {21, 22, 17, 2, 15, 13, 12, 27, 26, 25, 33, 32, 39, 38, 37, 36};

void setup() {
  Serial.begin(115200);
  Serial.println("Achtung, jetzt kommt ein Kartong:");
  Serial.println();
  for (byte i = 0; i < sizeof(pins); i++) {
    delay(1000);
    pinMode(i, OUTPUT);
    Serial.print("Pin ");
    Serial.print(pins[i]);
    Serial.println(" gesetzt");
    delay(1000);
    digitalWrite(i, HIGH);
    Serial.print("Pin ");
    Serial.print(pins[i]);
    Serial.println(" geschaltet");
  }
}

void loop() {
}

stürzt das Board mit dieser Fehlermeldung

13:08:25.810 -> Achtung, jetzt kommt ein Kartong:
13:08:25.810 -> 
13:08:26.810 -> Pin 21 gesetzt
13:08:27.810 -> Pin 21 geschaltet
13:08:28.810 -> Pin 22 gesetzt
13:08:29.810 -> Pin 22 geschaltet
13:08:30.810 -> Pin 17 gesetzt
13:08:31.810 -> Pin 17 geschaltet
13:08:32.810 -> Pin 2 gesetzt
13:08:33.810 -> Pin 2 geschaltet
13:08:34.810 -> Pin 15 gesetzt
13:08:35.810 -> Pin 15 geschaltet
13:08:36.810 -> Pin 13 gesetzt
13:08:37.810 -> Pin 13 geschaltet
13:08:38.850 -> Pin 12Guru Meditation Error: Core  1 panic'ed (IllegalInstruction). Exception was unhandled.
13:08:38.850 -> Memory dump at 0x400d0f30: ffffffff ffffffff ffffffff
13:08:38.850 -> Core 1 register dump:
13:08:38.850 -> PC      : 0x400d0f34  PS      : 0x00060130  A0      : 0x800d1396  A1      : 0x3ffb1f80  
13:08:38.850 -> A2      : 0x3ffc02e4  A3      : 0x00000006  A4      : 0x3ffbebee  A5      : 0x3f400f1a  
13:08:38.850 -> A6      : 0x00000003  A7      : 0x00060823  A8      : 0x800d0be6  A9      : 0x3ffb1f60  
13:08:38.850 -> A10     : 0x3ffc02e4  A11     : 0x3f400f1f  A12     : 0x0000000a  A13     : 0x00000003  
13:08:38.890 -> A14     : 0x00000001  A15     : 0x00000000  SAR     : 0x0000001a  EXCCAUSE: 0x00000000  
13:08:38.890 -> EXCVADDR: 0x00000000  LBEG    : 0x400014fd  LEND    : 0x4000150d  LCOUNT  : 0xffffffff  
13:08:38.890 -> 
13:08:38.890 -> Backtrace: 0x400d0f34:0x3ffb1f80 0x400d1393:0x3ffb1fb0 0x40088215:0x3ffb1fd0
13:08:38.890 -> 
13:08:38.890 -> Rebooting...

ab und bootet neu.
Wenn ich aber diesen Code verwende

String inString = "";

void setup() {
  Serial.begin(115200);
  while (!Serial) {
    ;
  }
  Serial.println("\n\nString toInt():");
  Serial.println();
}

void loop() {
  while (Serial.available() > 0) {
    int inChar = Serial.read();
    if (isDigit(inChar)) {
      inString += (char)inChar;
    }
    if (inChar == '\n') {
      int i = inString.toInt();
      Serial.print("Value:");
      Serial.println(i);
      pinMode(i, OUTPUT);
      delay(1000);
      digitalWrite(i, HIGH);
      inString = "";
    }
  }
}

kommt es zu keinem Absturz.
Hat jemand eine Idee, woran das liegen könnte?

Viele Grüße
KN

PS: Die Pins 36-39 taugen offenbar nicht als Ausgänge.

karl_napp:
PS: Die Pins 36-39 taugen offenbar nicht als Ausgänge.

ESP32 Pinout Reference: Which GPIO pins should you use?

Das mit dem Feiertag kann ich nicht erwidern, da nicht bundeseinheitlich. Aber einen schönen Tag wünsche ich natürlich dennoch :slight_smile:

Hallo agmue,

danke für den Hinweis. Der Grund für meinen Post war allerdings das seltsame Verhalten des Boards, also dass beispielsweise Pin 12 im einen Fall gesetzt werden kann, es im anderen Fall aber zum Absturz kommt.

Manchmal hat es auch Vorteile, wenn man in Bayern wohnt :wink:

karl_napp:
Der Grund für meinen Post war allerdings das seltsame Verhalten des Boards, also dass beispielsweise Pin 12 im einen Fall gesetzt werden kann, es im anderen Fall aber zum Absturz kommt.

Das ist mir natürlich nicht entgangen, doch wenn ich nix weiß, halte ich (meistens) die Klappe ;D

Aber nun, versuche dies:

pinMode(pins[i], OUTPUT);
...
digitalWrite(pins[i], HIGH);

…und es fiel ihm wie Schuppen aus den Haaren.
Anfängerfehler.

Vielen Dank
KN