Как отобразить значения беспроводной температуры и влажности в одном окне сообщений одновременно? - PullRequest
0 голосов
/ 26 декабря 2018

Это моя первая попытка создания настольного приложения на python.Я пытаюсь получить значения от Беспроводной датчик температуры , используя серийный пакет и с помощью пакета Tkinter в python

Я могу проверить значение в окне сообщения

Есть ли образец, который помогает мне показывать показания температуры в градусах Цельсия, Фаренгейта, Влажности в одном и том же окне сообщения?

Для интерфейса беспроводного датчика с 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()

Любой совет, который здесь будет, очень поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...