Sensordaten an Nextion schicken

Hallo zusammen,

vorab ich bin etwas neu mit Arduino und Nextion :grimacing:

Ich m├Âchte das auf mein Nextion Display der aktuelle Temp. Wert anzeigt ohne Nextion.lib.
Leider bekomme ich das nicht hin, auch habe ich viele Foren durchgemacht und versucht und getan, doch leider ohne Erfolg.

Hardware:
Arduino Uno:
Nextion 3,5 Zoll
Tempf├╝hler Tp36

Arduin IDE Code:

#include <Wire.h>
#include "pixel.h"

int tmp36 = A0;
int sensorwert;
int temperatur = 0;



String daten_display = "";

int ledrot = 0;
int ledgrun = 0;
int radio = 0;

int radioonoff = 2;

int farben = 0;


void setup() {
  Serial.begin(9600);
  
  strip.begin();
  strip.show();
  
  
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);

 
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
}

void loop() {
  sensorwert=analogRead(tmp36);
  temperatur = map(sensorwert,0, 410, -50, 150);

  float tempar = temperatur;
  char outstr[15];
  
 // String command = "temp.txt=\""+String(temperatur)+"\""; ***Alter Versuch
  
  Serial.println(daten_display);
  
  if(Serial.available() > 0)
  {
    daten_display += char (Serial.read());
    
  }
  if (daten_display == "tempa"){
    dtostrf(tempar, 1, 1, outstr);
    Serial.print(F("Home.temp.txt=\""));
    Serial.print(outstr);
    Serial.write('"');
    Serial.write(0xFF);
    Serial.write(0xFF);
    Serial.write(0xFF);
    daten_display="";
  }

    
  if (daten_display == "pixan"){
    ledrot = 1;
    Serial.write(0xFF);
    Serial.write(0xFF);
    Serial.write(0xFF);
    daten_display="";
  }
  if (daten_display == "pixaus"){
    ledrot = 0;
    Serial.write(0xFF);
    Serial.write(0xFF);
    Serial.write(0xFF);
    daten_display="";
  }
  if (daten_display == "lichtan"){
    ledgrun = 1;
    Serial.write(0xFF);
    Serial.write(0xFF);
    Serial.write(0xFF);
    daten_display="";
  }
  if (daten_display == "lichtaus"){
    ledgrun = 0;
    Serial.write(0xFF);
    Serial.write(0xFF);
    Serial.write(0xFF);
    daten_display="";
  }
  if (daten_display == "radioan" && radioonoff == 2){
    radioonoff = 1;
    steuerung();
    Serial.write(0xFF);
    Serial.write(0xFF);
    Serial.write(0xFF);
    daten_display="";
  }
  if (daten_display == "radioan" && radioonoff == 1){
    radioonoff = 1;
    steuerung();
    Serial.write(0xFF);
    Serial.write(0xFF);
    Serial.write(0xFF);
    daten_display="";
  }
  if (daten_display == "radioaus" && radioonoff == 1){
    radioonoff = 2;
    steuerung();
    Serial.write(0xFF);
    Serial.write(0xFF);
    Serial.write(0xFF);
    daten_display="";
  }
  if (daten_display == "radioaus" && radioonoff == 2){
    Serial.write(0xFF);
    Serial.write(0xFF);
    Serial.write(0xFF);
    daten_display="";
  }

  
  if (ledrot == 0){
    digitalWrite(8, LOW);
    Fire(0,0,0);
  }
  if (ledrot == 1){
    digitalWrite(8, HIGH);
    Fire(55,120,15);
  
  }

  
  if (ledgrun == 0){
    digitalWrite(9, LOW);
  }
  if (ledgrun == 1){
    digitalWrite(9, HIGH);
  }
}

void steuerung(){
  
switch (radioonoff){
  case 0: {
    digitalWrite(10, LOW);
    break;
  }
  case 1: {
    digitalWrite(10, HIGH);
    delay(200);
    digitalWrite(10, LOW);
    break;
  }
  case 2: {
    digitalWrite(10, HIGH);
    delay(1500);
    digitalWrite(10, LOW);
    break;
  }
  
}
}

Nextion Bild

Kann mir vielleicht einer Helfen ?
Vll bin ich einfach zu bl├Âd und ├╝bersehe was :smiley:

Danke und liebe Gr├╝├če
Wanhen

SerialMonitor:

image

Es ist keine gute L├Âsung, f├╝r die Steuerung des Nextion am Uno die Serielle Schnittstelle zu verwenden, da die schon f├╝r die USB-Kommunikation genutzt wird.
Verwende da lieber SoftwareSerial. Da kannst du andere Pins verwenden.

Welcher Arduino?
Wo hast Du denn Dein Nextion angeschlossen?

Edit: HotSystems war schneller :slight_smile:
Falls an Pin 0 und 1 (schlechte Wahl) kann es nur gehen, wenn der Arduino nicht gleichzeitig am Computer h├Ąngt.
Wenn woanders: Nicht auf Serial schreiben (das ist immer die Hardware-Schnittstelle an 0/1), sondern auf eine mit SoftwareSerial erzeugte zweite serielle Schnittstelle.

Zum Testen w├╝rde ich auch mal die radio/licht-Geschichte komplett rausnehmen.
Au├čerdem mal das "Home." rauslassen - bin mir gerade nicht sicher, dass man die Page auf diese Weise angeben kann.


Gru├č Walter

Lies dir auch bitte zwingend die Dokumentation zum Nextion durch.
Du kannst kein float auf das Nextion ├╝bertragen. Ein String musst du als txt und ein int als val anzeigen.
Anders geht es nicht.

So habe es auf SoftwareSerial.h umgeschrieben

#include <SoftwareSerial.h>
SoftwareSerial nextion(5,6);
//#include "pixel.h"

int tmp36 = A0;
int sensorwert;
int temperatur = 0;



String daten_display = "";
/*
int ledrot = 0;
int ledgrun = 0;
int radio = 0;

int radioonoff = 2;

int farben = 0;
*/

void setup() {
  nextion.begin(9600);
  
/*  strip.begin();
  strip.show();
  
  
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);

 
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);*/
}

void loop() {
  sensorwert=analogRead(tmp36);
  temperatur = map(sensorwert,0, 410, -50, 150);

  float tempar = temperatur;
  char outstr[15];
  
 // String command = "temp.txt=\""+String(temperatur)+"\""; ***Alter Versuch
  
  if(nextion.available() > 0)
  {
    daten_display += char (nextion.read());
    
  }
  if (daten_display == "tempa"){
    dtostrf(tempar, 1, 1, outstr);
    Serial.print(F("Home.temp.txt=\""));
    Serial.print(outstr);
    Serial.write('"');
    Serial.write(0xFF);
    Serial.write(0xFF);
    Serial.write(0xFF);
    daten_display="";
  }
}
    

Leider klappt das auch nicht :frowning:

Oder hab ich da auch was falsch geschrieben?

Danke f├╝r die schnellen Antworten:)

Lass Dir doch daten_display mal auf dem seriellen Monitor in HEX ausgeben, um zu sehen, was da alles kommt.

Gru├č Tommy

Wenn ich auf Display dr├╝cke kommt das im Serial Monitor

Passt das so?

Tolle, aussagekr├Ąftige Fehlerbeschreibung.
Geht es bitte etwas genauer ?
Was geht und was geht nicht ?

Und warum vermischst du die Ausgabe und Eingaben vom Display ?

Sorry,

also das Textfeld(temp) im Nextion Display bleibt leer!

Obwohl es im Serialmonitor ├╝bergibt.

Bei mir kommen immer drei ??? hinter dem Text Home.temp.txt="27,0"???
Ist das normal? Habe in anderen Foren gesehen das bei dene immmer drei yyy stehen!

Wie meinst du das ?

Sry, aber bin halt noch ein Anf├Ąnger, w├╝rde es aber gerne verstehen.
Komme leider nicht mehr weiter.

Ich sehe in deinem Sketch nicht das du auf das Display etwas schreibst. Du schickst es nur an die serielle Schnittstelle, daher deine drei Fragezeichen.
Du musst es auch an die SoftwareSerial schicken, damit du etwas siehst.

Du hast noch keinen Blick in die Dokumentation des Nextion geworfen oder davon nichts verstanden.
Das Nextion schlie├čt seine Ausgaben mit 3 Mal 0xff ab. Deshalb hatte ich auch die Ausgabe in HEX empfohlen.
Tutorial
Doku

Gru├č Tommy

Und einfach anfangen, indem du nur Text auf das Display ├╝ber die SoftwareSerial schickst. Und dazu findest du auch Infos in der Lib zu SoftwareSerial.

Z.B. kann eine einfache Textausgabe auf dein Display so aussehen, ohne den gabzen Firlefanz, den du dabei hast.

  nextion.print(F("Home.temp.txt=\""));       // Textfeld, das im Nextion gef├╝llt werden soll
  nextion.print("dein Text");                 // der Text
  Serial.write(0xFF);
  Serial.write(0xFF);
  Serial.write(0xFF);

Danke f├╝r die Info und die Links!

Werde ich mal durchlesen.

Gru├č Wanhen

Also das Senden mit deinem Code funktioniert, kann zumindest das dann ausschlie├čen.

Vielen Dank f├╝r die Info.

Gru├č Wanhen

Das ist doch schon mal ein Erfolg.
Was fehlt denn noch ?