Toch Display an ESP32 anschliessen

Hallo alle zusammen,
es ist wieder ein mal Freitag und damit Zeit für die ersten Problemchen.
Ich habe folgendes Display:

Das funktioniert auch echt super am UNO und Mega.
Seit kurzem habe ich aber jetzt ein ESP32 Dev. Board.
nun würde ich gerne die beiden mit einnander verbinden bin mir aber nicht sicher wie und mit welcher Lib? Für den Anfang würde ich mich schon über eine grafische Darstellung freuen.
Wenn ich die mitgelieferte Lib verwende sagt diese das Board wird nicht unterstützt.
Also hab ich mich auf die suche nach eine alternativen Lib begeben und auch(so hoffe ich) was gefunden. Allerdings sind die beschriftungen hier anders.
Hier mal den ersten teil: des Beispiels:

#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

// For the ESP-WROVER_KIT, these are the default.
#define TFT_CS   22
#define TFT_DC   21
#define TFT_MOSI 23
#define TFT_CLK  19
#define TFT_RST  18
#define TFT_MISO 25
#define TFT_LED   5  // GPIO not managed by library

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);

und im Anhang das Bild von der Belegung des Displays:
könnt ihr mir weiterhelfen?

belegung.png

Das wirst du nicht zum Laufen bringen.

Das Display ist für den parallelen Betrieb vorgesehen, du willst es aber per SPI ansteuern, das geht nicht.

Das nächste Problem ist die Spannung.
Das Display ist für 5 Volt ausgelegt, der ESP für 3,3 Volt, das passt nicht zusammen.

das ist zwar ergerlich aber besser als wenn ich hier noch mehr Zeit in ein Sinnloses Unterfangen inwestiere
Danke

Gundelputz:
das ist zwar ergerlich aber besser als wenn ich hier noch mehr Zeit in ein Sinnloses Unterfangen inwestiere
Danke

Alternative wäre ein Nextion, da sollte dann ein Widerstand in der seriellen Leitung reichen.

Moin,

Ich habe sowas am laufen.
Ich hab 2,8" mit 320x200, 3,5" und 4" (im Zulauf) mit 480x320 an einem ESP8266 laufen.
Wenn das geht, dann geht es auch sicher mit einem ESP32.
Allerdings hatte ich auch erst das von dir beschriebene Display, und das funktionierte leider nicht, wegen der parallelen Schnittstelle.
Du brauchst ein Display mit einer echten SPI Schnittstelle.

Lieben Gruß,
Chris

Danke für den Tip
ist schon bestellt

Hallo zusammen,
Das Nextion display ist vorgestern angekommen. Habe erstmal alle Library durchprobiert und versucht zu verstehen.
Zum Testen habe ich nun eine Anzeige mit zwei Button erstellt.
mir ist zwar das meiste aus den CompButton Sketch verständlich aber mit der void b0popCallback Funktion tu ich mich noch schwer.

void b0PopCallback(void *ptr)
{
    uint16_t len;
    uint16_t number;
    NexButton *btn = (NexButton *)ptr;
    dbSerialPrintln("b0PopCallback");
    dbSerialPrint("ptr=");
    dbSerialPrintln((uint32_t)ptr); 
    memset(buffer, 0, sizeof(buffer));
    btn->getText(buffer, sizeof(buffer));
    
    number = atoi(buffer);
    number += 1;

    memset(buffer, 0, sizeof(buffer));
    itoa(number, buffer, 10);
    
    btn->setText(buffer);
}

die ersten beiden Zeilen sind klar: Varianten für Text

mit der dritten Zeile habe ich dann so meine schwierigkeiten:
NexButton *btn = (NexButton *)ptr;
wofür die * und was verbirgt sich hinter ptr (ich vermute der Rückgabeaufruf)?

hinter dbSerialPrintln vermute ich die serielle komunikation zwischen Mega und Display

memset(buffer, 0, sizeof(buffer));
hier vermute ich das speichern der Zeichenlänge

btn->getText(buffer, sizeof(buffer));
und hier müsste ich auch Raten

number = atoi(buffer);
umwandeln des Text in buffer zu Zahl und speichern in number

number += 1;
inhalt von number + 1

memset(buffer, 0, sizeof(buffer));
wie gehabt

itoa(number, buffer, 10);
zurückumwandel von Zahl in Text wobei mir die 10 nicht so richtig einleuchtet(evtl. begrenzung der Zeichenlänge)

btn->setText(buffer);
zurückschreiben des neuen Wertes zum Display

könnt ihr mir bei der "Übersetzung" helfen

oder gibt es vieleicht eine einfachere möglichkeit den Button abzufragen?

Suche mal hier im Forum nach Nextion.
Da findest du dann viele Vorschläge und du solltest möglichst auf die Nextion-Library verzichten.
Hier die original Nextion Beschreibung

Lass die Lib weg und schaue Dir mal dieses Tutorial an.
Dazu natürlich das Wiki des Herstellers.

Gruß Tommy

wenn ich das richtig verstehe soll ich die Nextion Library aussen vor lassen und die serielln Daten abfragen, verarbeiten und senden?

Gundelputz:
wenn ich das richtig verstehe soll ich die Nextion Library aussen vor lassen und die serielln Daten abfragen, verarbeiten und senden?

Richtig, das ist zumindest einfacher und funktioniert auch problemlos.
Ich habe bisher bei keinem meiner Projekte die Library eingesetzt.

wollte zwar grade ins fitness aber das muss ich noch gleich mal probieren

Gundelputz:
wollte zwar grade ins fitness aber das muss ich noch gleich mal probieren

Das ist doch auch Fitness, "Gehirn-Jogging" . :wink:

ich hätte jetzt gedacht das ich zum testen ins void setup() mal folgendes schreibe:

dbSerialPrint("b0.txt=");
dbSerialPrintln("OK");
dbSerial.write(0xff);
dbSerial.write(0xff);
dbSerial.write(0xff);

ist aber fehlgeschlagen
hätte mir hier gewünsch das der Text vom Button auf OK umgestellt wird

Ich hab dann versucht was eigenes zu schreiben

#include <SoftwareSerial.h>
SoftwareSerial mein_nextion(16, 17); // RX, TX

void setup()
{
   Serial.begin(9600);//für Monitor
   mein_nextion.begin(9600);

    mein_nextion.print("b0.txt=");
    mein_nextion.println("OK");
    mein_nextion.write(0xff);
    mein_nextion.write(0xff);
    mein_nextion.write(0xff);
}

void loop()
{
  if (mein_nextion.available()) 
  {
    Serial.write(mein_nextion.read());
  }
  if (Serial.available()) 
  {
    mein_nextion.write(Serial.read());
  }
}

Das war dann eher auch von mässigen Erfolg

hast du mal einen simplen Beispielcode fürs senden und empfangen
ich glaube dann erschlisst sich für mich schon ein wenig mehr

Und die Pins hast du auch richtig gewählt ?
Ich habe keinen ESP32, daher die Nachfrage.

habe jetz die Pins 11 + 12, 16 +17, 0 + 1 probiert. Natürlich auch verpollt
momentan arbeite ich mit von Böcker vorgeschlagenen Weg und habe folgendes Beispiel zusammen gebastelt:

#include <SoftwareSerial.h>
#include <Nextion.h>


void setup()
{
  Serial.begin(9600);//für Monitor
  dbSerial.begin(9600);//für Nextion
  senden();
}

void loop()
{
  
}
 void senden()
 {
  dbSerial.print("b0.txt=");
  //dbSerial.write(0x22);
  dbSerial.print("Hello");
  //UdbSerial.write(0x22);
  dbSerial.write(0xff);
  dbSerial.write(0xff);
  dbSerial.write(0xff);  
 }

auch habe ich es mit einer eigenen Seriellen verbindung versucht

#include <SoftwareSerial.h>
SoftwareSerial meinNex(16, 17);
void setup()
{
   Serial.begin(9600);//für Monitor
   meinNex.begin(9600);
   senden();
}

void loop()
{
  
}
 void senden()
 {
  meinNex.print("t0.txt=");
  meinNex.write(0x22);
  meinNex.print("Hello");
  meinNex.write(0x22);
  meinNex.write(0xff);
  meinNex.write(0xff);
  meinNex.write(0xff);  
 }

igendwie alles umsonst

Ich hätte auch einen ESP32 da
um genau zu sein möchte ich das Display genau an diesem Nutzen

also wenn du mir hier ein Beispiel zeigen könntest währe ich sehr Dankbar

Hast Du Levelshifter dran? Es könnte sein, dass der High-Pegel von ESP nicht ausreicht, das 5V-Display zu treiben. Theoretisch sollte es reichen aber praktisch?

Ausreichende externe Stromversorgung fürs Display setze ich voraus.

Gruß Tommy

mein Fehler
habe HotSystems Nachricht falsch gelesen(Brill jetzt aufgesetzt)
habe verstanden er hat nur einen ESP32
Da bei Github steht das die Nation Lib für einen Mega erstellt wurde teste ich auch erst mal an einen Mega

also zurück auf Anfang meiner Fragen
habe mir noch mal den original Nextion Code vorgenommen und ihn zerlegt
er ist zwar etwas holperig zu verstehen aber ich glabe jetzt ein wenig mehr verstanden zu haben
nach dem ich alles überflüssige entfernt habe und eine kontrollfunktion via LED eingebaut habe sieht es jetzt so aus:

#include "Nextion.h"

NexButton b0 = NexButton(0, 1, "b0");

char buffer[100] = {0};

int LED_13 = 13;
int LED13 = 0;

NexTouch *nex_listen_list[] = 
{
    &b0,
    NULL
};

uint32_t Inhalt;

void b0PopCallback(void *ptr)
{
  if(LED13 == 0)
  {
    digitalWrite(LED_13, HIGH);
    LED13 = 1;
  }
  else
  {
    digitalWrite(LED_13, LOW);
    LED13 = 0;
  }
  
  /*
    NexButton *btn = (NexButton *)ptr;//erstellt einen "algemeinen" Button
    memset(buffer, 0, sizeof(buffer));//liest den Inhalt des Speicher ein und bestimmt dessen länge
    
    btn->getText(buffer, sizeof(buffer));//fragt den Inhalt des Textes vom Button ab

    Inhalt = buffer;//schreibt den Inhaltdes buffer in Inhalt(noch nicht geprüft ob i.O.)

    btn->setText("OK");//setzt neuen Text für Button 
    */
}

void setup(void)
{ 
  pinMode(LED_13, OUTPUT);
  digitalWrite(LED_13, LOW);   
  
  nexInit();
  b0.attachPop(b0PopCallback, &b0);
}

void loop(void)
{   
    nexLoop(nex_listen_list);
    
}

dieses Ergebnis ist für meine weiteren Versuche erst mal ausreichend.
Nicht des do Trotz würde mich die Serielle steuerung ertrem interessieren.

Danke wie immer erstmal an euch alle
Gute Nacht