Nextion Display - Teil 1 - Grundlagen und Workflow
Schon öfter wurde nun ich nun gefragt, ob ich mal zeigen könnte wie die Nextion Displays funktionieren und was man damit alles anstellen kann. Besonder schön ist eigentlich, dass man für die Gestaltung der Oberfläche mit Photoshop (oder einem anderen Bildbearbeitungsprogramm) und der IDE von Nextion schon sehr weit kommt und ganz einfach anschauliche Oberflächen zusammenbauen kann. Im ersten Teil gehe ich genauer auf das Display ein, wie man die Logiken auf das Display bekommt und diese dann über die serielle Schnittstelle verändern kann. Alles in allem gar nicht so viel aufwändiger als irgendwelche 7-Segment-Anzeigen, aber dafür extrem viel schöner!
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
Video
Befehle
Hier mein Arduino-Script zum weiter ausbauen. Genutzt wird aktuell SoftSerial, da der Wemos nur eine einzelne Schnittstelle hat, welche bereits über USB genutzt wird. Mit ein paar Handgriffen kann man wohl auf die internerne UART umschalten - dazu aber wahrscheinlich mehr im nächsten Video.
Wenn man nun eine Nachricht an “inTopic” per MQTT sendet, wird diese im Textfeld über dem Button dargestellt.
#define SoftSerial mySerial
#include <SPI.h>
#include <SoftwareSerial.h>
#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);
#define CO2_TX D1
#define CO2_RX D2
SoftwareSerial SoftSerial(CO2_RX, CO2_TX); // RX, TX
void setup() {
pinMode(BUILTIN_LED, OUTPUT);
Serial.begin(9600);
SoftSerial.begin(9600);
delay(500);
connect();
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
delay(500);
}
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, 1883);
client.setCallback(callback);
}
void callback(char* topic, byte* payload, unsigned int length) {
SoftSerial.print("t0.txt=\"");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
SoftSerial.print((char)payload[i]);
}
Serial.println();
SoftSerial.print("\"");
SoftSerial.write(0xff);
SoftSerial.write(0xff);
SoftSerial.write(0xff);
}
void reconnect() {
while (!client.connected()) {
String clientId = "WemosNextion-";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
client.subscribe("inTopic");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}