Taster
Für die Abfrage der Taste(n) an den Türsprechstellen habe ich die Button2-Library aus den PlatformIO-Bibliotheken verwendet.
Die Button2-Library benutzt für verschiedene Tastendrücke verschiedene Handler: Single, Double und Long.
Zuerst habe ich nur den Single-Handler angelegt. Damit hat es aber nicht funktioniert. Schuld war wohl das provisorische Auslösen mit einem Draht. Deswegen habe ich auch noch den Double- und Long-Handler angelegt und von dort auf den selben Code verwiesen.
Webserver
Durch Doorbell32 inspiriert, habe ich auch einen Webserver benutzt. Dieser zeigt die letzten 10 Tastendrücke als einfachen Text an.
Der Code für diese History-Funktion ist am Anfang immer wieder abgestürzt. Deswegen habe ich zum Debuggen den Codeausschnitt in ein C-Projekt für Linux umgewandelt. Dort entfällt das Programmieren des ESP32 und der Debugger läuft auch direkt.
Später habe ich auch eine Erkennung des Abhebens (SIP 200 OK) und Auflegens (BYE) eingebaut. Dies wird jetzt auch bei jedem Tastdruck angezeigt.
OTA-Update
Vom Anbieter der Webserver-Library gibt es auch eine OTA-Library. Diese habe ich ausprobiert und es hat auf Anhieb funktioniert.
NTP
Die History-Funktion soll auch die Uhrzeit der Tastendrücke anzeigen. Um das zu realisieren, holt sich der ESP32 die Uhrzeit von einem NTP-Server.
Probleme
Klingeln funktioniert nur 1x: Schuld war der nicht ablaufende SIP-Busy-Timer.
Abhilfe: Versetzen des Loop-Befehls für den Busy-Timer an den Anfang der Loop-Schleife der SIP-Bibliothek.
ESP32 legt nach 15 Sekunden auf. Ursache: Timeout war auf 15 Sekunden gesetzt. Abhilfe: Timeout auf 60 Sekunden geändert.
Kamera bringt beim Anfordern des Framebuffers mit esp_camera_fb_get() Fehler.
Ursache 1: GPIO-0 wurde von mir benutzt, wird aber von Kamera benötigt.
Ursache 2: Wenn GPIO-16 benutzt wird, geht es auch nicht. Die Verwendung ist aber im Schaltplan nicht ersichtlich.