Nextion Display - Teil 3 - Verschiedene Seiten und Button-Events

Mit ** gekennzeichnete Links auf dieser Seite sind Affiliatelinks.

Nextion Display - Teil 3 - Verschiedene Seiten und Button-Events
Nextion Display - Teil 3 - Verschiedene Seiten und Button-Events
  • Matthias Kleine
  • 02.11.2017
  • Hardware
  • Nextion
  • Darstellung

Okay, jetzt hat mich das Nextion-Fieber voll erwischt. Ich saß direkt einmal den ganzen Tag an dem Display und vor Photoshop, um direkt einen Schritt weiter zu gehen. In diesem Video geht es also richtig zur Sache. Wir werden nicht nur auf die serielle Schnittstelle wechseln, sondern auch noch eine weitere Seite einfügen, zwischen diesen Seiten hin und her wechseln und natürlich einen Button auf der Oberfläche einbauen, dessen Klick wir dann in unserem Wemos D1 mini auswerten können. Eine ganze Menge, aber gar nicht so kompliziert wie es gerade klingt.

Was wird benötigt?

  • Eine Nextion-Display (in meinem Fall das NX3224T024)
  • Ein Wemos D1 Mini
  • Eine Micro-SD-Karte
  • Einen laufenden MQTT-Server
  • Ein Windows PC oder eine virtuelle Maschine mit Windows

Aihasd 7.0" NX8048P070 Nextion Intelligent HMI USART UART Serial TFT LCD Module Display Capactive Touch Panel Touch Screen pannel (NX8048P070-011C) **

AZDelivery 3 x D1 Mini NodeMcu mit ESP8266-12F WLAN Module CH340G Lua kompatibel mit Arduino inklusive E-Book! **

SanDisk Ultra 32GB microSDHC Speicherkarte + Adapter bis zu 98 MB/Sek., Class 10, U1, A1, FFP **

NX3224T024 **

Video

Hausbau-Kurs

Download

Hier gibt es die PSD, die Bilder und auch die HMI-Datei.

Schaltplan

Wemos D1 - Nextion Display

»Wemos D1 - Nextion Display«

Befehle

Dieses Mal wurde doch einiges in der Logik geändert. Der wichtigste Change ist wahrscheinlich die Umstellung von der SoftwareSerial auf die “richige” serielle Schnittstelle. Das hatte ich anfangs viel zu kompliziert gedacht. So läuft es bei mir jedenfalls wunderbar und es fühlt sich viel besser an, als SoftwareSerial zu nutzen.

Wie man sieht, wird auch ein Button-Event eingebunden. Wie genau dieses aufgebaut ist und was dabei zu beachten ist, wird im beigefügten Video ausführlich erklärt.

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
#include <Nextion.h>

const char* mqtt_server = "192.168.178.11";
const char* ssid = "PlitschPlatsch";
const char* password = "PASSWORD";

WiFiClient net;
PubSubClient client(net);

NexButton bOnoff = NexButton(0, 7, "bOnoff"); // Button On Off

NexTouch *nex_listen_list[] = {
  &bOnoff,
  NULL // String terminated
};

int gaugeLeft = 0;
int gaugeRight = 0;
int gaugeTop = 0;

void setup() {
  pinMode(BUILTIN_LED, OUTPUT);

  Serial.begin(9600);
  //delay(500);
  //sendToDisplay(String("baud=115200"));
  //Serial.end();
  //Serial.begin(115200);

  bOnoff.attachPush(bOnoffPushCallback);  // Button press
  bOnoff.attachPop(bOnoffPopCallback);  // Button release

  connect();
}

void loop() {
  if (!client.connected()) {
    sendToDisplay(String("pWiFi.pic=1")); // Change WiFi Pic
    reconnect();
  } else {
    sendToDisplay(String("pWiFi.pic=2")); // Change WiFi Pic
  }

  //gaugeLeft += 2;
  //gaugeRight += 3;
  //gaugeTop += 4;

  nexLoop(nex_listen_list);  // Check touch events
  client.loop();
  refreshDisplay();

  delay(10);
}

void refreshDisplay()
{
  sendToDisplay(String("zLeft.val=") + String(calculateGaugeValue(gaugeLeft), DEC));
  sendToDisplay(String("zRight.val=") + String(calculateGaugeValue(gaugeRight), DEC));
  sendToDisplay(String("zTop.val=") + String(calculateTopGaugeValue(gaugeTop), DEC));
  sendToDisplay(String("tTop.txt=\"") + String(gaugeTop, DEC) + String("\""));
}

void connect() {
  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);

  // WiFi
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    WiFi.begin(ssid, password);
  }

  // MQTT
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

int calculateGaugeValue(int val) {
  if (val < 45) {
    return val + 315;
  } else if (val > 270) {
    return 225;
  } else {
    return val - 45;
  }
}

int calculateTopGaugeValue(int val) {
  val += 30;

  if (val > 150) {
    return 150;
  } else {
    return val;
  }
}

void sendToDisplay(String command) {
  Serial.print(command);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
}

void callback(char* topic, byte* payload, unsigned int length) {
  for (int i = 0; i < length; i++) {
  }
}

void reconnect() {
  while (!client.connected()) {
    String clientId = "WemosNextion-";
    clientId += String(random(0xffff), HEX);

    if (client.connect(clientId.c_str())) {
      client.subscribe("inTopic");
    } else {
      delay(5000);
    }
  }
}

void bOnoffPushCallback(void *ptr) {
  digitalWrite(BUILTIN_LED, HIGH);  // Turn ON internal LED
}

void bOnoffPopCallback(void *ptr) {
  digitalWrite(BUILTIN_LED, LOW);  // Turn OFF internal LED
}
Du willst mehr?

Smart-Home-Trainings von A-Z

Steig noch tiefer in die Themen ein und meistere Deine Projekte! Über 13.000 Teilnehmer konnten sich schon von der Qualität der Online-Kurse überzeugen.

ioBroker-Master-Kurs

ioBroker-Master-Kurs

Mehr Infos
Hausbau-Kurs

Hausbau mit KNX

Mehr Infos
Lox-Kurs

Lox-Kurs

Mehr Infos
Node-RED-Master-Kurs

Node-RED-Master-Kurs

Mehr Infos