From bf253506f2ab4329d323c216e2e06fb34d1bceb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien?= Date: Fri, 22 Dec 2017 14:36:26 +0100 Subject: [PATCH] Adding telnet for remote debugging purpose --- LibreMetric.ino | 17 ++++++++++++++++- OTAsetup.cpp | 31 +++++++++++++++++++++++++++++++ OTAsetup.h | 10 ++++++++++ config.h | 6 ++++++ d_helper.cpp | 31 +++++++++++++++++++++++++++++++ d_helper.h | 21 +++++++++++++++++++++ 6 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 OTAsetup.cpp create mode 100644 OTAsetup.h create mode 100644 config.h create mode 100644 d_helper.cpp create mode 100644 d_helper.h diff --git a/LibreMetric.ino b/LibreMetric.ino index d500b30..6dd2d76 100644 --- a/LibreMetric.ino +++ b/LibreMetric.ino @@ -1,3 +1,6 @@ +// global config + +#include "config.h" //################# LIBRARIES ########################## #include @@ -8,6 +11,8 @@ #include #include #include +#include "d_helper.h" + //################# DISPLAY CONNECTIONS ################ // LED Matrix Pin -> ESP8266 Pin @@ -53,7 +58,13 @@ void setup() { Serial.println(F("WiFi connected...")); Serial.println(WiFi.localIP()); configTime(timezone * 3600, dstOffset * 3600, ntpServer); // First sync of time with (S)NTP - + +#ifdef DEBUG_TELNET + // Start the Telnet server + telnetServer.begin(); + telnetServer.setNoDelay(true); +#endif + //---------------------------------------------------------------------- server.begin(); Serial.println(F("Webserver started...")); @@ -73,6 +84,10 @@ void setup() { } void loop() { +#ifdef DEBUG_TELNET + // Handle Telnet connection for debugging + handleTelnet(); +#endif server.handleClient(); matrix.fillScreen(LOW); time_t now = time(nullptr); diff --git a/OTAsetup.cpp b/OTAsetup.cpp new file mode 100644 index 0000000..81eec00 --- /dev/null +++ b/OTAsetup.cpp @@ -0,0 +1,31 @@ + +#include "OTAsetup.h" + +void initOTA(){ + // Set hostname and start OTA + ArduinoOTA.setHostname("LibreMetric"); + // Start of OTA + ArduinoOTA.onStart([]() { + DEBUG_PRINTLN("OTA Beginning!"); + }); + // progress of OTA + ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { + DEBUG_PRINTF("progress: %u%%\r", (progress/(total/100))); + }); + // OTA onEnd + ArduinoOTA.onEnd([](){ + DEBUG_PRINTLN("\nOTA ended, let\'s restart"); + }); + // OTA error handle + ArduinoOTA.onError([](ota_error_t error) { + DEBUG_PRINT("ArduinoOTA Error["); + DEBUG_PRINT(error); + DEBUG_PRINT("]: "); + if (error == OTA_AUTH_ERROR) DEBUG_PRINTLN("Auth Failed"); + else if (error == OTA_BEGIN_ERROR) DEBUG_PRINTLN("Begin Failed"); + else if (error == OTA_CONNECT_ERROR) DEBUG_PRINTLN("Connect Failed"); + else if (error == OTA_RECEIVE_ERROR) DEBUG_PRINTLN("Receive Failed"); + else if (error == OTA_END_ERROR) DEBUG_PRINTLN("End Failed"); + }); + ArduinoOTA.begin(); +} diff --git a/OTAsetup.h b/OTAsetup.h new file mode 100644 index 0000000..6528904 --- /dev/null +++ b/OTAsetup.h @@ -0,0 +1,10 @@ + +#ifndef OTAsetup_h +#define OTAsetup_h + +#include +#include "d_helper.h" + +void initOTA(); + +#endif diff --git a/config.h b/config.h new file mode 100644 index 0000000..74c1035 --- /dev/null +++ b/config.h @@ -0,0 +1,6 @@ +// Enable console output via telnet +// #define DEBUG_TELNET + + +// Enable wifimanager debug +// #define DEBUG_WifiM diff --git a/d_helper.cpp b/d_helper.cpp new file mode 100644 index 0000000..1d14ca3 --- /dev/null +++ b/d_helper.cpp @@ -0,0 +1,31 @@ +// debug helper + +#include "d_helper.h" + +// in a terminal: telnet esp IP +#ifdef DEBUG_TELNET +WiFiServer telnetServer(23); +WiFiClient telnetClient; +#endif + +/////////////////////////////////////////////////////////////////////////// +// TELNET +/////////////////////////////////////////////////////////////////////////// +/* + Function called to handle Telnet clients + https://www.youtube.com/watch?v=j9yW10OcahI +*/ +#ifdef DEBUG_TELNET +void handleTelnet(void) { + if (telnetServer.hasClient()) { + if (!telnetClient || !telnetClient.connected()) { + if (telnetClient) { + telnetClient.stop(); + } + telnetClient = telnetServer.available(); + } else { + telnetServer.available().stop(); + } + } +} +#endif diff --git a/d_helper.h b/d_helper.h new file mode 100644 index 0000000..d2bcfa3 --- /dev/null +++ b/d_helper.h @@ -0,0 +1,21 @@ +#ifndef D_helper_h +#define D_helper_h + +void handleTelnet(void); + +// ################# Macros for debugging ################ +#ifdef DEBUG_TELNET +#define DEBUG_PRINT(x) telnetClient.print(x) +#define DEBUG_PRINTF(x,y) telnetClient.printf(x,y) +#define DEBUG_PRINT_WITH_FMT(x, fmt) telnetClient.print(x, fmt) +#define DEBUG_PRINTLN(x) telnetClient.println(x) +#define DEBUG_PRINTLN_WITH_FMT(x, fmt) telnetClient.println(x, fmt) +#else +#define DEBUG_PRINT(x) Serial.print(x) +#define DEBUG_PRINTF(x,y) Serial.printf(x,y) +#define DEBUG_PRINT_WITH_FMT(x, fmt) Serial.print(x, fmt) +#define DEBUG_PRINTLN(x) Serial.println(x) +#define DEBUG_PRINTLN_WITH_FMT(x, fmt) Serial.println(x, fmt) +#endif + +#endif