Also der ESP32 besitzt GPIOs von 0 bis 39. Um das Ganze (GPIOs und Eingänge vom PE) uniform zu behandeln, habe ich jedoch festgelegt, dass innerhalb von 100 bis 115 die PE-Pins liegen. Das Übersetzen von 100 bis 115 macht Port.cpp. Wobei natürlich aber klar sein muss, dass ein Pin eines Port-Expanders bei weitem nicht so viel kann, wie ein GPIO. Aber für sowas wie Buttons (oder IRQs) ist es natürlich kein Problem.
Setzt man nun den GPIO für PN5180.IRQ auf z.B. 32, dann „sagt“ ESPuino dem ESP32: Ok, also wenn du in Deepsleep gehst, dann höre auf GPIO32 und wenn da was passiert, dann wache auf. Es gibt dann also einen GPIO zum Aufwecken per Taster (z.B. 36) und noch einen per PN5180.IRQ (32). Und im Code kann ich natürlich erkennen, ob das 32 oder 36 war. Und wenn es dann 32 ist, dann kann ich schauen, ob es ein Falschalarm war oder nicht.
Wickelt man das über den PE ab, dann ist das anders. D.h. alle Pins sind per Default Eingänge (Ausgänge muss man aktiv konfigurieren). Und ändert sich der Spannungsregler von HI auf LO, egal bei welchem Eingang, dann wirft der PE einen Interrupt, der dann von GPIO36 ausgelesen wird. Welcher Pin jedoch für den IRQ letztlich verantwortlich war, das weißt du nicht. Und das sorgt eben dafür, dass alle Eingänge gleichberechtigt den ESP32 aufwecken lassen können. Und deswegen kann man sich das Eintragen des PN5180.IRQ im Settings-File beim Port-Expander (nur dort!) auch sparen (schadet aber auch nicht), weil es wird eh nicht ausgelesen.
ESPuino verwendet, Stand jetzt, ESP32-Arduino 1.0.6. Wenn man auf v2 gehen will, dann muss man das aktiv in platformio.ini umstellen.