Это моя первая попытка создания настольного приложения на 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()
Любой совет, который здесь будет, очень поможет.