Eine Bibliothek für Arduino, um Projekte über WLAN mit Web -App oder Telnet -Client mit Druckbefehlen wie Serienmonitor zu debuggen.


Standardmäßig hat der Arduino nur eine Debug -Möglichkeit über den seriellen Port. Dies hat einige Nachteile:
Mit dem ESP8266 (NODEMCU) oder ESP32 haben wir jetzt Netzwerkkonnektivität (WLAN), die zum Streaming von Debugging-Informationen in Echtzeit verwendet werden können.
Diese Bibliothek ist gut für IoT -Projekte, Heimautomation, mobile Roboter (kann sie in Bewegung mit einem Kabel debuggen?) Oder andere WLAN -Projekte.
Tatsächlich wurde diese Bibliothek aus der Notwendigkeit geboren, ein IoT -Projekt der Heimautomatisierung zu debuggen. In diesem Projekt gab es ein zentrales Modul und drei Hilfsmodule, und diese waren weit voneinander entfernt. Einer war schwer zu erreichen, unter dem Dach des Hauses. Um dieses Projekt zu debuggen und den Austausch von Nachrichten in Echtzeit zu begleiten, ist es unmöglich, mit einem traditionellen Weg mit dem USB -Kabel zu tun.
Das MIP_esp8266_Library und mein ESP32 -WiFi -Roboter sind ein Beispiel für Projekte, bei denen Remotedebug verwendet wird. Siehe es in: mip_esp8266_library und eSplorer_v1
Remotedebug wird durch Client -Pufferung verbessert (ist der letzte Senden von <= 10 ms), um mysteriöse Verzögerungen bei der WLAN -Vernetzung auf ESP32- und ESP8266 -Boards zu vermeiden
Hinweis: Wenn Ihr Projekt WLAN nicht verwendet, können Sie meine andere Bibliothek, die Serialdebug -Bibliothek, verwenden, diese Bibliothek arbeitet mit einem Arduino -Board zusammen.
Hinweis II: Die REDOTTEBUG -Bibliothek ist jetzt nur noch in Espresssif -Boards, da ESP32 und ESP8266 bei Bedarf ein weiteres WLAN -Board ein Problem dazu hinzufügen, und wir werden feststellen, ob er den Port für Ihr Board erstellt hat.
Bild: In Remotedebugapp (Web App)

Bild: Im Telnet -Client

