将 RS232 连接到串口并从 python 脚本建立到 Nextion 显示器的连接
Connecting RS232 to Serial and establishing a connection to Nextion display from a python script
我试图在我的 python 脚本和 Nextion 显示器之间建立串行通信。
我想创建一个自定义固件上传器,这样我就可以用它来代替 Nextion Editor。
不幸的是,我无法与屏幕建立连接(RS232 转串口已正确连接并检测到,我使用默认的 9600 波特率)。
发送后
DRAKJHSUYDGBNCJHGJKSHBDNÿÿÿ
connectÿÿÿ
ÿÿconnectÿÿÿ
它应该正确响应...
我从 Nextion 找到了一份解释上传协议的文档:https://nextion.tech/2017/12/08/nextion-hmi-upload-protocol-v1-1/
这是我的脚本,它会不时生成
b'$\xff\xff\xff'
import serial
from time import sleep
ser = serial.Serial('/dev/tty.usbserial-A94RJPXT',9600,timeout=0)
ser.write(str.encode(" DRAKJHSUYDGBNCJHGJKSHBDNÿÿÿ"))
ser.write(str.encode("\n"))
ser.write(str.encode(" connectÿÿÿ"))
ser.write(str.encode("\n"))
ser.write(str.encode(" ÿÿconnectÿÿÿ"))
ser.write(str.encode("\n"))
while True:
print(ser.readline())
sleep(0.1)
工作代码:
import serial
from time import sleep
ser = serial.Serial('/dev/tty.usbserial-A94RJPXT',9600,timeout=0)
ser.write("DRAKJHSUYDGBNCJHGJKSHBDNÿÿÿ".encode('iso-8859-1'))
ser.write("connectÿÿÿ".encode('iso-8859-1')) # could try some other encodings
ser.write("ÿÿconnectÿÿÿ".encode('iso-8859-1'))
while True:
data=ser.readline().decode('iso-8859-1')
if data !="":
print(data)
sleep(0.1)
如果您查看 this GitHub 提交,您会发现它们确实如此:
this->sendCommand("DRAKJHSUYDGBNCJHGJKSHBDNÿÿÿ");
this->sendCommand("connectÿÿÿ");
this->sendCommand("ÿÿconnectÿÿÿ");
这表明您不需要空格或换行符。如果这不起作用,您还应该考虑不同的编码(并使您当前的编码明确):
ser.write("DRAKJHSUYDGBNCJHGJKSHBDNÿÿÿ".encode('utf-8'))
ser.write("connectÿÿÿ".encode('utf-8')) # could try some other encodings
ser.write("ÿÿconnectÿÿÿ".encode('utf-8'))
我试图在我的 python 脚本和 Nextion 显示器之间建立串行通信。 我想创建一个自定义固件上传器,这样我就可以用它来代替 Nextion Editor。
不幸的是,我无法与屏幕建立连接(RS232 转串口已正确连接并检测到,我使用默认的 9600 波特率)。 发送后
DRAKJHSUYDGBNCJHGJKSHBDNÿÿÿ
connectÿÿÿ
ÿÿconnectÿÿÿ
它应该正确响应... 我从 Nextion 找到了一份解释上传协议的文档:https://nextion.tech/2017/12/08/nextion-hmi-upload-protocol-v1-1/
这是我的脚本,它会不时生成
b'$\xff\xff\xff'
import serial
from time import sleep
ser = serial.Serial('/dev/tty.usbserial-A94RJPXT',9600,timeout=0)
ser.write(str.encode(" DRAKJHSUYDGBNCJHGJKSHBDNÿÿÿ"))
ser.write(str.encode("\n"))
ser.write(str.encode(" connectÿÿÿ"))
ser.write(str.encode("\n"))
ser.write(str.encode(" ÿÿconnectÿÿÿ"))
ser.write(str.encode("\n"))
while True:
print(ser.readline())
sleep(0.1)
工作代码:
import serial
from time import sleep
ser = serial.Serial('/dev/tty.usbserial-A94RJPXT',9600,timeout=0)
ser.write("DRAKJHSUYDGBNCJHGJKSHBDNÿÿÿ".encode('iso-8859-1'))
ser.write("connectÿÿÿ".encode('iso-8859-1')) # could try some other encodings
ser.write("ÿÿconnectÿÿÿ".encode('iso-8859-1'))
while True:
data=ser.readline().decode('iso-8859-1')
if data !="":
print(data)
sleep(0.1)
如果您查看 this GitHub 提交,您会发现它们确实如此:
this->sendCommand("DRAKJHSUYDGBNCJHGJKSHBDNÿÿÿ");
this->sendCommand("connectÿÿÿ");
this->sendCommand("ÿÿconnectÿÿÿ");
这表明您不需要空格或换行符。如果这不起作用,您还应该考虑不同的编码(并使您当前的编码明确):
ser.write("DRAKJHSUYDGBNCJHGJKSHBDNÿÿÿ".encode('utf-8'))
ser.write("connectÿÿÿ".encode('utf-8')) # could try some other encodings
ser.write("ÿÿconnectÿÿÿ".encode('utf-8'))