From ab977b3336d6429dce57843fa1f4594c88d43d66 Mon Sep 17 00:00:00 2001 From: Christoffer Martinsson Date: Sun, 13 Apr 2025 09:25:44 +0200 Subject: [PATCH] Edit spm6103_viewer.py --- spm6103_viewer.py | 87 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/spm6103_viewer.py b/spm6103_viewer.py index e69de29..3f9dfd5 100644 --- a/spm6103_viewer.py +++ b/spm6103_viewer.py @@ -0,0 +1,87 @@ +import tkinter as tk +from tkinter import messagebox +from tkinter.font import Font +import serial + +# Serial configuration +port = '/dev/ttyUSB0' # Adjust to your specific port +baud_rate = 115200 # Adjust to your device's baud rate + +try: + ser = serial.Serial(port, baud_rate, timeout=1) +except serial.SerialException as e: + ser = None + print(f"Serial port error: {e}") + +def send_command(command): + if not ser: + return "Serial port not available" + ser.write((command + '\n').encode('utf-8')) + response = ser.readline().decode('utf-8').strip() + return response + +def get_id(): + return send_command('*IDN?') + +def get_multimeter_data(): + rawdata = send_command(f'CONFigure:ALL?') + return rawdata + +def get_powersupply_data(): + rawdata = send_command(f'MEASure:ALL:INFO?') + return rawdata + +def set_res_mode(): + rawdata = send_command(f'[SENSe:]FUNCtion:RESistance') + return rawdata + +def set_cont_mode(): + rawdata = send_command(f'[SENSe:]FUNCtion:CONTinuity') + return rawdata + +# --- GUI Setup --- +def fetch_device_info(): + # Fetch the device ID and Channel data + device_id = get_id() + multimeter_data = get_multimeter_data() + + # Update the labels + multimeter_type_var.set(multimeter_data.split(",")[0]) + multimeter_data_var.set(multimeter_data.split(",")[1]) + multimeter_range_var.set(multimeter_data.split(",")[3]) + + # Schedule this function to be called again after 100ms + app.after(100, fetch_device_info) + +app = tk.Tk() +app.title("OWON SPM6103") +app.geometry("1080x200") +app.configure(bg="black") + +multimeter_type_var = tk.StringVar() +multimeter_data_var = tk.StringVar() +multimeter_range_var = tk.StringVar() + +# Create a font object +fontSmall = Font(size=10) +fontMedium = Font(size=20) +fontBig = Font(size=80) + +app.rowconfigure(0, weight=1) +app.rowconfigure(1, weight=1) +app.rowconfigure(2, weight=1) +app.columnconfigure(0, weight=1) +app.columnconfigure(1, weight=2) + +# Labels +tk.Label(app, textvariable=multimeter_type_var, font=fontMedium, bg="black", fg="lightgrey").grid(column=0, row=0, sticky=tk.W) +tk.Label(app, textvariable=multimeter_range_var, font=fontMedium, bg="black", fg="lightgrey").grid(column=1, row=0, sticky=tk.E) +tk.Label(app, textvariable=multimeter_data_var, font=fontBig, bg="black", fg="lightgrey").grid(column=0, columnspan=2, row=1, sticky=tk.W) +tk.Button(app, text="RES", command=set_res_mode, font=fontSmall, bg="black", fg="lightgrey", border=False).grid(column=0, row=2, sticky=tk.W) +tk.Button(app, text="CONT", command=set_cont_mode, font=fontSmall, bg="black", fg="lightgrey", border=False).grid(column=1, row=2, sticky=tk.W) + +# Initial fetch to start the auto-update process +fetch_device_info() + +# Start GUI +app.mainloop()