Библиотека для Arduino для отладки проектов по WiFi, с веб -приложением или клиентом Telnet, с такими командами печати, как Serial Monitor.


По умолчанию Arduino обладает только возможностью отладки через серийный порт. У этого есть несколько недостатков:
С помощью ESP8266 (NODEMCU) или ESP32 у нас теперь есть сетевая подключение (WiFi), которые можно использовать для потоковой отладки информации в режиме реального времени.
Эта библиотека хороша для проектов IoT, Home Automation, мобильных роботов (могут отладить ее в движении с помощью кабеля?) Или с другими проектами Wi -Fi.
На самом деле, эта библиотека была рождена от необходимости отлаживания проекта Home Automation IoT. В этом проекте был центральный модуль и три вспомогательных модуля, и они были далеко друг от друга. Один из них был трудно добраться, под крышей дома. Чтобы отлаживать этот проект, сопровождающий обмен сообщениями в реальном времени, невозможно сделать традиционным способом, USB Cable.
MIP_ESP8266_Library и мой робот ESP32 Wi -Fi являются примером проектов, которые используют RemoteDebug . Смотрите в: MIP_ESP8266_Library и Esplorer_v1
RemoteDebug улучшается с помощью буферизации клиента (последняя отправка составляет <= 10 мс), чтобы избежать таинственных задержек сети Wi -Fi на досках ESP32 и ESP8266
Примечание. Если ваш проект не использует Wi -Fi, вы можете использовать мою другую библиотеку, библиотеку Serialdebug , эта библиотека работает с любой доской Arduino.
ПРИМЕЧАНИЕ II: Библиотека Remotedebug теперь только для Espressif, так как ESP32 и ESP8266, если необходимо для других досок Wi -Fi, добавьте вопрос об этом, и мы посмотрим, можно ли сделать порт для вашей доски.
Изображение: в REMOTEDEBUGAPP (веб -приложение)

Изображение: в клиенте Telnet

YouTube (RemoteDebug v2):
YouTube (3 Telnet Connections с RemoteDebug) v1:
Внести свой вклад в эту разработку библиотеки, создав учетную запись на GitHub.
Пожалуйста, дайте звезду, если вы найдете эту библиотеку полезной, это поможет другим людям, узнайте об этом тоже.
Пожалуйста, добавьте проблему для проблем или предложения.
Ремейтедбугапп бета
Теперь у вас есть еще один репозиторий, Remotebedebugapp для локальной копии веб -приложения в Интернете. Он обновляется с последней версией веб -приложения после того, как оно будет опубликовано на веб -сервере: http://joaolopesf.net/remotedebugapp. Загрузите его для использования, когда Интернет в автономном режиме. Поскольку это локальная копия, приложение периодически проверяет новые версии.
Веб -приложение HTML5 для отладки в веб -браузере, вместо этого клиента Telnet, которое использует Web Socket для общения.
Теперь у REMOTEDEBUG V3 также есть сервер веб -сокетов, чтобы поддержать подключение RemoteBedeBugApp.
RemoteDebugapp находится в бета -версии, если у вас есть какие -либо проблемы или предложения, добавьте вопрос об этом.
Соединение Telnet остается на любом желании этого или в интернет -автономном использовании.
Версия 2.1.1
Версия 2.0.0
Теперь REMOTEDEBUG может иметь тот же простой программный отладчик, который есть у библиотеки Serialdebug . Это сделано, установив еще одну библиотеку, Remotebedebugger Заступил на ремонт -корпус в качестве дополнения к Remotebedebug . Чтобы поддержать этот аддон, изменения в RemoteDebug минимальны, всего лишь несколько обратных вызовов, чтобы не добавить дополнительные накладные расходы к проектам, которые не нуждаются в отладке. Для получения дополнительной информации, пожалуйста, обратитесь к репозиторию GitHub RemoteBugger .
Теперь REMOTEDEBUG имеет новую цветовую систему, используя больше цветов, как это сделано в Serialdebugapp
ПРИМЕЧАНИЕ. Из -за того, что библиотека Remotedebug мигрируется в формат Arduino 1.5 с папкой «SRC», пожалуйста, удалите и переустановите библиотеку, чтобы избежать дублирования файлов источников Remotebedebug.
Версия 1.5.*
В версии 1.5.0 у нас есть макросы отладки* и rdebug* (см. Ниже), которые автоматически указывают имя функции, которая называется, и идентификатор Core (ядро идентификатор только для ESP32)
Serialdebug лучше, чем отладка по умолчанию Arduino от Serial.print Commands:
Будучи или не отлаживаясь через USB -кабель, Allways Allways обрабатывается команда Serial.print, отходы ЦП на микроконтроллер. Другими словами, команды отладки обрабатываются, с кем -то, кто связан в сериале или нет.
С помощью Remotebedebug все выводы отладки обрабатываются только в том случае, если кто -то отлаживает от подключения к Telnet или Web App.
А с уровнями отладки ресурса объем, отображаемый из сообщений, уменьшается для более высоких уровней. Например, обрабатывают только все сообщения, если уровень является самым низким, словес,
Remotebedebug вытимизирован для уменьшения накладных расходов, в процессоре и памяти и включает в себя функцию буферизации клиента.
Во время разработки мы можем разместить много сообщений отладки ...
Но с Remotebedebug мы можем поставить уровень в каждом из них.
Для всех сообщений (кроме уровней всегда (Debuga) или ошибки (Debuge) только сообщение обрабатывается и показано, если уровень отладки одинаково или выше, чем у него уровень
REMOTEDEBUG имеет 6 уровней отладки, в порядке приоритета:
Allway показал:
Ошибка : критические ошибки
Всегда : важные сообщения
Другие уровни (показано, если уровень равен или выше, этот фактический):
Предупреждение : условия ошибки, но не критические
Информация : информационные сообщения
Отладка : дополнительная информация
Превес : больше информации, чем обычная
Таким образом, мы можем изменить уровень на словес, чтобы увидеть все сообщения. Или отладки, чтобы увидеть только отладку или более высокий уровень и т. Д.
Очень хорошо уменьшить количество сообщений, которые может генерировать проект, чтобы помочь отладки.
REMOTEDEBUG имеет конвертер, который помогает перенести ваши коды Arduino, от Serial.Prints до этой библиотеки.
Remotebedebugconverter
Даже если вы хотите сделать это вручную, это очень просто. Пожалуйста, смотрите тему с использованием выше.
Простая отладка:
debugV ( " * Run time: %02u:%02u:%02u (VERBOSE) " , mRunHours , mRunMinutes , mRunSeconds );Может генерировать этот вывод в серийном мониторе:
(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)
Для ESP32 основной идентификатор в каждой отладке очень хорош для оптимизации многоядерного программирования.
Например:
Показать помощь ( ? )
Измените уровень отладки ( V , D , I , W , E ), чтобы показать меньше или больше сообщений.
См. Память ( м )
Сбросить доску ( сбросить )
Смотрите о командах Remotedebug ниже.
Вы можете добавить свои собственные команды, см. Примеры, пожалуйста
Если в вашем проекте установлен ремонт -кормящий , иметь новые команды, например, вызовите функцию, см./Изменить переменные, ...
Теперь REMOTEDEBUG (версия> = 2.0.0), есть простой программный дебат, базирующийся в кодах библиотеки Serialdebug.
Это еще одна библиотека, которая действует как аддон для ремонта .
Пожалуйста, Acess Remotebedebugger для получения дополнительной информации: Remotebedebugger
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.
Как у Serialdebug, теперь у Remotedebug (V3) есть приложение, Remotebedebugapp, чтобы отладить в веб -браузере.
Это приложение является веб -приложением HTM5 с WebSocket для общения с доской Arduino.
Для этого у RemoteDebug v3 есть сервер веб -сокетов (может быть отключен). Он использовал локальную копию библиотеки Arduinowebsockets, которая не входит в менеджер библиотеки Arduino.
Как большая веб -страница на веб -сервере, решение для Arduino сохраняет его в хранилище, например, Speffs. Но не обновляет новую версию в данных, сохраняемых таким образом, эти данные Spiffs хороши для проекта, но не для библиотеки.
В связи с тем, что это приложение не хранится и обслуживается доски, вместо этого приложение находится в веб -странице: http://joaolopesf.net/remotebugapp Примечание: это не использует SSL (https), причитание сокета веб -сервера на Arduino, а не поддерживает SSL (WSS). Но после загрузки страницы весь трафик находится в локальной сети, в Интернете нет данных.
Remotebedebugapp - это современный HTML5 и нуждается в современных браузерах для работы. Internet Explorer 11 и Safari 10 являются примерами, которые не поддерживаются. Но вы можете использовать Anothers, как Chrome, Edge, Firefox.
Веб -приложение находится в бета -версии, добавьте проблему для проблем или предложений.
Теперь у вас есть еще один репозиторий, Remotebedebugapp для локальной копии веб -приложения в Интернете. Он обновляется с последней версией веб -приложения после того, как оно будет опубликовано на веб -сервере: http://joaolopesf.net/remotedebugapp. Загрузите его для использования, когда Интернет в автономном режиме. Поскольку это локальная копия, приложение периодически проверяет новые версии, поскольку вы можете скачать новую версию.
Telnet остается работой, когда захочу, или для сбоя в веб -приложении.
Telnet является стандартным способом удаленного подключения к серверу и поддерживается во всех операционных системах (Windows, Mac, Linux ...).
Macosx и Linux имеют нативного клиента Telnet.
Для Windows типичным клиентом Telnet является замазка : замазка.
Иметь хороший инструмент для мобильных телефонов: ног , пожалуйста, найдите его в своем мобильном магазине. Его показывают все устройства в локальной сети (Wi -Fi), показывают открытые порты и также могут выполнить клиент Telnet (внешнее приложение)
REMOTEDEBUG устанавливает сервер Telnet, который слушает любого клиента Telnet, который хочет подключиться. После подключения ведение журнала передается клиенту Telnet.
RemoteDebug очень прост в использовании. После нескольких строк кода инициализации вы можете использовать хорошо известные команды «print» для передачи вашего журнала в удаленный клиент.
Remotebedebug поддерживает фильтрацию журнала на основе уровней отладки :
Покажите только фактический уровень отладки:
Примечание: эти уровни находятся в порядке наиболее лагирования-> наименьших лагков.
Или для всегда показывать (не зависит от фактического уровня отладки):
Примечание. Все отлаживания обрабатываются и показаны только в том случае, если есть клиентское соединение.
Клиент или веб -приложение Telnet может установить уровень отладки, набрав несколько простых команд.
Remotebedebug включает простой профилировщик. Это может быть включено подключенным клиентом (Telnet или Web App) или сам код Arduino.
При включении он показывает время между 2 операторами отладки, используя разные цвета в зависимости от истешенного времени.
Типичным примером было бы вставить ведение журнала прямо до и после функции, после которой вы можете увидеть, сколько потрачено на функцию.
REMOTEDEBUG предназначен для предоставления минимальных накладных расходов (подключенных или нет) и только отладки процессов, если подключен клиент (Telnet или веб -приложение).
REMOTEDEBUG поддерживает пользовательские команды, которые можно ввести в клиент (Telnet или Web App). Они запускают выполнение пользовательской функции в коде Arduino. Например, это можно использовать для отправки статуса по запросу клиента.
Текущая версия Remotedebug еще не включает какую -либо зашифрованную аутентификацию, только простой текст и предназначена только для разработки, а не использования в производстве/выпуске.
Будущие версии, если это возможно, будут включать в себя безопасный способ аутентификации и дальнейшего тестирования для поддержки производственных сред.
- 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
Просто загрузите или клонируйте этот репозиторий.
Или для Arduino IDE, вы можете использовать менеджер библиотеки для установки и обновления библиотеки.
Для получения помощи, пожалуйста, нажмите на это:
Для другого IDE или не используя менеджер библиотеки Arduino IDE, я предлагаю вам использовать настольное приложение GitHub для клона, оно помогает сохранить обновление.
Пожалуйста, откройте проекты в примере папки, чтобы увидеть, как он работает.
# include " RemoteDebug.h " // https://github.com/JoaoLopesF/RemoteDebugRemotebedebug Debug;
В функции настройки после инициализации Wi -Fi
// 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
Примечание. Чтобы включить отладчик, RemoteDeBugger, пожалуйста, Acess Это репозиторий GitHub: RemoteDeBugger
В хвосте петли функции
// Remote debug over WiFi
Debug.handle();
// Or
debugHandle (); // Equal to SerialDebug
В любом месте вашего кода:
# 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 ());
}
# endifПримечание. Используя ISactive, вам нужно окружить код от DEBUG_DISABLE CONDENCELE, чтобы избежать компиляции его для производства/выпуска
Или короткий путь (равный serialdebug) (предпочитается, если только один отладка в момент времени):
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 " );Или, если ваш проект использует несколько команд serial.print для генерации одного сообщения отладки, например:
Serial.print( " a = " );
Serial.print(a);
Serial.print( " b = " );
Serial.print(b);
Serial.print( " c = " );
Serial.println(c);можно использовать rdebug* макросы:
rdebugV ( " a = " );
rdebugV (a);
rdebugV ( " b = " );
rdebugV (b);
rdebugV ( " c = " );
rdebugVln (c);Примечание. В будущем я предлагаю вам перенести это в одну команду отладки:
debugV (a = %d b = %d c = %d " , a, b, c);Пример уровней использования отладки: (Предположим, что данные - много символов)
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 :-|
}Начиная с версии 1.5.0, отладоми макросы (Debug* и rdebug*) автоматически установите имя функции, которая называется макросом, и идентификатор Core (идентификатор Core только для ESP32).
Так:
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)
Пример использования отладки с серийным включенным
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 monitorДля уменьшения накладных расходов Remotebedebug отключает клиент (Telnet или Web App), если оно не активно.
- 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.
Пожалуйста, не забудьте использовать, если пункт с Debug.isactive (если не использует макросы отладки)
---> This is very important to reduce overheads and work of debug levels
Пожалуйста, смотрите образцы, базовые или продвинутые, чтобы узнать, как использовать
В Advanced образец я использовал библиотеку Wifimanager, Arduinoota и MDN, пожалуйста, посмотрите.
- 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
Нажмите счетчик в этом файле, начиная с 2019-03-03: