#include #include #include #include #include #include #include #include #include #include "common.h" #include "rmtdbghelp.h" const char *ssid = WIFI_SSID; const char *password = WIFI_PASSWORD; #ifdef DEBUG const bool debug_flag = true; #else const bool debug_flag = false; #endif bool startSetupMode = false; char DeviceName[33]; U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(-1); RemoteDebug Debug; ESP8266WiFiMulti wifiMulti; // Function-Prototypes String IpAddress2String(const IPAddress &ipAddress); void processCmdRemoteDebug(); void RemotDebug_printSystemInfo(); void RemoteDebug_printWifiInfo(); CRGB leds[1]; void setup() { system_update_cpu_freq(SYS_CPU_80MHZ); snprintf(DeviceName, 32, HOST_NAME, ESP.getChipId()); WiFi.mode(WIFI_OFF); WiFi.persistent(false); Serial.begin(115200); Serial.setDebugOutput(true); Serial.println("Souko's ChainOiler Mk1"); Serial.println(DeviceName); u8x8.begin(); u8x8.setFont(u8x8_font_chroma48medium8_r); pinMode(GPIO_TRIGGER, INPUT_PULLUP); pinMode(GPIO_BUTTON, INPUT_PULLUP); pinMode(GPIO_PUMP, OUTPUT); WiFi.mode(WIFI_STA); WiFi.setHostname(DeviceName); wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD); Serial.println("Connecting Wifi..."); if (wifiMulti.run() == WL_CONNECTED) { Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.print(WiFi.localIP()); } if (MDNS.begin(DeviceName)) MDNS.addService("telnet", "tcp", 23); Debug.begin(DeviceName); // Initialize the WiFi server Debug.setResetCmdEnabled(true); // Enable the reset command Debug.showProfiler(true); // Profiler (Good to measure times, to optimize codes) Debug.showColors(true); // Colors Debug.setHelpProjectsCmds(helpCmd); Debug.setCallBackProjectCmds(&processCmdRemoteDebug); ArduinoOTA.setPort(8266); ArduinoOTA.setHostname(DeviceName); ArduinoOTA.setPassword(ADMIN_PASS); ArduinoOTA.onStart([]() { u8x8.clearDisplay(); u8x8.drawString(0, 0, "OTA-Update"); u8x8.refreshDisplay(); }); ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { static bool refreshed = false; if (!refreshed) { u8x8.clearDisplay(); refreshed = true; u8x8.drawString(0, 0, "OTA Upload"); } uint32_t percent = progress / (total / 100); u8x8.setCursor(0, 1); u8x8.printf("%d %%", percent); u8x8.refreshDisplay(); }); ArduinoOTA.onEnd([]() { u8x8.clearDisplay(); u8x8.drawString(0, 0, "OTA-Restart"); u8x8.refreshDisplay(); }); ArduinoOTA.begin(); u8x8.clearDisplay(); u8x8.drawString(4, 4, "Souko's"); u8x8.drawString(1, 5, "ChainLube Mk1"); u8x8.refreshDisplay(); FastLED.addLeds(leds, 1); // GRB ordering is assumed } void loop() { leds[0] = digitalRead(GPIO_BUTTON) ? CRGB::Green : CRGB::Red; FastLED.show(); ArduinoOTA.handle(); Debug.handle(); yield(); } String IpAddress2String(const IPAddress &ipAddress) { return String(ipAddress[0]) + String(".") + String(ipAddress[1]) + String(".") + String(ipAddress[2]) + String(".") + String(ipAddress[3]); } void processCmdRemoteDebug() { String lastCmd = Debug.getLastCommand(); if (lastCmd == "sysinfo") RemotDebug_printSystemInfo(); else if (lastCmd == "netinfo") RemoteDebug_printWifiInfo(); } void RemotDebug_printSystemInfo() { debugA("Souko's ChainOiler Mk1"); debugA("Hostname: %s", DeviceName); debugA("Sdk version: %s", ESP.getSdkVersion()); debugA("Core Version: %s", ESP.getCoreVersion().c_str()); debugA("Boot Version: %u", ESP.getBootVersion()); debugA("Boot Mode: %u", ESP.getBootMode()); debugA("CPU Frequency: %u MHz", ESP.getCpuFreqMHz()); debugA("Reset reason: %s", ESP.getResetReason().c_str()); } void RemoteDebug_printWifiInfo() { }