Hallo Leute ich bin neu im Arduino. Ich habe ein Projekt am laufen was mit einem Nextion Display zu tun hat. Vielleicht kann mir einer helfen, was ich sehr hoffe.
Folgendes:
Ich habe 2 "Gauge" in das Nextion Display eingefügt und würde diese gerne als visuelle Temperatur- und Luftfeuchtigkeitsanzeige nutzen.
Das Display ist mit einem Wemos d1 mini verbunden und die Daten kommen per Mqtt. Sie werden bereits in einer Variablen auf dem Wemos gespeichert.
Nun ist es aber so, dass ich das mit der "Gauge" einfach nicht kapiere. Ich muss den Wert nämlich anpassen, da meine Gauge nur 0-180° anzeigen soll. Kann mir jemand mit dem Code helfen?
Der aktuelle Code sieht so aus:
<SPI.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
#include <Nextion.h>
const char *mqtt_server = "Meine IP Adresse zum Mqtt";
const char *ssid = "Mein Wlan";
const char *password = "Mein Wlan Passwort";
// Variablen:
String temp = ""; // Temporäre Hilfsvariable
String Feuchte = ""; // Variable Feuchte
String Raumtemp_IST = ""; // Variable Raumtemperatur Ist
String Raumtemp_SOLL = ""; // Variable Raumtemperatur für Sollwert
String temp_Uhr = ""; // Temporäre Hilfsvariable Uhrzeit
String Uhrzeit = ""; // Variable Uhrzeit
WiFiClient net;
PubSubClient client(net);
// Button Bezeichnungen und Zuordnung auf den Seiten:
NexButton lichtonoff1 = NexButton(0, 4, "lichtonoff1"); // Button 1 (On, Off)
NexButton lichtonoff2 = NexButton(0, 5, "lichtonoff2"); // Button 2 (On, Off)
NexButton lichtonoff3 = NexButton(0, 6, "lichtonoff3"); // Button 3 (On, Off)
NexButton Heizung_Soll_Plus = NexButton(2, 9, "Heizung_Soll_Plus");
NexButton Heizung_Soll_Minus = NexButton(2, 10, "Heizung_Soll_Minus");
NexButton r0 = NexButton(2, 3, "r0");
NexButton r50 = NexButton(2, 2, "r50");
NexButton r100 = NexButton(2, 1, "r100");
// Liste zur Abarbeitung
NexTouch *nex_listen_list[] = {
&lichtonoff1,
&lichtonoff2,
&lichtonoff3,
&Heizung_Soll_Plus,
&Heizung_Soll_Minus,
&r0,
&r50,
&r100,
NULL // String terminated
};
void setup()
{
pinMode(BUILTIN_LED, OUTPUT);
Serial.begin(9600);
lichtonoff1.attachPush(lichtonoff1PushCallback); // Button press
//lichtonoff1.attachPop(lichtonoff1PopCallback); // Button release
lichtonoff2.attachPush(lichtonoff2PushCallback); // Button press
//lichtonoff2.attachPop(lichtonoff2PopCallback); // Button release
lichtonoff3.attachPush(lichtonoff3PushCallback); // Button press
//lichtonoff3.attachPop(lichtonoff3PopCallback); // Button release
Heizung_Soll_Plus.attachPush(Heizung_Soll_PlusPushCallback); // Button press
Heizung_Soll_Minus.attachPush(Heizung_Soll_MinusPushCallback); // Button press
//heizungZuruck.attachPush(heizungZuruckPushCallback); // Button release
r0.attachPush(r0PushCallback); // Button press
r50.attachPush(r50PushCallback); // Button press
r100.attachPush(r100PushCallback); // Button press
//delay(500);
connect();
}
void loop()
{
if (!client.connected())
{
reconnect();
}
client.loop();
nexLoop(nex_listen_list); // Check touch events
sendDataToDisplay();
client.loop();
refreshDisplay();
delay(500);
}
void refreshDisplay() {
}
void connect()
{
Serial.println("Connecting Wifi");
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
// WiFi
while (WiFi.waitForConnectResult() != WL_CONNECTED)
{
WiFi.begin(ssid, password);
}
Serial.println("Connecting MQTT");
// MQTT
client.setServer(mqtt_server, 1886);
client.setCallback(callback);
}
//------------ Beginn der Datenspeicherung in den Variablen und Subscriben ----------------
//----------MQTT Subscribe Heizungsstatus --------------------------------------------------
void callback(char *topic, byte *payload, unsigned int length) {
String sTopic = String(topic);
if (sTopic == "Wohnung/Kinderzimmer/Display/Heizungsstatus") {
temp = "";
Serial.print("");
for (int i = 0; i < length; i++) {
temp += ((char)payload[i]);
}
if (temp.indexOf("Feuchte") == 0) {
Feuchte = temp;
}
else if (temp.indexOf("Raumtemp_IST") == 0) {
Raumtemp_IST = temp;
}
else if (temp.indexOf("Raumtemp_SOLL") == 0) {
Raumtemp_SOLL = temp;
}
else {
Serial.print(temp);
for (int i = 0; i < 3; i++) { Serial.write(0xff); }
}
sendDataToDisplay(); // Daten an das Display senden
}
// MQTT Subscribe Display allgemein
else if (sTopic == "Wohnung/Kinderzimmer/Display/Display"){
temp_Uhr = "";
Serial.print("");
for (int i = 0; i < length; i++) {
temp_Uhr += ((char)payload[i]);
}
if (temp_Uhr.indexOf("Uhrzeit") == 0) {
Uhrzeit = temp_Uhr;
}
else {
Serial.print(temp_Uhr);
for (int i = 0; i < 3; i++) { Serial.write(0xff); }
}
sendDataToDisplay(); // Daten an das Display senden
}
//MQTT Subscribe Button
else if (sTopic == "Wohnung/Kinderzimmer/Display/Button")
{
Serial.print("");
for (int i = 0; i < length; i++)
{
Serial.print((char)payload[i]);
}
Serial.print("");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}
else
{
Serial.print("Dieses Topic kenne ich nicht: ");
Serial.println(sTopic);
}
}
//----------------- wieder Daten an das Display senden -----------------
//------ Deklarieren was Send Data to Display machen soll ------------
void sendDataToDisplay()
{
if (Feuchte != "")
{
Serial.print(Feuchte);
for (int i = 0; i < 3; i++)
{
Serial.write(0xff);
}
}
if (Raumtemp_IST != "")
{
Serial.print(Raumtemp_IST);
for (int i = 0; i < 3; i++)
{
Serial.write(0xff);
}
}
if (Raumtemp_SOLL != "")
{
Serial.print(Raumtemp_SOLL);
for (int i = 0; i < 3; i++)
{
Serial.write(0xff);
}
}
if (Uhrzeit != "")
{
Serial.print(Uhrzeit);
for (int i = 0; i < 3; i++)
{
Serial.write(0xff);
}
}
}
//----------- Ende des sendens an das Display -------------------------
//----------- Reconnect Mqtt -----------------------------------------
void reconnect()
{
while (!client.connected())
{
String clientId = "WemosNextion-";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str()))
{
client.subscribe("Wohnung/Kinderzimmer/Display/Display");
client.subscribe("Wohnung/Kinderzimmer/Display/Button");
client.subscribe("Wohnung/Kinderzimmer/Display/Heizungsstatus");
}
else
{
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
//--------------------------------------------------------------------------
//------Deklarieren was die Button bei Betätigung senden sollen --------------
void lichtonoff1PushCallback(void *ptr)
{
digitalWrite(BUILTIN_LED, HIGH); // Turn ON internal LED
client.publish("Wohnung/Kinderzimmer/Display/Button", "Licht_1");
}
void lichtonoff2PushCallback(void *ptr)
{
digitalWrite(BUILTIN_LED, HIGH); // Turn ON internal LED
client.publish("Wohnung/Kinderzimmer/Display/Button", "Licht_2");
}
void lichtonoff3PushCallback(void *ptr)
{
digitalWrite(BUILTIN_LED, HIGH); // Turn ON internal LED
client.publish("Wohnung/Kinderzimmer/Display/Button", "Licht_3");
}
void Heizung_Soll_PlusPushCallback(void *ptr)
{
digitalWrite(BUILTIN_LED, HIGH); // Turn ON internal LED
client.publish("Wohnung/Kinderzimmer/Display/Button", "Heizung_Soll_Plus");
}
void Heizung_Soll_MinusPushCallback(void *ptr)
{
digitalWrite(BUILTIN_LED, HIGH); // Turn ON internal LED
client.publish("Wohnung/Kinderzimmer/Display/Button", "Heizung_Soll_Minus");
}
void r100PushCallback(void *ptr)
{
digitalWrite(BUILTIN_LED, HIGH); // Turn ON internal LED
client.publish("Wohnung/Kinderzimmer/Display/Rollo", "geschlossen");
}
void r50PushCallback(void *ptr)
{
digitalWrite(BUILTIN_LED, HIGH); // Turn ON internal LED
client.publish("Wohnung/Kinderzimmer/Display/Rollo", "halb");
}
void r0PushCallback(void *ptr)
{
digitalWrite(BUILTIN_LED, HIGH); // Turn ON internal LED
client.publish("Wohnung/Kinderzimmer/Display/Rollo", "offen");
}