这是我第一次尝试在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()
这里的任何建议都会有很大帮助。