Потоковое чтение последовательного порта в Python (с графическим интерфейсом)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Потоковое чтение последовательного порта в Python (с графическим интерфейсом)

Сообщение Anonymous »

Я хочу инициировать событие всякий раз, когда есть данные, которые нужно прочитать из последовательного порта во время работы графического интерфейса. Модуль pySerial, очевидно, имеет для этого экспериментальную функциональность, но она не очень хорошо документирована (я не смог найти полезных примеров в API).
Появляется такой вопрос. для решения той же или, по крайней мере, очень похожей задачи, но не содержит инструкций по ее повторению или примеров рабочего кода.
Я придумал этот код:
import tkinter as tk
import serial
import threading

# Create GUI window
window = tk.Tk()

# Initialize the port
myPort = serial.Serial('/dev/ttyUSB0')

# Function to call whenever there is data to be read
def readFunc(port):
port.readline()
print('Line read')

# Configure threading
t1 = threading.Thread(target = readFunc, args=[myPort])
t1.start()

# Main loop of the window
window.mainloop()

Запуск действительно вызывает событие, но только один раз. Почему это? Есть ли «рекомендуемый» способ сделать это, используя функциональность самого pySerial?
В качестве альтернативы я бы также запустил функцию для чтения и обработки данных о событии. как и с элементами графического интерфейса. Если это лучшее решение, как это можно сделать?
Связанный вопрос (без ответа), вероятно, делает этот вопрос дубликатом.
Изменить: здесь — это минимальный пример, полученный из ответа ниже, который меняет текст метки всякий раз, когда данные считываются во входящие данные:
import tkinter as tk

from serial import Serial
from serial.threaded import ReaderThread, Protocol

app = tk.Tk()
label = tk.Label(text="A Label")
label.pack()

class SerialReaderProtocolRaw(Protocol):
port = None

def connection_made(self, transport):
"""Called when reader thread is started"""
print("Connected, ready to receive data...")

def data_received(self, data):
"""Called with snippets received from the serial port"""
updateLabelData(data)

def updateLabelData(data):
data = data.decode("utf-8")
label['text']=data
app.update_idletasks()

# Initiate serial port
serial_port = Serial("/dev/ttyACM0")

# Initiate ReaderThread
reader = ReaderThread(serial_port, SerialReaderProtocolRaw)
# Start reader
reader.start()

app.mainloop()


Подробнее здесь: https://stackoverflow.com/questions/706 ... with-a-gui
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Чтение данных акселерометра из последовательного порта в Python
    Гость » » в форуме Python
    0 Ответы
    54 Просмотры
    Последнее сообщение Гость
  • Чтение двоичных данных из прибора последовательного порта
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Чтение двоичных данных из прибора последовательного порта
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Чтение двоичных данных из прибора последовательного порта
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Чтение двоичных данных из прибора последовательного порта
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»