Una biblioteca para Arduino para depurar proyectos a través de WiFi, con aplicación web o cliente Telnet, con comandos de impresión como Serial Monitor.


Por defecto, el Arduino solo tiene una posibilidad de depuración a través del puerto serie. Esto tiene algunas desventajas:
Con el ESP8266 (NodeMCU) o ESP32 ahora tenemos conectividad de red (WIFI) que puede usarse para transmitir información de depuración en tiempo real.
Esta biblioteca es buena para proyectos IoT, automatización del hogar, robots móviles (¿pueden depurarla en movimientos con un cable?) U otros proyectos WiFi.
De hecho, esta biblioteca nació de la necesidad de depurar un proyecto IoT de automatización del hogar. En este proyecto había un módulo central y tres módulos auxiliares, y estos estaban lejos el uno del otro. Uno era difícil de alcanzar, bajo el techo de la casa. Depurar este proyecto, que acompaña al intercambio de mensajes en tiempo real, es imposible de hacer con la forma tradicional, por cable USB.
El MIP_ESP8266_Library y mi robot WiFi ESP32 son un ejemplo de proyectos que usan remotedEbug . Véalo en: MIP_ESP8266_Library y Esplorer_V1
RemotedEbug se mejora con el amortiguación del cliente (el último envío es <= 10ms), para evitar retrasos misteriosos de redes WiFi en las tablas ESP32 y ESP8266
Nota: Si su proyecto no usa WiFi, puede usar mi otra biblioteca, la biblioteca SeriaDebug , esta biblioteca funciona con cualquier tablero de Arduino.
Nota II: la biblioteca remotedebug ahora es solo para los tableros de espressif, como ESP32 y ESP8266, si es necesario para otras tablas WiFi, agregue un problema sobre esto y veremos si es posible hacer el puerto para su tablero.
Imagen: en remotedeBugApp (aplicación web)

Imagen: en el cliente de Telnet