YouTube (remotedebug v2):
YouTube (3 Telnet -Verbindungen mit Remotedebug) V1:
Tragen Sie zu dieser Bibliotheksentwicklung bei, indem Sie ein Konto auf GitHub erstellen.
Bitte geben Sie einem Stern, wenn Sie diese Bibliothek nützlich finden, dies einem anderen Volk hilft, entdecken Sie sie auch.
Bitte fügen Sie ein Problem für Probleme oder Vorschläge hinzu.
Remotedebugapp Beta
Jetzt haben Sie ein weiteres Repository, RemotedEbugapp Es ist für lokale Kopie der Web -App im Internet. Es wird mit der neuesten Version der Web -App aktualisiert, nachdem es in Web Server veröffentlicht wurde: http://joaolopesf.net/Remottebugapp. Laden Sie es herunter, um es zu verwenden, wenn das Internet offline ist. Da es sich um eine lokale Kopie handelt, wird die App regelmäßig nach neuen Versionen suchen.
Eine HTML5 -Web -App, die zum Debuggen im Webbrowser verwendet werden kann, statt dem Telnet -Client, mit dem Web Socket komunikiert wird.
Jetzt remotedEbug v3 verfügt auch über einen Web -Socket -Server, um die Remotedebugapp -Verbindung zu unterstützen.
RemotedEbugapp ist in der Beta, wenn Sie Probleme oder Vorschläge haben, fügen Sie bitte Probleme hinzu.
Die Telnet -Verbindung bleibt, um dies zu wünschen, oder für Internet -Offline -Verwendungen.
Version 2.1.1
Version 2.0.0
Jetzt können ausgeleitetes Software -Debugger, das die serialdebug -Bibliothek hat, haben. Dies geschieht und installiert eine andere Bibliothek, die remotedebugger the Remotedebugger als Hinzufügen zu Remotedebug . Um dieses Addon zu unterstützen, sind die Änderungen in Remotedebug minimal, nur ein paar Rückrufe, die Projekte für Projekte, die keinen Debugger benötigen, zusätzlichen Overhead hinzugefügt werden. Weitere Informationen zugreifen Sie bitte auf das Remotedebugger Github -Repository.
Jetzt ausgestattet sein, hat ein neues Farbsystem, das mehr Farben verwendet, wie in Serialdebugapp gemacht
HINWEIS: Aufgrund der REFOTTEBUG -Bibliothek wird in das Arduino 1.5 -Format mit Ordner "SRC" migriert.
Version 1.5.*
In der Version 1.5.0 haben wir Debug* und Rdebug* Makros (siehe unten), die automatisch den Namen der Funktion, die aufgerufen wurde, und der Kern -ID (Core ID ist nur für ESP32) ausgedrückt.
Serialdebug ist besser als Arduino -Standard -Debugging von serial.print -Befehlen:
Der serielle. Print -Befehl Always wird über USB -Kabel debuggen oder nicht. Mit anderen Worten, die Debug -Befehle werden verarbeitet, wobei jemand in der Serie verbunden ist oder nicht.
Mit RemotedEBug wird alle Debug -Ausgaben nur verarbeitet, wenn jemand über Telnet- oder Web -App -Verbindung debuggiert.
Mit den Debug -Ressourcenstufen wird das Volumen der Nachrichten für höhere Ebenen reduziert. Verarbeiten Sie beispielsweise nur alle Nachrichten, wenn die Ebene am niedrigsten ist, die ausführliche,
RemotedEBug wird otimiert, um Gemeinkosten in CPU und Speicher zu reduzieren und die Client -Pufferungsfunktion einzuschließen.
Während der Entwicklung können wir viele Debug -Nachrichten einstellen ...
Aber mit Remotedebug können wir jeweils ein Niveau aufnehmen.
Für alle Nachrichten (mit Ausnahme von Stufen immer (Debuga) oder Fehler (Debuge) wird die Nachricht nur verarbeitet und gezeigt, wenn die Debug -Ebene gleich oder höher ist als die IT -Ebene
Remotedebug hat 6 Debug -Werte in der Reihenfolge der Priorität:
Immer zeigte:
Fehler : Kritische Fehler
Immer : Wichtige Nachrichten
Ein anderes Niveau (zeigte, ob das Niveau gleich oder höher ist wie das tatsächliche):
Warnung : Fehlerbedingungen, aber nicht kritisch
Info : Informationsnachrichten
Debug : zusätzliche Informationen
Ausführlich : Mehr Informationen als die üblichen
So können wir das Level in ausführlich ändern, um alle Nachrichten zu sehen. Oder um zu debuggen, um nur Debugg oder höhere Ebene zu sehen, usw.
Ist sehr gut, um eine Menge von Nachrichten zu reduzieren, die ein Projekt generieren kann, um zu debuggen.
RemotedEBug hat einen Konverter, der Ihre Arduino -Codes von serial.prints zu dieser Bibliothek migriert.
RemotedebugConverter
Auch wenn Sie dies manuell tun möchten, ist es sehr einfach. Bitte beachten Sie das Thema oben.
Ein einfaches Debugg:
debugV ( " * Run time: %02u:%02u:%02u (VERBOSE) " , mRunHours , mRunMinutes , mRunSeconds );Kann diese Ausgabe im seriellen Monitor erzeugen:
(V p:3065 loop C1) * Run time: 00:41:23 (VERBOSE)
Where: V: is the level
p: is a profiler time, elased, between this and previous debug
loop: is a function name, that executed this debug
C1: is a core that executed this debug (and a function of this) (only for ESP32)
The remaining is the message formatted (printf)
Für ESP32 ist die Kern -ID in jedem Debuggen sehr gut für Optimierer Multicore -Programmierung.
Zum Beispiel:
HILFE zeigen ( ? )
Ändern Sie die Ebene des Debugs ( V , D , I , W , E ), um weniger oder mehr Nachrichten zu zeigen.
Siehe Speicher ( m )
Setzen Sie die Karte zurück ( zurücksetzen )
Siehe unten über remotedebug -Befehle.
Sie können Ihre eigenen Befehle hinzufügen, sehen Sie sich bitte die Beispiele an
Wenn Ihr Projekt eine Installation von RETOTTEBUGGER hat, verfügen Sie über neue Befehle, z. B. eine Funktion aufrufen, Variablen sehen/ändern, ...
Jetzt renovedebug (Version> = 2.0.0) haben ein einfaches Software -Debuggger, das in Codes der Serialdebug -Bibliothek basiert.
Dies ist eine andere Bibliothek, die als Addon zu Remotedebug fungiert.
Bitte handeln Sie das Remotedebugger -Repository zu weiteren Informationen: Remotedebugger
For release your device, just uncomment DEBUG_DISABLED in your project
Done this, and no more debug processing.
And better for DEBUG_DISABLED, __RemoteDebug__ have ZERO overhead,
due is nothing of this is compiled.
Als Serialdebug hat jetzt REDOTTEBUG (V3) eine App, die Remotedebugapp, um im Webbrowser zu debuggen.
Diese App ist eine HTM5 -Web -App mit WebSocket, die mit dem Arduino -Board zusammengefasst ist.
Daraus verfügen remotedEbug v3 über einen Web -Socket -Server (kann deaktiviert werden). Es verwendete eine lokale Kopie der Arduinowebsockets -Bibliothek, die nicht im Arduino Library Manager ist.
Als große Webseite auf dem Webserver besteht die Lösung für Arduino darin, sie in einem Speicher zu speichern, wie SPIFFs. Aber nicht automatisch aktualisiert die neue Version in so gespeicherten Daten, diese Spiffs -Daten sind gut für ein Projekt, jedoch nicht für eine Bibliothek.
Auf diese Weise wird diese App nicht vom Board gespeichert und bedient. Stattdessen befindet sich die App im Web: http://joaolopesf.net/RemotteBugapp Hinweis: Dies verwendet nicht SSL (HTTPS), gebliebene Webserver -Socket auf Arduino, nicht unterstützt SSL (WSS). Nach dem Laden von Seiten wird jedoch der gesamte Datenverkehr im lokalen Netzwerk enthalten. Im Internet werden keine Daten aufgedeckt.
Der Remotedebugapp ist ein moderner HTML5 und braucht moderne Browser, um zu arbeiten. Internet Explorer 11 und Safari 10 sind Beispiele, die nicht unterstützt werden. Aber Sie können eine andere als Chrom, Kante, Firefox verwenden.
Die Web -App befindet sich in der Beta. Bitte fügen Sie ein Problem für Probleme oder Vorschläge hinzu.
Jetzt haben Sie ein weiteres Repository, RemotedEbugapp Es ist für lokale Kopie der Web -App im Internet. Es wird mit der neuesten Version der Web -App aktualisiert, nachdem es in Web Server veröffentlicht wurde: http://joaolopesf.net/Remottebugapp. Laden Sie es herunter, um es zu verwenden, wenn das Internet offline ist. Da es sich um eine lokale Kopie handelt, wird die App regelmäßig nach neuen Versionen suchen, denn Sie können eine neue Version herunterladen.
Das Telnet bleibt funktioniert, wenn Sie dies möchten, oder für Fehlschläge in der Web -App.
Telnet ist eine Standardmethode, um sich remote mit einem Server zu verbinden, und wird auf allen Betriebssystemen (Windows, Mac, Linux ...) unterstützt.
MacOSX und Linux haben einen nativen Telnet -Client.
Für Windows ist ein typischer Telnet -Client der Kitt : Putty.
Machen Sie ein gutes Werkzeug für Handys: den Fing , finden Sie ihn in Ihrem Mobilfaden. Die Anzeige aller Geräte im lokalen Netzwerk (WLAN), die angezeigten Ports geöffnet und können auch den Telnet -Client ausführen (externe App)
RemotedEBug richtet einen Telnet-Server ein, der jedem Telnet-Client anhört, der eine Verbindung herstellen möchte. Nach der Verbindung wird die Protokollierung an den Telnet -Client gestreamt.
RemotedEBug ist sehr einfach zu verwenden. Nach einigen Zeilen des Initialisierungscode können Sie die bekannten "Druck" -Fandte verwenden, um Ihre Protokollierung an den Remote-Client zu streamen.
Remotedebug unterstützt die Filterung der Protokollierung anhand der Debug -Levels :
Zeigen Sie nur für die tatsächliche Debug -Ebene:
HINWEIS: Diese Ebenen befinden sich in der Reihenfolge der meisten Loggen-> am wenigsten Loggen.
Oder für immer Show (nicht von der tatsächlichen Debug -Ebene abhängt):
Hinweis: Alle Debugs werden verarbeitet und nur dann gezeigt, wenn eine Client -Verbindung hergestellt wird.
Der Telnet -Client oder die Web -App kann die Debug -Ebene festlegen, indem einige einfache Befehle eingeben.
Remotedebug enthält einen einfachen Profiler. Es kann durch den angeschlossenen Client (Telnet oder Web App) oder den Arduino -Code selbst aktiviert werden.
Wenn es aktiviert ist, werden die Zeit zwischen 2 Debug -Anweisungen angezeigt, wobei unterschiedliche Farben abhängig von der verstrichenen Zeit verwendet werden.
Ein typisches Beispiel wäre, die Protokollierung kurz vor und nach einer Funktion einzufügen, nach der Sie sehen können, wie viel der in der Funktion ausgegeben wird.
REFOTTEBUG ist so konzipiert, dass minimale Overheads (verbunden oder nicht) und nur Prozessdebuggen verarbeitet werden, wenn eine Client (Telnet oder Web -App) angeschlossen ist.
RemotedEBug unterstützt benutzerdefinierte Befehle, die in den Client (Telnet oder Web -App) eingegeben werden können. Diese auslösen die Ausführung einer benutzerdefinierten Funktion im Arduino -Code. Zum Beispiel kann dies verwendet werden, um einen Status auf Anfrage des Kunden zurückzusenden.
Die aktuelle Version von RemotedEBug enthält noch keine verschlüsselte Authentifizierung, nur einfacher Text und ist nur für die Entwicklung vorgesehen und nicht für die Produktion/Veröffentlichung verwendet.
Zukünftige Versionen, sofern möglich, werden eine sichere Möglichkeit zur Authentifizierung und weitere Tests zur Unterstützung der Produktionsumgebungen enthalten.
- An app to RemoteDebug like SerialDebug have.
- Http page to begin/stop the telnet server or websocket server.
- Authentication as telnet support (kerberos, etc.) to support production environment
Laden Sie dieses Repository einfach herunter oder klonen Sie.
Oder für Arduino IDE können Sie den Bibliotheksmanager verwenden, um die Bibliothek zu installieren und zu aktualisieren.
Für die Installationshilfe klicken Sie bitte darauf:
Für eine andere IDE, oder nicht den Bibliotheksmanager von Arduino IDE, schlage ich vor, dass Sie eine Github -Desktop -App zum Klonen verwenden.
Bitte öffnen Sie die Projekte im Beispiel -Ordner, um zu sehen, dass es funktioniert.
# include " RemoteDebug.h " // https://github.com/JoaoLopesF/RemoteDebugRemotedebug Debugug;
In der Setup -Funktion nach WLAN -Initialisierung
// Initialize the server (telnet or web socket) of RemoteDebug
Debug.begin(HOST_NAME);
// OR
Debug.begin(HOST_NAME, startingDebugLevel);
// Options
Debug.setResetCmdEnabled( true ); // Enable the reset command
// Debug.showProfiler(true); // To show profiler - time between messages of Debug
Hinweis: Um den Debugger von Remotedebugger zu aktivieren, bitte dieses Github -Repository: Remotedebugger
Im Schwanz der Schleifenfunktion
// Remote debug over WiFi
Debug.handle();
// Or
debugHandle (); // Equal to SerialDebug
An jedem Ort Ihres Codes:
# ifndef DEBUG_DISABLED
if (Debug.isActive(Debug.<level>)) {
Debug. printf ( " bla bla bla: %d %s " , number, str); // OR
Debug. printf ( " bla bla bla: %d %s " , number, str. c_str ()); // Note: if type is String need c_str() // OR
Debug. println ( " bla bla bla 2 ln " );
Debug. printf ( " float: %f n " , value); // Not works in ESP8266 :-(
// Note: to show floats with printf (ESP8266 only),
// you can use my ArduinoUtil library -> https://github.com/JoaoLopesF/ArduinoUtil
Debug. printf ( " float: %s n " , Util. formatFloat (value, 0 , 5 ). c_str ());
}
# endifHINWEIS: Mit IsActive benötigen Sie den Code mit Debug_Disable vorkompilierter Zustand umgeben, um zu vermeiden, dass er für die Produktion/Release kompiliert wird
Oder kurzer Weg (gleich Serialdebug) (bevorzugt, wenn nur ein Debuggen zum Zeitpunkt):
debugA ( " This is a any (always showed) - var %d " , var);
debugV ( " This is a verbose - var %d " , var);
debugD ( " This is a debug - var %d " , var);
debugI ( " This is a information - var %d " , var);
debugW ( " This is a warning - var %d " , var);
debugE ( " This is a error - var %d " , var);
debugV ( " This is a println " );Oder wenn Ihr Projekt mehrere serielle. Print -Befehle verwendet, um beispielsweise eine einzelne Debug -Nachricht zu generieren:
Serial.print( " a = " );
Serial.print(a);
Serial.print( " b = " );
Serial.print(b);
Serial.print( " c = " );
Serial.println(c);kann RDEBUG* Makros verwenden:
rdebugV ( " a = " );
rdebugV (a);
rdebugV ( " b = " );
rdebugV (b);
rdebugV ( " c = " );
rdebugVln (c);Hinweis: In Zukunft schlage ich vor, dass Sie dies in einen einzelnen Debug -Befehl migrieren:
debugV (a = %d b = %d c = %d " , a, b, c);Ein Beispiel für die Verwendung von Debug -Ebenen: (Angenommen, die Daten sind viele Zeichen)
if (Debug.isActive(Debug.VERBOSE)) { // Debug message long
Debug. printf ( " routine: data received: %s n " , data. c_str ()); // Note: if type is String need c_str()
} else if (Debug.isActive(Debug.DEBUG)) { // Debug message short
Debug. printf ( " routine: data received: %s ... n " , data. substring ( 0 , 20 ). c_str ()); // %.20s not working :-|
}Ab Version 1.5.0 setzen Debugg -Makros (Debug* und RDebug*) automatisch den Namen der Funktion, die das Makro bezeichnete, und der Kern -ID (nur für ESP32).
Also:
void foo () {
uint8_t var = 1 ;
debugV ( " this is a debug - var %u " , var);
}
It will show in client (telnet or web app):
(V p:^0000ms) (foo)(C1) this is a debug - var 1
Where:
V -> verbose
p -> profiler time
(foo) -> this is a function name that calls the debug macro
(C1) -> It is running it Core 1 (only for ESP32)
Ein Beispiel für die Verwendung von Debugg mit seriell aktivierter
Useful to see messages if setup or
in cause the ESP8266/ESP32 is rebooting (client connection stop before received all messages)
Only for this purposes I suggest it
// Setup after Debug.begin
Debug.setSerialEnabled( true ); // All messages too send to serial too, and can be see in serial monitorFür die Reduzierung von Gemeinkosten wird der Client (Telnet oder Web -App) getrennt, falls dies nicht aktiv ist.
- Please press enter or any key if you need keep the connection
- The default is 5 minutes (You can change it in RemoteDebug.h)
- You can use mDNS to register each node with different name, it helps to connect without know the IP.
Bitte vergessen Sie nicht zu verwenden, wenn Klausel mit Debug.isaktiv (wenn Sie Debug -Makros nicht verwenden)
---> This is very important to reduce overheads and work of debug levels
In den grundlegenden oder fortgeschrittenen Beispielen finden Sie unter Verwendung der Verwendung
In Advanced Sample habe ich die Wifimanager -Bibliothek, Arduinoota und MDNs verwendet, siehe es.
- Ajustment on debugA macro, thanks @jetpax and @cmidgley to add this issue.
- All public configurations (#defines) have moved to RemoteDebugCfg.h, to facilitate changes for anybody.
- Changed examples, with warnings on change any #define in project,
with workarounds if it not work. (thanks to @22MarioZ for added this issue)
- Adjustments if web socket is disabled
- Adjustments in examples, added one for debugger
- Adjustments in silente mode
- Commands from RemoteDebugApp now is treated
- Adjusts to RemoteDebugger support connection by web sockets
- If not disabled, add a web socket server to comunicate with RemoteDebugApp (HTML5 web app)
- The standard telnet still working, to debug with internet offline
- Ajustment on debugA macro, thanks @jetpax to add this issue
- Add empty rprint* macros, if debug is disabled
- Create option DEBUG_DISABLE_AUTO_FUNC
- Create macros to be used for code converter: rprint and rprintln
RemoteDebug now have an code converters to help migrate codes
- Create precompiler DEBUG_DISABLED to compile for production/release,
equal that have in SerialDebug
- Adjustments in examples
- Adjustments for the debugger: it still disable until dbg command, equal to SerialDebug
- The callback will to be called before print debug messages now
- And only if debugger is enabled in RemoteDebugger (command dbg)
- Changed handle debugger logic
- Added support to RemoteDebug addon library: the RemoteDebugger, an simple software debugger, based on SerialDebug
- New color system
- Bug -> sometimes the command is process twice
- Workaround -> check time
- New macros to compatibility with SerialDebug (can use RemoteDebug or SerialDebug) thanks to @phrxmd
- Fixed bug for MAX_TIME_INACTIVE, thanks to @achuchev to add this issue
- Adjustments based on pull request from @jeroenst (to allow serial output with telnet password and setPassword method)
- Serial output is now not allowed if telnet password is enabled
- Few adjustments
- Few adjustment in write logic
- Serial output adjustments (due bug in password logic)
- Correct rdebug macro (thanks @stritti)
- New silent mode (command s)
- Auto function name and ESP32 core id for rdebug* macros
- begin method have a option for port number
- Few adjustments
- Added new rdebug?ln to put auto new line
- Simple text password request feature (disabled by default)
Notes:
It is very simple feature, only text, no cryptography,
and the password is echoed in screen (I not discovery yet how disable it)
telnet use advanced authentication (kerberos, etc.)
Such as now RemoteDebug is not for production (releases),
this kind of authentication will not be done now.
- Adjustments in precompiler macros
- Bug in write with latest ESP8266 SDK
- Port number can be modified in project Arduino (.ino file)
- Few adjustments as ESP32 includes
- Adjustments, as avoid ESP32 include errors
- Telnet port of server can be modified by project
Just put it in your .ino, before the include:
- Shortcuts and client buffering to avoid mysterious delay of ESP networking
- Adjustments and now runs in Esp32 too.
- Adjustments and improvements from Beta versions.
New features:
- Filter
- Colors
- Support to Windows telnet client
- First Beta
- Sometimes (rarely) the connection over telnet becomes very slow.
Especially right after uploading firmware.
Reset command in telnet connection or turn off/on can be resolve it.
But I need find why it occurs
First thanks a lot for Igrr for bring to us the Arduino ESP8266 and to Espressif to Arduino ESP32
Thanks to Links2004 for a good web server socket, used for web app connection.
For the logo: thanks to a freepik and pngtree sites for free icons that have in logo
Resources:
- Example of TelnetServer code in http://www.rudiswiki.de/wiki9/WiFiTelnetServer
- arduinoWebSockets library in https://github.com/Links2004/arduinoWebSockets
Drücken Sie in dieser Datei ab 2019-03-03 den Schalter in dieser Datei: