[Code-Review]UART.IRQ Nextion Display
Verfasst: Sonntag 15. Februar 2026, 10:07
Guten morgen zusammen,
ich bitte euch mal wieder um ein kurzes Code-Review.
Im Netz habe ich eine Bibliothek zur Ansteuerung eines Nextion-Displays gefunden. Da ist eigentlich gar nichts spannendes drin. Mir hat aber gefehlt, dass ich die aktuelle Seite, die das Display anzeigt, nicht abfragen kann. Das habe ich als optionale Option eingebaut. Da ich mit UART nicht 100% vertraut bin und ich nicht weiß was man alles beachten muss, damit alle notwendigen Bytes gelesen werden bzw. das nichts unter geht und ich alle Möglichkeiten zur Verifizierung der/des Bytes eingebaut habe, wollte ich euch mal drüber schauen lassen.
Das Display sendet beim wechsel der Seite #\x02P\XX. XX steht für die Seitenzahl. Seite 1 wäre #\x02P\01.
Das Display ist an einen ESP32 angeschlossen. So wie ich es jetzt habe, macht es einen funktionsfähigen Eindruck. Ich zeige euch den ganzen Code. Die `if`-Abfrage in der `__init__` und `_set_current_page()` ist von mir.
Danke und einen schönen Sonntag
Dennis
ich bitte euch mal wieder um ein kurzes Code-Review.
Im Netz habe ich eine Bibliothek zur Ansteuerung eines Nextion-Displays gefunden. Da ist eigentlich gar nichts spannendes drin. Mir hat aber gefehlt, dass ich die aktuelle Seite, die das Display anzeigt, nicht abfragen kann. Das habe ich als optionale Option eingebaut. Da ich mit UART nicht 100% vertraut bin und ich nicht weiß was man alles beachten muss, damit alle notwendigen Bytes gelesen werden bzw. das nichts unter geht und ich alle Möglichkeiten zur Verifizierung der/des Bytes eingebaut habe, wollte ich euch mal drüber schauen lassen.
Das Display sendet beim wechsel der Seite #\x02P\XX. XX steht für die Seitenzahl. Seite 1 wäre #\x02P\01.
Das Display ist an einen ESP32 angeschlossen. So wie ich es jetzt habe, macht es einen funktionsfähigen Eindruck. Ich zeige euch den ganzen Code. Die `if`-Abfrage in der `__init__` und `_set_current_page()` ist von mir.
Code: Alles auswählen
from machine import UART
from time import sleep_ms
class Nextion:
END_COMMAND = b"\xff\xff\xff"
PAGE_NUMBER_VERIFICATION = b"#\x02P"
def __init__(self, baudrate, tx=10, rx=9, get_page_event=False, start_page=0):
self.uart = UART(1, baudrate, tx=tx, rx=rx)
if get_page_event:
self.uart.irq(handler=self._set_current_page, trigger=UART.IRQ_RXIDLE)
self.current_page = start_page
def change_page(self, page):
self.cmd(f"page {page}")
def _set_current_page(self, _):
line = self.uart.readline()
if len(line) == 4 and line[:3] == self.PAGE_NUMBER_VERIFICATION:
self.current_page = int(line[3:].hex())
def cmd(self, command, write_and_read=True):
self.uart.write(command)
self.uart.write(self.END_COMMAND)
if write_and_read:
sleep_ms(100)
return self.uart.read()
return None
def sleep(self, delay):
self.cmd(f"sleep={delay}")
def reset(self):
self.cmd("rest")
def brightness(self, brightness):
self.cmd(f"dim={brightness}")
def read(self, raw=False):
output = self.uart.read()
if raw:
return output
try:
return output.decode("ascii")
except AttributeError:
return None
Dennis