YouTube (remotedebug v2):
YouTube (3 conexiones de Telnet con remotedebug) V1:
Contribuir a este desarrollo de la biblioteca creando una cuenta en GitHub.
Por favor, entregue una estrella, si encuentra útil esta biblioteca, esto ayuda a otra gente, descubrirla también.
Agregue un problema para problemas o sugerencias.
Remotedebugapp beta
Ahora tenga otro repositorio, remotedebugapp, es para una copia local de la aplicación web en Internet. Se actualiza con la última versión de la aplicación web, después de que se publica en el servidor web: http://joaolopesf.net/remotedebugapp. Descárguelo para usar cuando Internet está fuera de línea. Como es una copia local, la aplicación verificará las nuevas versiones periódicamente.
Una aplicación web HTML5 para usar para la depuración en el navegador web, en su lugar, Telnet Client, que usa el socket web para comunicarse.
Ahora remotedebug v3 también tiene un servidor de socket web, para admitir la conexión remotedebugApp.
RemotedebugApp está en beta, si tiene algún problema o sugerencia, agregue un problema sobre esto.
La conexión de Telnet permanece, para cualquier deseo, o para usos fuera de línea de Internet.
Versión 2.1.1
Versión 2.0.0
Ahora Remotedebug puede tener el mismo depurador de software simple, que tiene la biblioteca SeriaDebug . Esto está hecho, instalando otra biblioteca, el remotedebugger el remotedebugger actúa como un complemento a remotededebug . Para admitir este complemento, los cambios en remotedebug son mínimos, solo unas pocas devoluciones de llamada que se realizan para no agregar sobrecarga adicional a los proyectos que no necesitan un depurador. Para más información, acceda al RemotedEbugger Github Reposyory.
Ahora remotedebug tiene un nuevo sistema de color, que usa más colores, como se hace en SerialldeBugApp
Nota: Debido a la biblioteca remotedebug , se migra al formato Arduino 1.5, con la carpeta "SRC", elimine y reinstale la biblioteca para evitar la duplicación de los archivos de fuentes remotedebug.
Versión 1.5.*
En la versión 1.5.0, tenemos Macros de depuración* y rdebug* (ver más abajo), que se pone automáticamente, el nombre de la función que llamó e ID de núcleo (Core ID es solo para ESP32)
SeriaDebug es mejor que la depuración predeterminada de Arduino por serial.print comandos:
Ser o no depurar a través del cable USB, se procesa el comando Serial.print. En otras palabras, los comandos de depuración se procesan, con alguien conectado en la serie o no.
Con remotedebug , toda la salida de depuración se procesa solo si existe, alguien depuración a través de Telnet o conexión de aplicación web.
Y con los niveles de depuración de recursos, el volumen que se muestra en los mensajes se reduce para niveles más altos. Por ejemplo, solo procesa todos los mensajes, si el nivel es el más bajo, el texero,
Remotedebug se otima para reducir los gastos generales, en la CPU y la memoria e incluir la función de almacenamiento en búfer de clientes.
Durante el desarrollo, podemos poner muchos mensajes de depuración ...
Pero con remotedebug , podemos poner un nivel en cada uno.
Para todos los mensajes (excepto los niveles siempre (Debuga) o error (debuge), el mensaje solo se procesa y se muestra, si el nivel de depuración es igual o más alto que el nivel de TI.
Remotedebug tiene 6 niveles de depuración, en orden de prioridad:
Siempre mostró:
Error : errores críticos
Siempre : mensajes importantes
Otros niveles (mostrados si el nivel es igual o superior al real):
Advertencia : condiciones de error pero no críticas
Información : mensajes de información
Debug : información adicional
Levante : más información de lo habitual
Entonces podemos cambiar el nivel a verbose, para ver todos los mensajes. O para depurar para ver solo depuración o nivel superior, etc.
Es muy bueno para reducir una cantidad de mensajes que un proyecto puede generar, para ayudar a la depuración.
Remotedebug tiene un convertidor para ayudar a migrar sus códigos Arduino, desde seriales. Impresiones a esta biblioteca.
Remotedebugconverter
Incluso si quieres hacer esto manualmente, es muy simple. Consulte el tema utilizando arriba.
Una simple depuración:
debugV ( " * Run time: %02u:%02u:%02u (VERBOSE) " , mRunHours , mRunMinutes , mRunSeconds );Puede generar esta salida en el monitor en serie:
(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)
Para ESP32, la ID de núcleo en cada depuración es muy buena para optimizar la programación multinúcleo.
Por ejemplo:
Mostrar ayuda ( ? )
Cambie el nivel de depuración ( V , D , I , W , E ), para mostrar menos o más mensajes.
Ver memoria ( m )
Restablecer la placa ( reinicio )
Vea los comandos remotedebug a continuación.
Puede agregar sus propios comandos, vea los ejemplos por favor
Si su proyecto tiene instalado remotedebugger , tenga un nuevo comandos, por ejemplo, llamar a una función, ver/cambiar variables, ...
Ahora remotedebug (versión> = 2.0.0), tiene un debuggger de software simple, basado en códigos de la biblioteca SeriaDebug.
Esta es otra biblioteca, que actúa como un complemento para remotedebug .
Por favor, consiga el repositorio de remotedebugger para más información: 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.
Como Serialldebug, ahora remotedebug (V3) tiene una aplicación, el remotedebugApp, para depurar en el navegador web.
Esta aplicación es una aplicación web HTM5, con WebSocket para comunicarse con Arduino Board.
Para ello, remotedebug v3 tiene un servidor de socket web (se puede deshabilitar). Utilizó una copia local de la biblioteca Arduinowebsockets, debido a que no en el Administrador de la Biblioteca Arduino.
Como una gran página web en el servidor web, la solución para Arduino es guardarlo en un almacenamiento, como Spiffs. Pero no tienen actualizaciones automáticamente nuevas versión en datos guardados de esta manera, estos datos de Spiffs son buenos para un proyecto pero no para una biblioteca.
Debido, esta aplicación no es almacenada y atendida por la Junta, en cambio, la aplicación está en la web: http://joaolopesf.net/remotedebugApp Nota: Esto no usa SSL (https), debido a Socket del servidor web en Arduino, no es compatible con SSL (WSS). Pero después de la carga de la página, todo el tráfico está en la red local, no se exponen datos en Internet.
RemotedebugApp es un HTML5 moderno y necesita un navegador moderno para trabajar. Internet Explorer 11 y Safari 10 son ejemplos que no son compatibles. Pero puedes usar Anothers, como Chrome, Edge, Firefox.
La aplicación web está en beta, agregue un problema, para problemas o sugerencias.
Ahora tenga otro repositorio, remotedebugapp, es para una copia local de la aplicación web en Internet. Se actualiza con la última versión de la aplicación web, después de que se publica en el servidor web: http://joaolopesf.net/remotedebugapp. Descárguelo para usar cuando Internet está fuera de línea. Como es una copia local, la aplicación verificará las nuevas versiones periódicamente, ya que puede descargar una nueva versión.
Telnet sigue siendo trabajo, para cuando desee esto, o para fallar en la aplicación web.
Telnet es una forma estándar de conectarse de forma remota a un servidor y es compatible con todos los sistemas operativos (Windows, Mac, Linux ...).
MacOSX y Linux tienen un cliente de Telnet nativo.
Para Windows, un cliente de Telnet típico es la masilla : masilla.
Tenga una buena herramienta para los móviles: el Fing , busque en su tienda móvil. Su muestra todos los dispositivos en la red local (WiFi), los puertos de exhibición se abren y también pueden ejecutar el cliente Telnet (aplicación externa)
Remotedebug establece un servidor de telnet que escucha a cualquier cliente de Telnet que desee conectarse. Después de la conexión, el registro se transmite al cliente Telnet.
Remotedebug es muy simple de usar, después de algunas líneas de código de inicialización, puede usar los conocidos comandos de "impresión" para transmitir su registro al cliente remoto.
Remotedebug admite el filtrado de registro en función de los niveles de depuración :
Solo muestra el nivel de depuración real:
Nota: Estos niveles están en el orden de la mayoría de los registros-> menos registro.
O para siempre mostrar (no depende del nivel de depuración real):
Nota: Todas las depuraciones se procesan y se muestran solo si tienen una conexión de cliente.
El cliente de Telnet o la aplicación web puede establecer el nivel de depuración escribiendo algunos comandos simples.
Remotedebug incluye un simple perfilador. Puede ser habilitado por el cliente conectado (aplicación Telnet o web) o el código Arduino en sí.
Cuando está habilitado, muestra el tiempo entre 2 declaraciones de depuración, utilizando diferentes colores dependiendo del tiempo transcurrido.
Un ejemplo típico sería insertar registro justo antes y después de una función después de lo cual puede ver cuánto se gastan en la función.
RemotedEbug está diseñado para dar una sobrecarga mínima (conectada o no) y solo procesar las depuraciones, si hay un cliente (Telnet o aplicación web) conectado.
Remotedebug admite comandos personalizados que se pueden ingresar en el cliente (aplicación Telnet o web). Estos activan la ejecución de una función personalizada en el código Arduino. Por ejemplo, esto se puede usar para enviar un estado a pedido del cliente.
La versión actual de remotedebug aún no incluye ninguna autenticación cifrada, solo texto sin formato y está destinado solo para el desarrollo, no se usa en producción/liberación.
Las versiones futuras, si es posible, incluirán una forma segura de autenticación y pruebas adicionales para apoyar los entornos de producción.
- 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
Simplemente descargue o clone este repositorio.
O para Arduino IDE, puede usar el Administrador de la biblioteca para instalar y actualizar la biblioteca.
Para obtener ayuda de instalación, haga clic en esto:
Para otro IDE, o no usar el Administrador de la Biblioteca de Arduino IDE, le sugiero que use una aplicación de escritorio GitHub para clonar, es útil mantenerse actualizado.
Abra los proyectos en la carpeta de ejemplo para verlo funcionando.
# include " RemoteDebug.h " // https://github.com/JoaoLopesF/RemoteDebugRemotedebug Depug;
En la función de configuración después de la inicialización de 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
NOTA: Para habilitar el depurador, por remotedebugger, acceda a este repositorio de github: remotedebugger
En la cola de la función de bucle
// Remote debug over WiFi
Debug.handle();
// Or
debugHandle (); // Equal to SerialDebug
En cualquier lugar de su código:
# 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 ());
}
# endifNota: Usando Isactive, necesita rodear el código por condición de precompiled de depurable, para evitar compilarlo para la producción/liberación
O camino corto (igual a serialldebug) (preferido si solo una depuración en el momento):
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 " );O si su proyecto usa varios comandos seriales. Print para generar un solo mensaje de depuración, por ejemplo:
Serial.print( " a = " );
Serial.print(a);
Serial.print( " b = " );
Serial.print(b);
Serial.print( " c = " );
Serial.println(c);se puede usar rdebug* macros:
rdebugV ( " a = " );
rdebugV (a);
rdebugV ( " b = " );
rdebugV (b);
rdebugV ( " c = " );
rdebugVln (c);Nota: En el futuro, sugiero que migre esto a un solo comando de depuración:
debugV (a = %d b = %d c = %d " , a, b, c);Un ejemplo de nivel de depuración de uso: (suponiendo que los datos son muchos caracteres)
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 :-|
}Comenzando en la versión 1.5.0, Depug Macros (depuración* y rdebug*), coloque automáticamente el nombre de la función que llamó Macro y Core ID (ID de Core solo para ESP32).
Entonces:
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 ejemplo de uso de depuración con serie habilitada
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 monitorPara reducir los gastos generales, remotedEbug es desconectar al cliente (aplicación Telnet o web), si no está activo.
- 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.
No olvide usar la cláusula IF con debug.isactive (si no usa las macros de depuración)
---> This is very important to reduce overheads and work of debug levels
Consulte las muestras, básicas o avanzadas, para aprender a usar
En una muestra avanzada, utilicé la biblioteca Wifimanager, Arduinoota y MDNS, por favor, vea.
- 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
Presione el contador en este archivo, a partir de 2019-03-03: