Go Down

Topic: Nextion Display Gauge (Read 171 times) previous topic - next topic

quorle

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:

Code: [Select]
<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");
}

HotSystems

#1
Nov 18, 2018, 03:20 pm Last Edit: Nov 18, 2018, 03:22 pm by HotSystems
Und das Tutorial kennst du ?
Da ist die Programmierung des Gauge beschrieben.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

quorle

Ja das kenne ich, aber hier steht leider nicht, wie man meine sachen mittels wemos d1 löst

HotSystems

Das ist doch egal, ob Wemos oder ein Arduino.
Die Schnittstelle ist Seriell und das ist bei allen gleich, auch die Programmierung.

Bisher habe ich noch kein "Gauge" verwendet und schon gar nicht die Nextion Lib, daher kann ich da nicht weiter helfen.

Vermutlich musst du deine Werte über "Map" anpassen.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

postmaster-ino

Hi

Einen fertigen Code wirst Du hier nicht bekommen.
Wie Hotsystems schon schrieb, ist die 'Sprache' zum Nextion überall die Gleiche - also ist Es, wenn man Es denn verstanden hat, egal, für welchen µC der Code geschrieben wurde.
Dich interessieren ja eh nur die Teile, wo aktiv Was zum Nextion geht oder von Diesem ausgelesen werden soll - und Das geht seriell.

Bin Da aber auch, leider, noch unbeleckt.
Ein Nextion wäre zwar vorhanden (heute noch beim Elektronik sortieren in der Hand gehabt), aber unbespielt.

MfG

quorle

Naja eigentlich interessiert mich esplizit wie man eine Anzeige begrenzt. Da muss man ja soweit ich verstanden habe eine Rechnung aufstellen und alles deklarieren.

Aber da ich noch sehr neu bin in dem Thema hatte ich mir hier hilfe bei meinem Code erhofft

HotSystems

Naja eigentlich interessiert mich esplizit wie man eine Anzeige begrenzt. Da muss man ja soweit ich verstanden habe eine Rechnung aufstellen und alles deklarieren.

Aber da ich noch sehr neu bin in dem Thema hatte ich mir hier hilfe bei meinem Code erhofft
Das ist nicht kompliziert.
Sieh dir das hier an, da ist alles beschrieben.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Go Up