【问题标题】:PyQT5 - How to display in QLCD widget part of emited signal from serial?PyQT5 - 如何在 QLCD 小部件中显示串行发出的信号的一部分?
【发布时间】:2020-10-24 20:07:42
【问题描述】:

我已将 Arduino 连接到 RPi,其中 Arduino 不断地逐行发送有关实际温度的信息(目前仅来自一个传感器,稍后我将添加更多传感器)。现在只接收一个信息没有问题,但稍后我会从 Arduino 发送更多数据,如下例所示:

1213141516

其中:12 是第 1 个传感器的温度,13 是第 2 个传感器的温度,等等。

我的线程代码:

#Worker
class SerialThreadClass(QThread):
    signal = pyqtSignal(str)

    def __init__(self, parent=None):
        super(SerialThreadClass, self).__init__(parent)
        self.serialport = serial.Serial()
        self.serialport.baudrate = 9600
        self.serialport.port='/dev/cu.usbmodem14101'
        self.serialport.open()

    def run(self):
        while True:
            rdln = self.serialport.readline().decode('utf-8').rstrip()
            self.signal.emit(str(rdln))  # pipe
            print(rdln)

我在 MainWindow 中的代码:

#MainWindow 
        self.mySerial = SerialThreadClass()
        self.mySerial.start()
        self.mySerial.signal.connect(self.ui.average_temp.display)

我不知道如何将此字符串拆分为多个 qlcd 小部件?! 对不起我的英语;)

编辑: 我找到了一个想法,也许它不是正确的方法,但它正在工作:

self.signal.emit(str(rdln[0:2]))

但是问题并没有100%解决,因为我可以读取“信号块”,但是如何根据这部分信号进行平均?

【问题讨论】:

    标签: python arduino raspberry-pi pyqt5 pyserial


    【解决方案1】:

    这与QLCD无关,而与字符串处理有关。

    如果你确定数据总是成对的,你可以像这样拆分字符串:

    values = [rdln[i:i+2] for i in range(0, len(rdln), 2)]
    

    但是,既然你说你需要平均值,那么这些字符串必须转换为数字,所以你最好这样做:

        total = 0
        for i in range(0, len(rdln), 2):
            total += (int(rdln[i:i+2]))
        average = total / len(rdln)
    

    【讨论】:

    • 非常感谢,我确定每个传感器的数量 - 这是由 Arduino 确定的
    • 出了点问题,我收到了这样的消息:['73', '62','12']1698231440
    • 请澄清,“我收到类似的东西”是完全没用的,除非你至少指定你是如何得到这个结果的。
    猜你喜欢
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多