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 ?

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.