본문 바로가기

Nextion HMI 디스플레이를 시리얼로 업데이트 하는 파이썬 코드를 간단하게 작성했다.

NEXTION HMI UPLOAD PROTOCOL v1.1 을 참고해서 작성하면 되는데, 많은 코드들이 github에도 많이 있다.

아주 간단하게 그냥 기본적으로 기능만 확인했는데, 일단 업데이트는 정상적으로 되는 것 같다.

 

코드는 테스트 전용입니다. 사용상 에러에 대한 책임은 없습니다. ㅋㅋ 무책임 버전이니 필요하신 분만 참고하세요.

import os
import serial
import time

ser = serial.Serial("COM8", 9600, timeout=1)

while True:
    a = f"DRAKJHSUYDGBNCJHGJKSHBDN"
    print(a)
    ser.write(a.encode())
    ser.write(b"\xff\xff\xff")
    a = f"connect"
    print(a)
    ser.write(a.encode())
    ser.write(b"\xff\xff\xff")
    ser.write(b"\xff\xff")
    a = f"connect"
    print(a)
    ser.write(a.encode())
    ser.write(b"\xff\xff\xff")
    response = b""
    while response[-3:] != b"\xff\xff\xff":
        response += ser.read(1)
    print(response)
    if response[:5] == b"comok":
        break

while True:
    file_name = "testfw.tft"
    file_size = os.path.getsize(file_name)
    print(f"File size: {file_size} bytes")
    while True:
        a = f"whmi-wri {file_size},921600,0"
        ser.write(a.encode())
        ser.write(b"\xff\xff\xff")
        ser.close()
        ser = serial.Serial("COM8", 921600, timeout=1)
        time.sleep(0.5)
        ack = ser.read(1)
        if ack != b"\x05":
            print(f"Error: did not receive 0x05, received {ack.hex()}")
            ser.close()
            ser = serial.Serial("COM8", 9600, timeout=1)
        else:
            break

    with open(file_name, "rb") as f:
        while True:
            data = f.read(4096)
            if not data:
                break
            ser.write(data)
            print(".")
            time.sleep(0.2)
            ack = ser.read(1)
            if ack != b"\x05":
                print(f"Error: did not receive 0x05, received {ack.hex()}")
    print("complete.")
    break

간단하게 테스트하기에는 충분할 듯.

업로드 할때 시리얼 속도 변경되는 것
whmi-wri 명령에 대한 0x05 ack 확인 하는 것
파일을 4K 단위로 쪼개서 보내는 거랑 0x05 값을 확인 하는것만 주의 하면 된다.

이제 Nextion Editor 없이도 tft 파일만 있으면 업데이트 할 수 있다. 

Nextion 시리얼 업데이트

참고 페이지

https://nextion.tech/2017/12/08/nextion-hmi-upload-protocol-v1-1/

 

NEXTION UPLOAD PROTOCOL (v1.1) - Nextion

Here we disclose additional considerations to the Upload Protocol beginning with Nextion Editor v0.53 and later.

nextion.tech

https://github.com/urbanze/esp32-nextion-uploader/blob/master/nxt.cpp

 

GitHub - urbanze/esp32-nextion-uploader: ESP32 - Nextion screen uploader over serial (UART)

ESP32 - Nextion screen uploader over serial (UART) - GitHub - urbanze/esp32-nextion-uploader: ESP32 - Nextion screen uploader over serial (UART)

github.com

https://itead.cc/nextion/nextion-hmi-upload-protocol/

 

NEXTION HMI UPLOAD PROTOCOL

Many customers use the Nextion display in their own business projects. They may need to upload the Nextion firmware through their own MCU. Here we disclose the upload protocol and release the Ardui…

itead.cc

 

B로그0간

개발 관련 글과 유용한 정보를 공유하는 공간입니다.