Une bibliothèque pour Arduino pour déboguer les projets sur le WiFi, avec une application Web ou un client Telnet, avec des commandes d'impression comme Serial Monitor.


Par défaut, l'Arduino n'a que la possibilité de débogage via le port série. Cela a quelques inconvénients:
Avec l'ESP8266 (NODEMCU) ou ESP32, nous avons maintenant une connectivité réseau (WiFi) qui peut être utilisée pour le diffusion d'informations de débogage en temps réel.
Cette bibliothèque est bonne pour les projets IoT, la domotique, les robots mobiles (peut le déboguer dans Moviment avec un câble?) Ou un autre projets WiFi.
En fait, cette bibliothèque est née d'un besoin de déboguer un projet IoT de domotique. Dans ce projet, il y avait un module central et trois modules auxiliaires, et ceux-ci étaient loin les uns des autres. L'un était difficile à atteindre, sous le toit de la maison. Pour déboguer ce projet, accompagnant l'échange de messages en temps réel, est impossible à faire avec la manière traditionnelle, par câble USB.
Le MIP_ESP8266_LIBRARY et mon robot WiFi ESP32 sont des exemples de projets qui utilisent RemotedeBug . Voir dans: MIP_ESP8266_LIBRARY ET ESPLORER_V1
Remotedebug est amélioré avec la mise en mémoire tampon du client (le dernier envoi est <= 10m
Remarque: Si votre projet n'utilise pas le WiFi, vous pouvez utiliser ma autre bibliothèque, la bibliothèque SerialDebug , cette bibliothèque fonctionne avec n'importe quelle carte Arduino.
Remarque II: La bibliothèque Remotedebug est désormais uniquement aux cartes ESPRESSIF, comme ESP32 et ESP8266, si besoin de autres planches WiFi, veuillez ajouter un problème à ce sujet et nous verrons si cela est possible, ce qui est possible le port pour votre carte.
Image: dans RemotedeBugApp (application Web)

Image: dans Telnet Client

YouTube (Remotedebug v2):
YouTube (3 connexions Telnet avec RemotedeBug) v1:
Contribuer à ce développement de bibliothèque en créant un compte sur GitHub.
Veuillez donner une étoile, si vous trouvez cette bibliothèque utile, cette aide à un autre, découvrez-la aussi.
Veuillez ajouter un problème pour les problèmes ou la suggestion.
Remotedebugapp Beta
Ayez maintenant un autre référentiel, RemotedeBugApp, c'est pour la copie locale de l'application Web sur Internet. Il est mis à jour avec la dernière version de l'application Web, après sa publication dans le serveur Web: http://joaolopesf.net/remotedebugapp. Téléchargez-le, pour une utilisation quand Internet est hors ligne. Comme il s'agit d'une copie locale, l'application vérifiera périodiquement les nouvelles versions.
Une application Web HTML5 à utiliser pour le débogage dans le navigateur Web, plutôt Telnet Client, qui utilise la prise Web pour communiquer.
Maintenant, RemotedeBug V3 a également un serveur de socket Web, pour prendre en charge la connexion RemotedeBugApp.
Remotedebugapp est en version bêta, si vous avez des problèmes ou des suggestions, veuillez ajouter un problème à ce sujet.
La connexion Telnet demeure, à tous les besoins, ou aux utilisations hors ligne Internet.
Version 2.1.1
Version 2.0.0
Désormais, Remotededebug peut avoir le même débogueur logiciel simple, que la bibliothèque SerialDebug a. Ceci est fait, en installant une autre bibliothèque, le RemotedeBugger que le Remotedebugger agit comme un ajout à Remotedebug . Pour prendre en charge cet addon, les modifications de Remotedebug , sont minimales, juste quelques rappels qu'il est effectué pour ne pas ajouter de frais généraux supplémentaires aux projets qui n'ont pas besoin d'un débogueur. Pour plus d'informations, veuillez accéder au référentiel GitHub RemotedeBugger .
Maintenant, RemoteDeBug a un nouveau système de couleurs, en utilisant plus de couleurs, comme le fait dans SerialDebugApp
Remarque: En raison de la bibliothèque Remotedebug , est migrée vers le format Arduino 1.5, avec le dossier "SRC", veuillez supprimer et réinstaller la bibliothèque pour éviter la duplication des fichiers de sources RemotedeBug.
Version 1.5. *
Dans la version 1.5.0, nous avons Debug * et Rdebug * Macros (voir ci-dessous), qui mettent automatiquement, le nom de la fonction qui a appelé et Core ID (Core ID est uniquement pour ESP32)
SerialDebug est meilleur que le débogage par défaut d'Arduino par les commandes Serial.print:
Étant ou ne pas déboguer via le câble USB, la commande Serial.Print est toujours traitée, gaspillez du temps de processeur sur le microcontrôleur. En d'autres termes, les commandes de débogage sont traitées, avec quelqu'un connecté en série ou non.
Avec RemoteDeBug , toutes les sorties de débogage sont traitées uniquement s'il existe une personne débogue via Telnet ou une connexion d'application Web.
Et avec les niveaux de ressource de débogage, le volume affiché des messages est réduit pour des niveaux plus élevés. Par exemple, ne traitez que tous les messages, si le niveau est le plus bas, le verbeux,
RemotedeBug est otitisé pour réduire les frais généraux, dans le CPU et la mémoire et inclure la fonction tampon du client.
Pendant le développement, nous pouvons mettre beaucoup de messages de débogage ...
Mais avec Remotededebug , nous pouvons mettre un niveau dans chacun.
Pour tous les messages (sauf les niveaux (Debuga) ou l'erreur (Debuge), le message unique
Remotedebug a 6 niveaux de débogage, par ordre de priorité:
A toujours montré:
Erreur : erreurs critiques
Toujours : messages importants
Un autre niveau (a montré si le niveau est égal ou supérieur à celui réel):
Avertissement : conditions d'erreur mais pas critiques
Info : Messages d'information
Débogage : informations supplémentaires
Verbose : plus d'informations que l'habitude
Nous pouvons donc changer le niveau en verbose, pour voir tous les messages. Ou pour déboguer pour voir uniquement le débogage ou le niveau supérieur, etc.
Est très bon pour réduire une quantité de messages qu'un projet peut générer, pour aider à déboguer.
Remotedebug a un convertisseur pour aider à migrer vos codes Arduino, de Serial.prints à cette bibliothèque.
RemotedebugConverter
Même si vous voulez le faire manuellement, c'est très simple. Veuillez consulter le sujet en utilisant ci-dessus.
Un simple débogage:
debugV ( " * Run time: %02u:%02u:%02u (VERBOSE) " , mRunHours , mRunMinutes , mRunSeconds );Peut générer cette sortie dans le moniteur en série:
(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)
Pour ESP32, l'ID de base dans chaque débogage est très bon à optimiser la programmation multicore.
Par exemple:
Montrer de l'aide ( ? )
Changez le niveau de débogage ( V , D , I , W , E ), pour afficher moins ou plus de messages.
Voir la mémoire ( M )
Réinitialiser la carte ( réinitialiser )
Voir sur les commandes Remotedebug ci-dessous.
Vous pouvez ajouter vos propres commandes, voir les exemples s'il vous plaît
Si votre projet est installé Remotededebugger , ayez de nouvelles commandes, par exemple, appelez une fonction, voir / modifier les variables, ...
Maintenant, RemoteDeBug (version> = 2.0.0), ont un débogueur logiciel simple, basé sur des codes de la bibliothèque SerialDebug.
Il s'agit d'une autre bibliothèque, qui agit comme un addon à Remotededebug .
Veuillez accélérer le référentiel Remotedebugger à plus d'informations: 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.
Comme SerialDebug, maintenant Remotedebug (V3), a une application, le RemotedebugApp, pour déboguer dans le navigateur Web.
Cette application est une application Web HTM5, avec WebSocket pour communiquer la carte Arduino.
Pour cela, RemotedeBug V3 a un serveur de socket Web (peut être désactivé). Il a utilisé une copie locale de la bibliothèque Arduinowebsockets, en raison de son gestionnaire de bibliothèque Arduino.
En tant que grande page Web sur le serveur Web, la solution pour Arduino est de l'enregistrer dans un stockage, comme Spiffs. Mais ne pas avoir automatiquement mis à jour la nouvelle version dans les données enregistrées de cette façon, ces données SPIFFS sont bonnes pour un projet mais pas pour une bibliothèque.
En raison, cette application n'est pas stockée et desservie par le conseil d'administration, mais l'application est dans le Web: http://joaolopesf.net/remotedebugApp Remarque: Ce n'est pas utilise SSL (HTTPS), socket de serveur Web dû sur Arduino, ne prend pas en charge SSL (WSS). Mais après le chargement de la page, tout le trafic est dans le réseau local, aucune donnée n'est exposée sur Internet.
Le Remotedebugapp est un HTML5 moderne et a besoin d'un navigateur moderne pour travailler. Internet Explorer 11 et Safari 10 sont des exemples qui ne sont pas pris en charge. Mais vous pouvez utiliser des autres, comme Chrome, Edge, Firefox.
L'application Web est en version bêta, veuillez ajouter un problème, pour des problèmes ou des suggestions.
Ayez maintenant un autre référentiel, RemotedeBugApp, c'est pour la copie locale de l'application Web sur Internet. Il est mis à jour avec la dernière version de l'application Web, après sa publication dans le serveur Web: http://joaolopesf.net/remotedebugapp. Téléchargez-le, pour une utilisation quand Internet est hors ligne. Comme il s'agit d'une copie locale, l'application vérifiera périodiquement les nouvelles versions, car vous pouvez télécharger une nouvelle version.
Le telnet reste le travail, pour quand vous voulez ou pour échouer sur l'application Web.
Telnet est un moyen standard de se connecter à distance à un serveur et est pris en charge sur tous les systèmes d'exploitation (Windows, Mac, Linux ...).
MacOSX et Linux ont un client Telnet natif.
Pour Windows, un client Telnet typique est le mastic : mastic.
Ayez un bon outil pour les mobiles: le Fing , veuillez le trouver dans votre boutique mobile. Il affiche tous les appareils dans le réseau local (WiFi), affiche des ports ouverts et peut également exécuter le client Telnet (application externe)
RemotedeBug met en place un serveur Telnet qui écoute tout client Telnet qui souhaite se connecter. Après la connexion, la journalisation est diffusée au client Telnet.
RemoteDeBug est très simple à utiliser, après quelques lignes de code d'initialisation, vous pouvez utiliser les commandes "Print" bien connues pour diffuser votre journalisation vers le client distant.
Remotedebug prend en charge le filtrage de l'exploitation forestière en fonction des niveaux de débogage :
Montrez uniquement le niveau de débogage réel:
Remarque: ces niveaux sont dans l'ordre de la plupart du loging -> le moins du loging.
Ou pour toujours afficher (ne dépend pas du niveau de débogage réel):
Remarque: Tous les débogages sont traités et montrés uniquement si l'on a une connexion client.
Le client Telnet ou l'application Web peut définir le niveau de débogage en tapant quelques commandes simples.
Remotedebug comprend un profil simple. Il peut être activé par le client connecté (Telnet ou Application Web) ou le code Arduino lui-même.
Lorsqu'il est activé, il montre le temps entre 2 instructions de débogage, en utilisant différentes couleurs en fonction du temps écoulé.
Un exemple typique serait d'insérer la journalisation juste avant et après une fonction, après quoi vous pouvez voir combien il est dépensé dans la fonction.
Remotedebug est conçu pour donner des frais généraux minimaux (connectés ou non) et uniquement des débogages de traitement, s'il y a un client (Telnet ou application Web) connecté.
RemotedeBug prend en charge les commandes personnalisées qui peuvent être entrées dans le client (Telnet ou Application Web). Ceux-ci déclenchent l'exécution d'une fonction personnalisée dans le code Arduino. Par exemple, cela peut être utilisé pour renvoyer un statut sur demande du client.
La version actuelle de Remotededebug n'inclut pas encore aucune authentification cryptée, uniquement du texte brut et est destinée uniquement au développement, et non dans la production / version.
Les versions futures, si possible, comprendront un moyen sécurisé pour l'authentification et d'autres tests pour prendre en charge les environnements de production.
- 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
Il suffit de télécharger ou de cloner ce référentiel.
Ou pour Arduino IDE, vous pouvez utiliser le gestionnaire de bibliothèque pour installer et mettre à jour la bibliothèque.
Pour l'installation d'aide, veuillez cliquer sur ceci:
Pour un autre IDE, ou ne pas utiliser le gestionnaire de bibliothèque d'Arduino IDE, je vous suggère d'utiliser une application GitHub Desktop à clone, cela aide à rester à jour.
Veuillez ouvrir les projets dans un exemple de dossier, pour le voir fonctionner.
# include " RemoteDebug.h " // https://github.com/JoaoLopesF/RemoteDebugDebug Remotedebug;
Dans la fonction de configuration après l'initialisation WiFi
// 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
Remarque: Pour activer le débogueur, par Remotedebugger, veuillez accéder à ce référentiel github: Remotedebugger
Dans la fonction de la queue de boucle
// Remote debug over WiFi
Debug.handle();
// Or
debugHandle (); // Equal to SerialDebug
Dans n'importe quel endroit de votre code:
# 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 ());
}
# endifRemarque: En utilisant Isactive, vous devez entourer le code de Debug_Disable précompilé, pour éviter de le compiler pour la production / libération
Ou courte voie (égal à serialdebug) (préféré si un seul débogage au temps):
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 " );Ou si votre projet utilise plusieurs commandes Serial.print pour générer un seul message de débogage par exemple:
Serial.print( " a = " );
Serial.print(a);
Serial.print( " b = " );
Serial.print(b);
Serial.print( " c = " );
Serial.println(c);peut être utilisé rdebug * macros:
rdebugV ( " a = " );
rdebugV (a);
rdebugV ( " b = " );
rdebugV (b);
rdebugV ( " c = " );
rdebugVln (c);Remarque: à l'avenir, je vous suggère de migrer cela vers une seule commande de débogage:
debugV (a = %d b = %d c = %d " , a, b, c);Un exemple d'utilisation des niveaux de débogage: (en supposant que les données sont beaucoup de caractères)
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 :-|
}À partir de la version 1.5.0, Debug Macros (Debug * et Rdebug *), mettez automatiquement le nom de la fonction qui appelait la macro et Core ID (ID de base uniquement pour ESP32).
Donc:
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)
Un exemple de débogage d'utilisation avec SERIAL activé
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 monitorPour réduire les frais généraux, RemotedeBug est déconnecté le client (Telnet ou Application Web), s'il n'est pas actif.
- 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.
N'oubliez pas d'utiliser si la clause avec Debug.isactive (sinon n'utilisant pas de macros de débogage)
---> This is very important to reduce overheads and work of debug levels
Veuillez consulter les échantillons, de base ou avancés, pour apprendre à utiliser
Dans un échantillon avancé, j'ai utilisé la bibliothèque Wifimanager, Arduinoota et MDNS, veuillez le voir.
- 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
Appuyez sur COMPTER sur ce fichier, à partir de 2019-03-03: