Uma biblioteca para Arduino para depurar projetos sobre o Wi -Fi, com aplicativo da web ou cliente telnet, com comandos de impressão como o serial Monitor.


Por padrão, o Arduino só tem como possibilidade de depuração através da porta serial. Isso tem algumas desvantagens:
Com o ESP8266 (NodeMCU) ou ESP32, agora temos conectividade de rede (WiFi), que pode ser usada para transmitir informações de depuração em tempo real.
Esta biblioteca é boa para projetos de IoT, automação doméstica, robôs móveis (pode depurar em movimento com um cabo?) Ou outro projeto de wifi.
De fato, essa biblioteca nasceu da necessidade de depurar um projeto de IoT de automação residencial. Neste projeto, havia um módulo central e três módulos auxiliares, e estes estavam longe um do outro. Um era difícil de alcançar, sob o teto da casa. Para depurar esse projeto, é impossível a troca de mensagens em tempo real, é impossível de fazer com a maneira tradicional, por cabo USB.
O MIP_ESP8266_library e meu robô Wi -Fi ESP32 são um exemplo de projetos que usam o RemotedeBug . Veja em: mip_esp8266_library e esplorer_v1
O RemotedeBug é melhorado com o buffer do cliente (o último envio é <= 10ms), para evitar atrasos misteriosos de redes Wi -Fi nas placas ESP32 e ESP8266
NOTA: Se o seu projeto não usar WiFi, você poderá usar minha outra biblioteca, a Biblioteca Serialdebug , esta biblioteca funciona com qualquer placa Arduino.
Nota II: A Biblioteca RemotedeBug agora é apenas para as placas Espressif, como ESP32 e ESP8266, se necessário para outras placas Wi -Fi, adicione um problema sobre isso e veremos se é possível fazer a porta para a sua placa.
Imagem: em RemotedeBugapp (Web App)

Imagem: no cliente Telnet

YouTube (remotedebug v2):
YouTube (3 conexões Telnet com RemotedeBug) V1:
Contribua para esse desenvolvimento da biblioteca criando uma conta no GitHub.
Por favor, dê uma estrela, se você achar útil esta biblioteca, isso ajuda outro povo, a descobrir também.
Adicione um problema para problemas ou sugestões.
RemotedeBugapp Beta
Agora tenha outro repositório, remotedebugapp, é para cópia local do aplicativo da web na Internet. Ele é atualizado com a versão mais recente do Web App, após ser publicado no Web Server: http://jooolopesf.net/remotedebugapp. Faça o download, para uso quando a Internet estiver offline. Como é uma cópia local, o aplicativo verificará as novas versões periodicamente.
Um aplicativo da web html5 a ser usado para depuração no navegador da web, em vez do cliente Telnet, que usa soquete da web para se comunicar.
Agora, o RemotedeBug V3 também possui um servidor de soquete da web, para oferecer suporte à conexão RemotedeBugapp.
O RemotedeBugapp está na versão beta, se você tiver algum problema ou sugestão, adicione o problema sobre isso.
A conexão Telnet permanece, a qualquer querer isso ou para os usos offline da Internet.
Versão 2.1.1
Versão 2.0.0
Agora, o RemotedeBug pode ter o mesmo depurador de software simples, que a Biblioteca Serialdebug tem. Isso está pronto, instalando outra biblioteca, o remotedebugger The RemotedeBugger atua como um add's RemotedeBug . Para apoiar esse addon, as alterações no RemotedeBug são mínimas, apenas alguns retornos de chamada que não adicionam no alto adicional a projetos que não precisam de um depurador. Para mais informações, acesse o repositório do RemotedeBugger Github.
Agora RemotedeBug tem um novo sistema de cores, usando mais cores, como feito em Serialdebugapp
NOTA: devido à biblioteca RemotedeBug , é migrar para o formato Arduino 1.5, com a pasta "SRC", exclua e reinstale a biblioteca para evitar a duplicação de arquivos de fontes RemotedeBug.
Versão 1.5.*
Na versão 1.5.0, temos Debug* e Rdebug* macros (veja abaixo), que colocam automaticamente o nome da função que chamou e o ID do núcleo (o ID do núcleo é apenas para o ESP32)
Serialdebug é melhor do que os comandos de Arduino Padrão por serial.print:
Sendo ou não depurando via cabo USB, o comando serial.print sempre é processado, desperdiçar o tempo da CPU no microcontrolador. Em outras palavras, os comandos de depuração são processados, com alguém conectado na série ou não.
Com o RemotedeBug , toda a saída de depuração é processada apenas se existir alguém depuração por meio da conexão Telnet ou do aplicativo da Web.
E com os níveis de depuração do recurso, o volume exibido de mensagens é reduzido para níveis mais altos. Por exemplo, apenas processe todas as mensagens, se o nível for o mais baixo, o detalhado,
O RemotedeBug é otimizado para reduzir as despesas gerais, na CPU e na memória e incluir o recurso de buffer do cliente.
Durante o desenvolvimento, podemos colocar muitas mensagens de depuração ...
Mas com o RemotedeBug , podemos colocar um nível em cada um.
Para todas as mensagens (exceto os níveis sempre (Debuga) ou erro (debugue), a mensagem é processada apenas e mostrada, se o nível de depuração for igual ou superior ao nível
RemotedeBug tem 6 níveis de depuração, em ordem de prioridade:
Alway mostrou:
Erro : erros críticos
Sempre : mensagens importantes
Outros níveis (mostraram se o nível é igual ou superior ao real):
Aviso : condições de erro, mas não críticas
Informações : mensagens de informação
Debug : informações extras
Verbose : mais informações do que as usuais
Portanto, podemos alterar o nível para verbose, para ver todas as mensagens. Ou para depurar para ver apenas depuração ou nível superior, etc.
É muito bom reduzir uma quantidade de mensagens que um projeto pode gerar, para ajudar a depurar.
O RemotedeBug possui um conversor para ajudar a migrar seus códigos Arduino, de serial.prints para esta biblioteca.
RemotedeBugConverter
Mesmo se você quiser fazer isso manualmente, é muito simples. Por favor, consulte o tópico usando acima.
Uma depuração simples:
debugV ( " * Run time: %02u:%02u:%02u (VERBOSE) " , mRunHours , mRunMinutes , mRunSeconds );Pode gerar essa saída no monitor serial:
(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 o ESP32, o ID principal em cada depuração é muito bom para otimizar a programação multicore.
Por exemplo:
Mostrar ajuda ( ? )
Altere o nível de depuração ( v , d , i , w , e ), para mostrar menos ou mais mensagens.
Veja Memória ( M )
Redefinir a placa ( redefinir )
Veja sobre os comandos RemotedeBug abaixo.
Você pode adicionar seus próprios comandos, veja os exemplos, por favor
Se o seu projeto tiver o RemotedeBugger instalado, tenha novos comandos, por exemplo, chame uma função, consulte/altere variáveis, ...
Agora RemotedeBug (versão> = 2.0.0), tenha um depuração simples de software, com base em códigos da biblioteca Serialdebug.
Esta é outra biblioteca, que atua como um complemento para remotedebug .
Acesse o repositório RemotedeBugger a mais informações: 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 serialdebug, agora remotedebug (v3) tem um aplicativo, o remotedebugapp, para depurar no navegador da web.
Este aplicativo é um aplicativo da Web HTM5, com WebSocket para se comunicar para a placa Arduino.
Para isso, o RemotedeBug V3 possui um servidor de soquete da web (pode ser desativado). Ele usou uma cópia local da Biblioteca Arduinowebsockets, devido a ela não no Arduino Library Manager.
Como uma grande página da web no servidor da web, a solução para o Arduino o salva em um armazenamento, como o SPIFFs. Mas não atualiza automaticamente a nova versão em dados salvos dessa maneira, esses dados SPIFFs são bons para um projeto, mas não para uma biblioteca.
Devido, este aplicativo não é armazenado e servido pela placa, em vez disso, o aplicativo está na web: http://joooloposf.net/remotedebugapp Nota: Isso não usa SSL (https), dado o soquete do servidor da web no Arduino, não suporta SSL (WSS). Mas após o carregamento da página, todo o tráfego está na rede local, nenhum dado é exposto na Internet.
O RemotedeBugapp é um HTML5 moderno e precisa de um navegador moderno para trabalhar. Internet Explorer 11 e Safari 10 são exemplos que não são suportados. Mas você pode usar anotos, como cromo, borda, Firefox.
O aplicativo da web está na versão beta, adicione um problema, para problemas ou sugestões.
Agora tenha outro repositório, remotedebugapp, é para cópia local do aplicativo da web na Internet. Ele é atualizado com a versão mais recente do Web App, após ser publicado no Web Server: http://jooolopesf.net/remotedebugapp. Faça o download, para uso quando a Internet estiver offline. Como é uma cópia local, o aplicativo verificará as novas versões periodicamente, pois você pode baixar uma nova versão.
O telnet permanece funcional, para quando deseja isso ou falha no aplicativo da web.
A Telnet é uma maneira padrão de conectar -se remotamente a um servidor e é suportado em todos os sistemas operacionais (Windows, Mac, Linux ...).
Macosx e Linux têm um cliente Telnet nativo.
Para o Windows, um cliente Telnet típico é a massa : massa.
Tenha uma boa ferramenta para celulares: o Fing , por favor, encontre -o em sua loja móvel. Mostrar todos os dispositivos na rede local (WiFi), Show Ports abriu e pode executar o cliente Telnet também (aplicativo externo)
A RemotedeBug configura um servidor Telnet que está ouvindo qualquer cliente Telnet que deseje se conectar. Após a conexão, o registro é transmitido para o cliente Telnet.
O RemotedeBug é muito simples de usar, depois de algumas linhas de código de inicialização, você pode usar os comandos "Print" bem conhecidos para transmitir seu log para o cliente remoto.
A RemotedeBug suporta a filtragem da extração de madeira com base nos níveis de depuração :
Mostrar apenas para o nível de depuração real:
NOTA: Esses níveis estão na ordem da maioria dos registros-> menos registro.
Ou para sempre mostrar (não depende do nível de depuração real):
Nota: Todas as depuras são processadas e mostradas apenas se tiverem uma conexão com o cliente.
O cliente Telnet ou o aplicativo da Web pode definir o nível de depuração digitando alguns comandos simples.
O RemotedeBug inclui um perfil simples. Ele pode ser ativado pelo cliente conectado (telnet ou aplicativo da web) ou pelo próprio código do Arduino.
Quando ativado, mostra o tempo entre 2 instruções de depuração, usando cores diferentes, dependendo do tempo decorrido.
Um exemplo típico seria inserir o log pouco antes e depois de uma função, após a qual você pode ver quanto é gasto na função.
O RemotedeBug foi projetado para fornecer sobrecarga mínima (conectada ou não) e apenas depuras de processo, se houver um cliente (telnet ou aplicativo da web) conectado.
O RemotedeBug suporta comandos personalizados que podem ser inseridos no cliente (telnet ou aplicativo da web). Eles acionam a execução de uma função personalizada no código Arduino. Por exemplo, isso pode ser usado para enviar de volta um status a pedido do cliente.
A versão atual do RemotedeBug ainda não inclui nenhuma autenticação criptografada, apenas texto simples e se destina apenas ao desenvolvimento, não usa na produção/liberação.
As versões futuras, se for possível, incluirão uma maneira segura de autenticação e testes adicionais para apoiar os ambientes de produção.
- 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
Basta baixar ou clonar este repositório.
Ou para o Arduino IDE, você pode usar o gerenciador de bibliotecas para instalar e atualizar a biblioteca.
Para instalar ajuda, clique nisso:
Para outro IDE, ou não usar o gerente da biblioteca do Arduino IDE, sugiro que você use um aplicativo de desktop do Github para clonar, ajuda a manter -se atualizado.
Abra os projetos na pasta Exemplo, para vê -la funcionando.
# include " RemoteDebug.h " // https://github.com/JoaoLopesF/RemoteDebugRemotedeBug Debug;
Na função de configuração após a inicialização do 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 ativar o depurador, por remotedebugger, acesse este repositório do github: remotedebugger
Na função da cauda do loop
// Remote debug over WiFi
Debug.handle();
// Or
debugHandle (); // Equal to SerialDebug
Em qualquer lugar de seu 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 o ISACTIVO, você precisa envolver o código da condição pré -compilada de debug_disable, para evitar compilá -lo para produção/liberação
Ou caminho curto (igual a serialdebug) (preferido se apenas um depuração no 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 " );Ou se o seu projeto usar vários comandos serial.print para gerar uma única mensagem de depuração, por exemplo:
Serial.print( " a = " );
Serial.print(a);
Serial.print( " b = " );
Serial.print(b);
Serial.print( " c = " );
Serial.println(c);pode ser usado rdebug* macros:
rdebugV ( " a = " );
rdebugV (a);
rdebugV ( " b = " );
rdebugV (b);
rdebugV ( " c = " );
rdebugVln (c);NOTA: No futuro, sugiro que você migre isso para um único comando Debug:
debugV (a = %d b = %d c = %d " , a, b, c);Um exemplo de uso de níveis de depuração: (supondo que os dados sejam muitos 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 :-|
}A partir da versão 1.5.0, o Debug Macros (Debug* e Rdebug*), colocando automaticamente o nome da função que chamou de macro e ID do núcleo (ID do núcleo apenas para ESP32).
Então:
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)
Um exemplo de depuração de uso com serial habilitado
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 reduzir as despesas gerais, o RemotedeBug está desconectando o cliente (telnet ou aplicativo da web), se não estiver ativo.
- 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ão se esqueça de usar se cláusula com depuração.isactive (se não estiver usando macros de depuração)
---> This is very important to reduce overheads and work of debug levels
Consulte as amostras, básicas ou avançadas, para aprender a usar
Na amostra avançada, usei a Wifimanager Library, Arduinoota e MDNS, veja.
- 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
Bata o contador neste arquivo, a partir de 2019-03-03: