如何同时在同一消息框中显示无线温度和湿度值?

时间:2018-12-26 10:33:47

标签: python tkinter arduino

这是我第一次尝试在python中创建桌面应用程序。 我正在尝试使用串行软件包并借助python中的Tkinter软件包从Wireless Temperature sensor接收值

我可以在消息框中测试值

在同一消息框中是否有任何样本可以帮助我显示摄氏度,华氏度,湿度的温度读数?

对于与Arduino的无线传感器接口,我正在使用代码:

uint8_t data[29];
int k = 10;
int i;

void setup()
{
    Serial1.begin(9600);
    Serial.begin(9600);
    Serial.println("ncd.io IoT Arduino wireless temperature Humidity sensor");
}

void loop()
{
    if (Serial1.available())
    {
        data[0] = Serial1.read();
        delay(k);
        if(data[0]==0x7E)
        {
            while (!Serial1.available());
            for (i = 1; i< 29; i++)
            {
                data[i] = Serial1.read();
                delay(1);
            }
            if(data[15]==0x7F)  /////// to check if the recive data is correct
            {
                if(data[22]==1)  //////// make sure the sensor type is correct
                {
                    float humidity = ((((data[24]) * 256) + data[25]) /100.0);
                    int16_t cTempint = (((unit16_t)(data[26])<<8)| data[27];
                    float cTemp = (float)cTempint /100.0;
                    float fTemp = cTemp * 1.8 + 32;
                    float battery = ((data[18] * 256) + data[19]);
                    float voltage = 0.00322 * battery;

                    Serial.print("Sensor Number  ");
                    Serial.println(data[16]);
                    Serial.print("Sensor Type  ");
                    Serial.println(data[22]);
                    Serial.print("Firmware Version  ");
                    Serial.println(data[17]);
                    Serial.print("Relative Humidity :");
                    Serial.print(humidity);
                    Serial.println(" %RH");
                    Serial.print("Temperature in Celsius :");
                    Serial.print(cTemp);
                    Serial.println(" C");
                    Serial.print("Temperature in Fahrenheit :");
                    Serial.print(fTemp);
                    Serial.println(" F");
                    Serial.print("ADC value:");
                    Serial.println(battery);
                    Serial.print("Battery Voltage:");
                    Serial.print(voltage);
                    Serial.println("\n");
                    if (voltage < 1)
                    {
                        Serial.println("Time to Replace The Battery");
                    }
                }
            }
            else
            {
                for (i = 0; i< 29; i++)
                {
                    Serial.print(data[i]);
                    Serial.print(" , ");
                    delay(1);
                }
            }
        }
    }
}

我之前已经按照以下说明测试了此示例:

仅显示数据,该数据使用串行命令显示数据

Serial.println("HELLO");

代替命令

Serial.print("HELLO");

另一个问题是,它一次只显示一条消息,但是我希望所有串行数据消息仅一次显示在一个messagebox

我已经制作了这个样本进行测试

对于Arduino:

void setup() {
    Serial.begin(9600);
    delay(1000);
}

void loop() {
    Serial.println("HELLO");
    Serial.println("HELLO1");
    Serial.println("HELLO2");
    delay(1000);
}

对于Python代码:

import serial
import json
import tkinter
from tkinter import messagebox

top = tkinter.Tk()

ard = serial.Serial('COM4', 9600);

def helloCallBack():
    k = ard.readline().decode('ascii');
    if (len(k)>0):
        print (k);
        size = len(k);
        #print (k[0:size-2]);
        print (size);
        messagebox.showinfo('Message From Arduino',k[0:size-2]+'\n'+str(size))

B = tkinter.Button(top, text ="Hello", command = helloCallBack)
B.pack()
top.mainloop()

这里的任何建议都会有很大帮助。

0 个答案:

没有答案