用于具有多个传感器输入的arduino项目的RPi中的Tkinter GUI

时间:2017-01-16 15:30:12

标签: python tkinter arduino serial-port raspberry-pi

我有一个 arduino 机器人收集5种不同的传感器数据(火焰,气体,距离,温度和金属传感器)。现在,我在 arduino IDE 的串行监视器中显示这些内容时没有任何问题。但是当我将 arduino 连接到 RPi 并尝试通过 TKinter GUI单独显示它时,我遇到了麻烦,它们全部显示在一起,我找不到分离数据的方法,并将它们插入到显示屏上的单独日志中。

到目前为止,我已尝试过:

  1. 软件序列 - 由于缺少文档而被删除,因此我无法在 RPi 方面进一步设置它。
  2. split() - 这会引起如此多的麻烦,因为串行数据会持续几秒钟,并且我会不断收到索引错误。
  3. arduino方面:

    #define trigPin 12
    #define echoPin 13
    #include<dht.h>
    dht DHT;
    #define DHT11_PIN 3
    
    void setup() {
      Serial.begin (9600);
      Serial1.begin (9600);
    
      pinMode(trigPin, OUTPUT);
      pinMode(echoPin, INPUT);
    }
    
    void loop() 
    { 
      int chk = DHT.read11(DHT11_PIN);
      long duration, distance;
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
      duration = pulseIn(echoPin, HIGH);
      distance = (duration/2) / 29.1;
    
      Serial.print(distance);
      Serial.println(" ");
      Serial.print (DHT.temperature, 1);
      Serial.println(" ");
      delay(5000);
    }
    

    事物的python方面:

        from tkinter import *
    import serial
    import time
    ardSerialData = serial.Serial("COM5", 9600)
    root = Tk()
    root.wm_title("sensor data")
    root.config(bg = "#828481")
    
    rightFrame = Frame(root, width=200, height = 600, highlightthickness=2, highlightbackground="#111")
    rightFrame.grid(row=0, column=1, padx=100, pady=2, sticky=N+S)
    
    UltraLog = Text(rightFrame, width = 20, height = 10, takefocus=0, highlightthickness=1, highlightbackground="#333")
    UltraLog.grid(row=0, column=0, padx=10, pady=2)
    
    TempLog = Text(rightFrame, width = 20, height = 15, takefocus=0, highlightthickness=1, highlightbackground="#333")
    TempLog.grid(row=0, column=1, padx=10, pady=2)
    
    def getRaw():
        if (ardSerialData.inWaiting() > 0):
            raw = ardSerialData.readline()
            sensor = raw.split()
            return sensor
    
    def ultDisp():
        ultData = sensor[0]
        if (ardSerialData.inWaiting() > 0):
            UltraLog.insert(0.0,ultData)
            root.after(1000, ultDisp)
        else:
            UltraLog.insert (0.0, "no Ultra")
            root.after(2000, ultDisp)
    
    def tempDisp():
        tempData = sensor[1]
        if (ardSerialData.inWaiting() > 0):
            TempLog.insert(0.0,tempData)
            root.after(1000, tempDisp)
        else:
            TempLog.insert (0.0, "no temp ")
            root.after(2000, tempDisp)
    
    root.after(6000, ultDisp)
    root.after(6000, tempDisp)
    root.mainloop()
    

    在我放弃并来到这里之前,这些是我的代码的最后一次尝试。 我需要帮助从 arduino 串行分割我的数据并在各自的日志中显示传感器数据。在打印出来自 arduino 的数据之前,我尝试使用空间甚至关键字进行拆分在超声波传感器数据之前&#34; u&#34; 以及在温度传感器数据之前&#34;#34;

    此外,如果有一个不同的,更容易的方法,请建议。

0 个答案:

没有答案