Nextion upload Skript

  • Hi,



    hier ist das nextion upload Skript. Mit Hilfe des Skripts kann eine neue tft Datei in das Nextion Display hochgeladen werden ohne das das Nextion aus der DoorPi rausgenommen werden muss um es mit einer SD-Karte zu beschrieben.


    Voraussetzung ist das das Nextiondisplay direkt auf raspberry pi angeschloßen ist mit USB-TTL.


    NextionUpload Skript auf GitHub


    Viel Spaß,
    OmerBeg

  • Hi,


    der Aufruf ist einfach:


    Code
    $ python nextionupload.py nextiondisplaycode.tft


    in dem nextionupload.py ist am Anfang eingestellt das USB-TTL auf den hier definiert Port ist:


    Code
    PORT = '/dev/ttyUSB0'
    BAUDCOMM = 9600
    BAUDUPLOAD = 115200
  • Das Thema ist zwar schon etwas älter, aber vielleicht kann mir jemand trotzdem meine Frage beantworten. Funktioniert der Upload nur über einen USB-TTL oder ist das auch direkt über die Serial des Raspi (gpio 14,15) möglich?

  • Das Thema ist zwar schon etwas älter, aber vielleicht kann mir jemand trotzdem meine Frage beantworten. Funktioniert der Upload nur über einen USB-TTL oder ist das auch direkt über die Serial des Raspi (gpio 14,15) möglich?

    Ich habe es nicht über die Serial von Raspi versucht, theoretisch sollte es gehen, nur die RX/TX sollen richtig angeschloßen sein und von dem Raspi die 5V an das Nextion weitergegeben werden.

  • Ich habe mein Nextion über Kreuz an meinem Raspi angeschlossen, also rx Nextion an tx Raspi und umgekehrt. Des weiteren habe ich per raspi-config das Shell Login per Serial deaktiviert bzw. den Serial Port eingeschaltet. in dem Python Script habe ich




    Code
    PORT = '/dev/ttyAMA0'


    eingefügt. Der Upload funktioniert so leider nicht. Das Script bleibt bei



    Code
    waiting hmi


    stehen. Hier noch meine cmdline.txt


    Code
    dwc_otg.lpm_enable=0 console=tty1 root=/dev/nfs nfsroot=192.168.178.31:/media/nfsboot/pi4 udp,vers=3 smsc95xx.turbo_mode=N rw ip=dhcp rootwait elevator=deadline



    Gehören noch weitere Schritte dazu, um den Serial Port nutzen zu können? Wo könnte mein Fehler liegen?

  • Ich habe ein "getty" noch abschaltet:

    Brainfuck
    systemctl disable serial-getty@ttyAMA0.service


    Wenn du einen Raspberry 3 hast und noch Probleme mit der seriellen Schnittstelle, dann soll folgendes, am Ende, der /boot/config.txt helfen:


    Brainfuck
    dtoverlay=pi3-miniuart-bt

    Da ich nur einen Raspberry 1 habe, weiß ich dazu nichts weiteres.


    Viele Grüße
    Olaf

  • Auch per /dev/ttyS0 funktioniert es leider nicht



    Mittlerweile habe ich auch die USB Variante getestet. Die funktioniert hingegen problemlos. Allerdings würde ich die Variante ohne USB Adapter bevorzugen

  • Hat irgendwer ne Idee, warum es nicht funktioniert? Das Display wird beim Uploadweiß und schreibt: writing DATA - also ganz normaler Upload Vorgang. Ich bekomme auch keine Verbindung vom Doorpi aus zum Display. Das einfachste ist ja erstmal die Seiten mit page 1 anzusprechen, aber auch da kommt nix. Ich kann also derzeit nur eine Verbindung via upload herstellen, die aber auch nicht ordnungsgemäß funktioniert.


    Nextion ist via USB/TTL angeschlossen. Serial ist in raspi-config eingeschaltet, shell aus

    die /boot/cmdline.txt ist angepasst mit console=ttyUSB0

    die /boot/config.txt ist angepasst mit enable_uart=1 und dtoverlay=pi3-disable-bt


    Selbst die AbstractBaseClass.py von WAL ist abgelegt. Bin echt ratlos, da am Windows Rechner der Upload und die Commands funktionieren über den USB/TTL.


    root@raspberrypi:/home/pi# python nextionupload.py 210317.tft

    uploading 210317.tft (2146652 bytes)...

    <'omok 1,306110,NX4024K032_11R,151,61489,E469D06263385E2F,6777216\xff\xff\xff'>

    waiting hmi

    Exception in thread Thread-1:

    Traceback (most recent call last):

    File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner

    self.run()

    File "/usr/lib/python2.7/threading.py", line 754, in run

    self.__target(*self.__args, **self.__kwargs)

    File "nextionupload.py", line 36, in reader

    r = ser.read(128)

    File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 501, in re ad

    'device reports readiness to read but returned no data '

    SerialException: device reports readiness to read but returned no data (device d isconnected or multiple access on port?)


    kurzes Update:


    mit folgendem Skript kann ich das Nextion ansprechen. Die Verbindung scheint also zu funktionieren:


    #!/usr/bin/env python

    import time

    import serial

    EndCom = "\xff\xff\xff"

    ser = serial.Serial(

    port='/dev/ttyUSB0',

    baudrate = 9600,

    parity=serial.PARITY_NONE,

    stopbits=serial.STOPBITS_ONE,

    bytesize=serial.EIGHTBITS,

    timeout=1

    )

    ser.write("page 3"+EndCom)

    time.sleep (1)

    x=ser.readline()

    print x

    ser.write("page 1"+EndCom)

    time.sleep (1)

    x=ser.readline()

  • Verstanden, funktioniert. Danke


    Aber warum bekomme ich keine Verbindung zum Nextion via Doorpi? magst du da mal drüber schauen? im from_nextion.py habe ich den Port entsprechend auf ttyUSB0 gesetzt.


    hier mal meine doorpi.ini:


    [AREA_installer]

    .* =


    [AdminNumbers]

    **610 = active


    [DoorPi]

    base_path = /usr/local/etc/DoorPi

    eventlog = !BASEPATH!/conf/eventlog.db

    is_alive_led =

    last_snapshot = http://192.168.2.82:9090/?action=snapshot

    number_of_snapshots = 10

    snapshot_path = /tmp


    [DoorPiWeb]

    indexfile = index.html

    ip =

    loginfile = login.html

    online_fallback = http://motom001.github.io/DoorPiWeb

    port = 80

    public = AREA_public

    www = !BASEPATH!/../DoorPiWeb


    [EVENT_OnKeyPressed_prodsystem.0]

    10 =

    20 = mqtt:192.168.2.128,1111,doorpi/action/Klingel,true,false

    30 = call:+49************@sip.linphone.org

    40 = os_execute:/usr/local/etc/DoorPi/scripts/klingel.sh

    60 = klingelbild


    [EVENT_OnKeyPressed_prodsystem.1]

    10 = wakeup

    20 = wakeup


    [EVENT_OnKeyPressed_prodsystem.2]

    10 = ipsrpc_setvalue:55958:True

    20 = mqtt:192.168.2.128,1111,doorpi/action/Klingel,true,false


    [EVENT_OnMediaRequired]


    [EVENT_OnShutdown]

    10 = mqtt:192.168.2.128,1111,doorpi/action/start,false


    [EVENT_OnStartup]

    10 = sleep:0

    20 = os_execute:/usr/local/etc/DoorPi/scripts/start.sh


    [Group]

    administrator = door


    [SIP-Phone]

    firewallpolicy = PolicyNoFirewall

    audio_codecs = PCMA,PCMU

    call_timeout = 15

    capture_device =

    dialtone = !BASEPATH!/media/Dingdong.wav

    dialtone_renew_every_start = False

    dialtone_volume = 35

    echo_cancellation_enabled = True

    identity = DoorPi

    local_port = 5060

    max_call_time = 120

    mic_gain_db = 0

    playback_device = ALSA: Unitek Y-247A

    record_while_dialing = False

    records = !BASEPATH!/records/%Y-%m-%d_%H-%M-%S.wav

    sipphonetyp = linphone

    sipserver_password = *********

    sipserver_realm = fritz.box

    sipserver_server = 192.168.2.1

    sipserver_username = Tueranlage

    stun_server =

    ua.max_calls = 2

    video_codecs = VP8

    video_device = V4L2: /dev/video0

    video_display_enabled = False

    video_size = vga


    [User]

    door = pi


    [WritePermission]

    administrator = installer


    [keyboards]

    dummy = dummy

    next = nextion

    prodsystem = piface

    web = url


    [next_InputPins]

    1234 = Privat

    5678 = Postbote


    [next_OutputPins]

    klingelbild = page 3

    sleep = sleep=1

    wakeup = sleep=0


    [next_keyboard]

    baudrate = 9600

    bouncetime = 2000

    input_max_size = 255

    input_stop_flag = \n

    polarity = 0

    port = /dev/ttyUSB0

    pressed_on_keydown = True


    [prodsystem_InputPins]

    0 = mqtt:192.168.2.128,1111,doorpi/action/start,true


    [prodsystem_OutputPins]

    0 = Klingelschild

    1 = reserve


    [prodsystem_keyboard]

    bouncetime = 200

    polarity = 0

    pressed_on_keydown = True


    [web_keyboard]

    bouncetime = 2000

    polarity = 0

    pressed_on_keydown = True


    auch hier nochmal ein kurzes Update: die Pineingabe aus dem Nextion kommt an und löst auch meine weiterführenden MQTT Signale aus. Es geht also nur noch darum, wie ich die seiten wechsel und das Display aufwecke.

  • Ich habe DoorPi schon seit 2 Jahren nicht mehr am laufen, da ich ioBroker nutze habe ich mir einen neuen Adapter(doorio) erstellt.


    Aber ich habe meine Config noch gesichert und kann dir sagen, das bei mir unter next_keyboard nichts steht.