diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 080e70d..8057bc7 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,7 +1,6 @@ { - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format "recommendations": [ + "pioarduino.pioarduino-ide", "platformio.platformio-ide" ], "unwantedRecommendations": [ diff --git a/platformio.ini b/platformio.ini index fba81db..6dfdf68 100644 --- a/platformio.ini +++ b/platformio.ini @@ -8,7 +8,19 @@ ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html -[env:esp32-s3-devkitc-1] -platform = espressif32 -board = esp32-s3-devkitc-1 +[env:jc3248w535] +platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.35/platform-espressif32.zip +board = esp32-s3-devkitc1-n16r8 framework = arduino + +monitor_speed = 115200 +monitor_port = /dev/ttyACM0 + +build_flags = + -DBOARD_HAS_PSRAM + -DARDUINO_USB_CDC_ON_BOOT=1 + -DARDUINO_USB_MODE=1 + +lib_deps = + moononournation/GFX Library for Arduino + knolleary/PubSubClient \ No newline at end of file diff --git a/src/Application.cpp b/src/Application.cpp new file mode 100644 index 0000000..66d0f47 --- /dev/null +++ b/src/Application.cpp @@ -0,0 +1,35 @@ +#include +#include "Application.h" +#include "Config.h" + +void Application::begin() +{ + Serial.println("-------------------------"); + Serial.println(" MQTTPanel32"); + Serial.print(" Version: "); + Serial.println(Config::VERSION); + Serial.println("-------------------------"); + + wifi.begin(); + + mqtt.begin(); + + display.begin(); + + + display.showStatus( + wifi.ip(), + mqtt.connected() ? "verbunden" : "offline" + ); + +} + +void Application::loop() +{ + wifi.loop(); + + mqtt.loop(); + + display.loop(); + +} \ No newline at end of file diff --git a/src/Application.h b/src/Application.h new file mode 100644 index 0000000..5c3867f --- /dev/null +++ b/src/Application.h @@ -0,0 +1,20 @@ +#pragma once + +#include "WifiManager.h" +#include "MqttManager.h" +#include "Display/DisplayManager.h" + + +class Application +{ +public: + void begin(); + void loop(); + +private: + + WifiManager wifi; + MqttManager mqtt; + DisplayManager display; + +}; \ No newline at end of file diff --git a/src/Config.h b/src/Config.h new file mode 100644 index 0000000..44beaef --- /dev/null +++ b/src/Config.h @@ -0,0 +1,24 @@ +#pragma once + +namespace Config +{ + // WLAN + constexpr const char* WIFI_SSID = "RS20W"; + constexpr const char* WIFI_PASSWORD = "***"; + + // MQTT + constexpr const char* MQTT_HOST = "mqtt.diereuthers.home"; + constexpr uint16_t MQTT_PORT = 1883; + constexpr const char* MQTT_CLIENT = "MQTTPanel32"; + + constexpr const char* MQTT_STATUS_TOPIC = + "mqttpanel32/status"; + + constexpr const char* MQTT_COMMAND_TOPIC = + "mqttpanel32/command"; + + + // Firmware + constexpr const char* VERSION = "0.1.0"; + constexpr const char* HOSTNAME = "mqttpanel32"; +} \ No newline at end of file diff --git a/src/Display/DisplayManager.cpp b/src/Display/DisplayManager.cpp new file mode 100644 index 0000000..9fd2e51 --- /dev/null +++ b/src/Display/DisplayManager.cpp @@ -0,0 +1,31 @@ +#include + +#include "DisplayManager.h" + + +void DisplayManager::begin() +{ + Serial.println("DisplayManager gestartet"); +} + + +void DisplayManager::showStatus( + const String& wifi, + const String& mqtt +) +{ + Serial.println("----------------"); + Serial.println("DISPLAY"); + Serial.print("WLAN: "); + Serial.println(wifi); + + Serial.print("MQTT: "); + Serial.println(mqtt); + + Serial.println("----------------"); +} + + +void DisplayManager::loop() +{ +} \ No newline at end of file diff --git a/src/Display/DisplayManager.h b/src/Display/DisplayManager.h new file mode 100644 index 0000000..af6456f --- /dev/null +++ b/src/Display/DisplayManager.h @@ -0,0 +1,18 @@ +#pragma once + +#include + + +class DisplayManager +{ +public: + + void begin(); + + void showStatus( + const String& wifi, + const String& mqtt + ); + + void loop(); +}; \ No newline at end of file diff --git a/src/Display/LGFX_JC3248W535.hpp b/src/Display/LGFX_JC3248W535.hpp new file mode 100644 index 0000000..e69de29 diff --git a/src/MqttManager.cpp b/src/MqttManager.cpp new file mode 100644 index 0000000..dadd489 --- /dev/null +++ b/src/MqttManager.cpp @@ -0,0 +1,104 @@ +#include +#include +#include + +#include "MqttManager.h" +#include "Config.h" + + +WiFiClient wifiClient; + +PubSubClient mqttClient(wifiClient); + + + +void MqttManager::begin() +{ + mqttClient.setServer( + Config::MQTT_HOST, + Config::MQTT_PORT + ); + + mqttClient.setCallback( + [this](char* topic, byte* payload, unsigned int length) + { + callback(topic, payload, length); + } + ); + + reconnect(); +} + + + +void MqttManager::loop() +{ + if (!mqttClient.connected()) + { + reconnect(); + } + + mqttClient.loop(); +} + + + +void MqttManager::reconnect() +{ + Serial.println("MQTT verbinden..."); + + while (!mqttClient.connected()) + { + if (mqttClient.connect(Config::MQTT_CLIENT)) + { + Serial.println("MQTT verbunden"); + + mqttClient.publish( + Config::MQTT_STATUS_TOPIC, + "online" + ); + + mqttClient.subscribe( + Config::MQTT_COMMAND_TOPIC + ); + + _connected = true; + } + else + { + Serial.print("."); + + delay(3000); + } + } +} + + + +void MqttManager::callback( + char* topic, + byte* payload, + unsigned int length +) +{ + Serial.print("MQTT Nachricht: "); + Serial.println(topic); + + Serial.print("Payload: "); + + for (unsigned int i = 0; i < length; i++) + { + Serial.print( + (char)payload[i] + ); + } + + Serial.println(); +} + + + +bool MqttManager::connected() +{ + return mqttClient.connected(); +} \ No newline at end of file diff --git a/src/MqttManager.h b/src/MqttManager.h new file mode 100644 index 0000000..a4b96ff --- /dev/null +++ b/src/MqttManager.h @@ -0,0 +1,25 @@ +#pragma once + +#include + + +class MqttManager +{ +public: + + void begin(); + void loop(); + + bool connected(); + +private: + + void reconnect(); + void callback( + char* topic, + byte* payload, + unsigned int length + ); + + bool _connected = false; +}; \ No newline at end of file diff --git a/src/OtaManager.cpp b/src/OtaManager.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/OtaManager.h b/src/OtaManager.h new file mode 100644 index 0000000..e69de29 diff --git a/src/TouchManager.cpp b/src/TouchManager.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/TouchManager.h b/src/TouchManager.h new file mode 100644 index 0000000..e69de29 diff --git a/src/WifiManager.cpp b/src/WifiManager.cpp new file mode 100644 index 0000000..7f34919 --- /dev/null +++ b/src/WifiManager.cpp @@ -0,0 +1,77 @@ +#include +#include + +#include "WifiManager.h" +#include "Config.h" + +void WifiManager::begin() +{ + Serial.println("WLAN verbinden..."); + + WiFi.setHostname(Config::HOSTNAME); + + WiFi.begin( + Config::WIFI_SSID, + Config::WIFI_PASSWORD + ); + + uint8_t counter = 0; + + while (WiFi.status() != WL_CONNECTED) + { + delay(500); + Serial.print("."); + + counter++; + + if (counter > 40) + { + Serial.println(); + Serial.println("WLAN Timeout"); + return; + } + } + + _connected = true; + + Serial.println(); + Serial.println("WLAN verbunden"); + + Serial.print("IP: "); + Serial.println(WiFi.localIP()); +} + + +void WifiManager::loop() +{ + bool state = (WiFi.status() == WL_CONNECTED); + + if (state != _connected) + { + _connected = state; + + if (_connected) + { + Serial.println("WLAN wieder verbunden"); + } + else + { + Serial.println("WLAN getrennt"); + } + } +} + + +bool WifiManager::connected() +{ + return _connected; +} + + +String WifiManager::ip() +{ + if (_connected) + return WiFi.localIP().toString(); + + return "0.0.0.0"; +} \ No newline at end of file diff --git a/src/WifiManager.h b/src/WifiManager.h new file mode 100644 index 0000000..24d4444 --- /dev/null +++ b/src/WifiManager.h @@ -0,0 +1,14 @@ +#pragma once + +class WifiManager +{ +public: + void begin(); + void loop(); + + bool connected(); + String ip(); + +private: + bool _connected = false; +}; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 6242fb2..7ff8509 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,17 +1,17 @@ #include +#include "Application.h" + +Application app; void setup() { Serial.begin(115200); - delay(1000); - Serial.println(); - Serial.println("====================="); - Serial.println(" MQTTPanel32"); - Serial.println("====================="); + app.begin(); } void loop() { + app.loop(); } \ No newline at end of file