from flask import Flask, render_template_string, request, jsonify import serial import serial.tools.list_ports import time app = Flask(__name__) ser = None HTML_TEMPLATE = """ ESP32-P4 Waveform Gen Dual

Connection

Disconnected

Channel A (Pin 33)

Channel B (Pin 32)

Log waiting...
""" @app.route('/') def index(): ports = [p.device for p in serial.tools.list_ports.comports()] return render_template_string(HTML_TEMPLATE, ports=ports) @app.route('/connect', methods=['POST']) def connect(): global ser port = request.json.get('port') try: if ser: ser.close() ser = serial.Serial(port, 115200, timeout=0.1) return jsonify(success=True, message=f"Connected to {port}") except Exception as e: return jsonify(success=False, message=str(e)) @app.route('/cmd', methods=['POST']) def cmd(): global ser if not ser: return jsonify(success=False, response="Not connected") command = request.json.get('cmd') try: # Clear buffer ser.reset_input_buffer() ser.write((command + "\n").encode()) # Wait a bit longer for the ESP to process and respond time.sleep(0.2) # Read the line response resp = ser.read_all().decode(errors='replace').strip() if not resp: # Try one more read in case it's slow time.sleep(0.3) resp = ser.read_all().decode(errors='replace').strip() return jsonify(success=True, response=resp or "Empty response") except Exception as e: return jsonify(success=False, response=str(e)) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)