commit 61518315fd9df8b4fcea99a0fa29a61295dd6ab0 Author: Dejvino Date: Tue Dec 23 00:00:27 2025 +0100 Initial version: TUI and math homework diff --git a/print_server.py b/print_server.py new file mode 100644 index 0000000..03bd777 --- /dev/null +++ b/print_server.py @@ -0,0 +1,105 @@ +import random +from datetime import datetime +from escpos.printer import Usb, Dummy +from escpos.exceptions import USBNotFoundError + +# ========================================== +# CONFIGURATION +# ========================================== +# Replace these with your specific printer's values found via lsusb or Device Manager +# Example: 0x04b8 is Epson. +USB_VENDOR_ID = 0x0525 +USB_PRODUCT_ID = 0xa700 +INPUT_ENDPOINT = 0x81 +OUTPUT_ENDPOINT = 0x01 + +# Set to True to print to console instead of physical printer (for testing) +USE_DUMMY_PRINTER = False + +def get_printer(): + """ + Initializes the printer connection. + Returns a printer object. + """ + if USE_DUMMY_PRINTER: + return Dummy() + + try: + # Initialize USB printer + # profile="TM-T88V" is a generic profile, works for many ESC/POS printers + p = Usb(USB_VENDOR_ID, USB_PRODUCT_ID, 0, INPUT_ENDPOINT, OUTPUT_ENDPOINT, profile="TM-T88V") + return p + except USBNotFoundError: + print("Error: Printer not found. Check USB connection and IDs.") + return None + except Exception as e: + print(f"Error initializing printer: {e}") + return None + +def generate_homework_job(p): + """ + Sends ESC/POS commands to the printer to print the homework. + """ + # 1. Header (Center aligned, Double Height/Width) + p.set(align='center', height=2, width=2, bold=True) + p.text("MALA NASOBILKA\n") + p.text("-------------\n") + + # Reset text formatting for body + p.set(align='left', height=1, width=1, bold=False) + today = datetime.now().strftime("%d.%m.%Y") + p.text(f"Datum: {today}\n\n") + + # 2. Generate and Print Equations + p.text("Vypocitej:\n\n") + + for i in range(1, 11): + num1 = random.randint(2, 12) + num2 = random.randint(2, 12) + + # Format: "1) 5 x 4 = ____" + line = f"{i}) {num1} * {num2} = ____\n" + p.text(line) + p.text("\n") # Extra spacing for writing + + p.text("Hodne stesti!\n") + + # 4. Cut Paper + p.cut() + + # If using Dummy, print the output to console to verify + if isinstance(p, Dummy): + print(p.output.decode('utf-8', errors='ignore')) + +def run_tui(): + print("==========================================") + print(" THERMAL PRINTER CONTROL CENTER ") + print("==========================================") + + while True: + print("\nAvailable Jobs:") + print(" [1] Print Math Homework (Multiplication)") + print(" [q] Quit") + + choice = input("\nSelect an option: ").strip().lower() + + if choice == '1': + p = get_printer() + if p: + print("Printing...") + try: + generate_homework_job(p) + print("Success! Job sent to printer.") + except Exception as e: + print(f"Print Error: {e}") + finally: + if not isinstance(p, Dummy): + p.close() + elif choice == 'q': + print("Exiting...") + break + else: + print("Invalid selection. Please try again.") + +if __name__ == '__main__': + run_tui()