Sscom English — Version
However, the request is too broad. I'll assume you want a of sscom (English version) — a Serial Port Communication Assistant in Python, with a GUI.
# Send area send_frame = tk.LabelFrame(self.root, text="Send Data", padx=5, pady=5) send_frame.pack(fill="x", padx=10, pady=5)
# Receive area recv_frame = tk.LabelFrame(self.root, text="Received Data", padx=5, pady=5) recv_frame.pack(fill="both", expand=True, padx=10, pady=5)
def send_hex_data(self): if not self.serial_port or not self.serial_port.is_open: messagebox.showerror("Error", "Port not opened.") return hex_str = self.send_text.get("1.0", tk.END).strip() # Remove spaces, newlines hex_str = ''.join(hex_str.split()) try: data = bytes.fromhex(hex_str) self.serial_port.write(data) except ValueError: messagebox.showerror("Hex Error", "Invalid hex string (e.g., '01 AB CD')")
def open_port(self): if not self.port_combo.get(): messagebox.showerror("Error", "Select a serial port first.") return try: baud = int(self.baud_combo.get()) self.serial_port = serial.Serial(self.port_combo.get(), baud, timeout=0.1) self.running = True self.receive_thread = threading.Thread(target=self.receive_data, daemon=True) self.receive_thread.start() self.open_btn.config(text="Close Port", bg="lightcoral") self.status_label.config(text=f"Status: Opened {self.port_combo.get()} @ {baud} baud") except Exception as e: messagebox.showerror("Error", f"Cannot open port:\n{e}")
def receive_data(self): while self.running and self.serial_port and self.serial_port.is_open: try: if self.serial_port.in_waiting: data = self.serial_port.read(self.serial_port.in_waiting) if data: self.display_received(data) except Exception as e: print(f"Receive error: {e}") break time.sleep(0.01)
# GUI self.create_widgets()
self.status_label = tk.Label(self.root, text="Status: Port closed", bd=1, relief=tk.SUNKEN, anchor=tk.W) self.status_label.pack(side="bottom", fill="x")
tk.Label(settings_frame, text="Baudrate:").grid(row=0, column=2, sticky="w", padx=(10,0)) self.baud_combo = ttk.Combobox(settings_frame, values=[300,600,1200,2400,4800,9600,19200,38400,57600,115200,230400,460800,921600], width=10) self.baud_combo.grid(row=0, column=3, padx=5) self.baud_combo.current(5) # 9600
def toggle_port(self): if self.serial_port and self.serial_port.is_open: self.close_port() else: self.open_port()
def create_widgets(self): # Top frame: port settings settings_frame = tk.LabelFrame(self.root, text="Serial Settings", padx=5, pady=5) settings_frame.pack(fill="x", padx=10, pady=5)
def close_port(self): self.running = False if self.serial_port and self.serial_port.is_open: self.serial_port.close() self.open_btn.config(text="Open Port", bg="lightgreen") self.status_label.config(text="Status: Port closed")
self.recv_text = scrolledtext.ScrolledText(recv_frame, wrap=tk.WORD, height=15) self.recv_text.pack(fill="both", expand=True)
btn_frame = tk.Frame(send_frame) btn_frame.pack(fill="x", pady=5)
However, the request is too broad. I'll assume you want a of sscom (English version) — a Serial Port Communication Assistant in Python, with a GUI.
# Send area send_frame = tk.LabelFrame(self.root, text="Send Data", padx=5, pady=5) send_frame.pack(fill="x", padx=10, pady=5)
# Receive area recv_frame = tk.LabelFrame(self.root, text="Received Data", padx=5, pady=5) recv_frame.pack(fill="both", expand=True, padx=10, pady=5)
def send_hex_data(self): if not self.serial_port or not self.serial_port.is_open: messagebox.showerror("Error", "Port not opened.") return hex_str = self.send_text.get("1.0", tk.END).strip() # Remove spaces, newlines hex_str = ''.join(hex_str.split()) try: data = bytes.fromhex(hex_str) self.serial_port.write(data) except ValueError: messagebox.showerror("Hex Error", "Invalid hex string (e.g., '01 AB CD')")
def open_port(self): if not self.port_combo.get(): messagebox.showerror("Error", "Select a serial port first.") return try: baud = int(self.baud_combo.get()) self.serial_port = serial.Serial(self.port_combo.get(), baud, timeout=0.1) self.running = True self.receive_thread = threading.Thread(target=self.receive_data, daemon=True) self.receive_thread.start() self.open_btn.config(text="Close Port", bg="lightcoral") self.status_label.config(text=f"Status: Opened {self.port_combo.get()} @ {baud} baud") except Exception as e: messagebox.showerror("Error", f"Cannot open port:\n{e}")
def receive_data(self): while self.running and self.serial_port and self.serial_port.is_open: try: if self.serial_port.in_waiting: data = self.serial_port.read(self.serial_port.in_waiting) if data: self.display_received(data) except Exception as e: print(f"Receive error: {e}") break time.sleep(0.01)
# GUI self.create_widgets()
self.status_label = tk.Label(self.root, text="Status: Port closed", bd=1, relief=tk.SUNKEN, anchor=tk.W) self.status_label.pack(side="bottom", fill="x")
tk.Label(settings_frame, text="Baudrate:").grid(row=0, column=2, sticky="w", padx=(10,0)) self.baud_combo = ttk.Combobox(settings_frame, values=[300,600,1200,2400,4800,9600,19200,38400,57600,115200,230400,460800,921600], width=10) self.baud_combo.grid(row=0, column=3, padx=5) self.baud_combo.current(5) # 9600
def toggle_port(self): if self.serial_port and self.serial_port.is_open: self.close_port() else: self.open_port()
def create_widgets(self): # Top frame: port settings settings_frame = tk.LabelFrame(self.root, text="Serial Settings", padx=5, pady=5) settings_frame.pack(fill="x", padx=10, pady=5)
def close_port(self): self.running = False if self.serial_port and self.serial_port.is_open: self.serial_port.close() self.open_btn.config(text="Open Port", bg="lightgreen") self.status_label.config(text="Status: Port closed")
self.recv_text = scrolledtext.ScrolledText(recv_frame, wrap=tk.WORD, height=15) self.recv_text.pack(fill="both", expand=True)
btn_frame = tk.Frame(send_frame) btn_frame.pack(fill="x", pady=5)