NEWS
CYD Cheap Yellow Display (ESP32-2432S028) & MQTT Adapter
-
Hallo,
ich habe mir vor einiger Zeit ein CYD bestellt und es funktioniert soweit auch. Mir gefallen die Teile echt gut und sind wirklich sehr billig. Da könnte man viele Möglichkeiten im Smarhomeinsatz finden und realisieren. Nun wollte ich es zum ersten richtigen Einsatz bringen und über MQTT Temperatur und Luftfeuchtigkeit anzeigen lassen. Dazu sollen noch drei Schalter integriert werden die ebenfalls über MQTT angesteuert werden.
Also habe ich im iobroker erstmal sicherheitshalber eine neue mqtt Instanz angelegt.
Anschließend habe ich mir einen code erzeugen lassen und auf das CYD übertragen. Es verbindet sich auch mit meinem Wlan und im iobroker mit dem mqtt Broker. Dort wird mir das CYD angezeigt. Unter Objekte wird ebenfalls bei Informationen das CYD angezeigt. Das Display bleibt aber bis auf den Sicherheitstext (das man weiß, dass was angezeigt wird) dunkel.
Ich bekomme es nicht hin, dass mir weitere Werte auf dem Display angezeigt werden. Habe dann einfach mal zwei neue Variablen als String angelegt, weil das so im code gefordert ist, wenn ich es richtig verstehe und versuche diese Werte nun auf das Display zu projizieren. Irgendwas muss bei der Syntax zur Übertragung falsch sein, aber leider reicht mein Wissen dafür nicht aus. Habe heute schon den ganzen Nachmittag und Abend getestet, aber finde keine Lösung. Freue mich daher über jeden Ansatz der mir weiterhelfen könnte. Danke vorab und Grüße. Vielleicht ist das mit CYD auch für andere hier interessant.
#include <SPI.h> #include <Wire.h> #include <TFT_eSPI.h> #include <XPT2046_Touchscreen.h> #include <WiFi.h> #include <PubSubClient.h> // Display and touch configuration #define XPT2046_IRQ 36 #define XPT2046_MOSI 32 #define XPT2046_MISO 39 #define XPT2046_CLK 25 #define XPT2046_CS 33 SPIClass touchscreenSPI(VSPI); XPT2046_Touchscreen touchscreen(XPT2046_CS, XPT2046_IRQ); TFT_eSPI tft = TFT_eSPI(); // WiFi and MQTT settings const char* ssid = "Home-J"; const char* password = "xxx"; const char* mqtt_server = "192.1xx.178.176"; const int mqtt_port = 1889; const char* mqtt_topic = "mqtt.1."; const char* mqtt_device_name = "CYD"; const char* mqtt_user = "MqttServiceBox"; const char* mqtt_pass = "xxx"; WiFiClient espClient; PubSubClient client(espClient); void setup() { // Initialize serial communication Serial.begin(115200); Serial.println("Starting setup..."); // Initialize WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("Connected to WiFi"); // Initialize MQTT client.setServer(mqtt_server, mqtt_port); client.setCallback(mqttCallback); // Initialize the display tft.init(); tft.setRotation(1); tft.fillScreen(TFT_BLACK); tft.setTextColor(TFT_WHITE); tft.setTextSize(2); // Display header tft.drawString("Sicherheitstext", 10, 10); // Initialize touchscreen touchscreen.begin(touchscreenSPI); touchscreen.setRotation(1); Serial.println("Setup complete."); } void mqttCallback(char* topic, byte* payload, unsigned int length) { String message; for (int i = 0; i < length; i++) { message += (char)payload[i]; } Serial.print("Message arrived: "); Serial.println(message); // Parse the message for temperature and humidity if (message.startsWith("Temperatur:")) { String temp = message.substring(11); tft.fillRect(0, 30, 240, 20, TFT_BLACK); tft.drawString("Temperatur: " + temp + " C", 10, 30); } else if (message.startsWith("Luftfeuchtigkeit:")) { String hum = message.substring(16); tft.fillRect(0, 50, 240, 20, TFT_BLACK); tft.drawString("Luftfeucht.: " + hum + " %", 10, 50); } } void loop() { if (!client.connected()) { reconnect(); } client.loop(); // Touchscreen handling (if needed) if (touchscreen.touched()) { // Handle touch events here } } void reconnect() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); if (client.connect(mqtt_device_name, mqtt_user, mqtt_pass)) { Serial.println("connected"); client.subscribe(mqtt_topic); } else { Serial.print("failed, rc="); Serial.print(client.state()); delay(5000); } } }
-
@jayjojayson said in CYD Cheap Yellow Display (ESP32-2432S028) & MQTT Adapter:
Wie ich das sehe machst du in reconnect() ein subscribe mit mqtt_topic = "mqtt.1." , du muss aber das eigentliche topic, nämlich z.B. "Temperatur" oder "Luftfeuchtigkeit" angeben und für jedes einzelne ein subscribe machen.
-
@jayjojayson Hallo, wie hast du dir den code erstellen lassen? Welche Entwicklungsumgebung hast du genutzt?
-
@rodnic said in CYD Cheap Yellow Display (ESP32-2432S028) & MQTT Adapter:
@jayjojayson Hallo, wie hast du dir den code erstellen lassen? Welche Entwicklungsumgebung hast du genutzt?
Wenn man nicht so auf Codierumgebungen steht und bei Adam&Eva also mit zB den Display Treibern (justierung) starten möchte, habe ich gute Erfahrung mit OpenHASP gemacht für ein ESP32-3248S035C (https://www.openhasp.com/0.7.0/hardware/sunton/esp32-3248s035/) dass dort "out of the box" erstmal funktioniert und man sich direkt um seine Applikation kümmern kann. Ist zwar ein Nightly/Beta release aber läuft bei mir absolute stabil und gibt es hier komfortabel per Webinstaller (Sunton .......): https://nightly.openhasp.com/
Da OpenHASP wohl keine IOB Integration besitzt ist die MQTT Integration recht aufwendig. Warnung vorab, der Mqtt-Adapter (Broker&Client) mag OpenHASP und seine Mqtt Kommunikation nicht. Zum Glück aber der Mqtt (Client only) Adapter. Insofern hab ich für das Display extra einen neuen Broker (Mosquitto) spendiert, aber so läuft es.