What LED matrix board are you using? Got a link?
Post your Python code.
Code:
''' Created by Baue Teeling '''# import librariesfrom flask import Flask, request, jsonifyfrom flask_cors import CORSimport RPi.GPIO as GPIOimport timeimport threadingimport subprocessimport requestsimport uuidimport osimport sysimport loggingfrom datetime import datetimefrom rgbmatrix import RGBMatrix, RGBMatrixOptions, graphics# venv pathvenv_path = '/home/discobooth2/discobooth/Discobooth/venv/lib/python3.11/site-packages'sys.path.insert(0, venv_path)# Set up logginglog_filename = f"discobooth_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log"logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler(log_filename), logging.StreamHandler() ])# Replace print statements with logginglogging.info("Starting program.")logging.info(f"GPIO version: {GPIO.VERSION}")# LED-Matrix Setupoptions = RGBMatrixOptions()options.rows = 64options.cols = 64options.chain_length = 1options.parallel = 1options.hardware_mapping = "regular"matrix = RGBMatrix(options=options)# Timer functie voor de LED-matrixdef display_timer(): global start_time font = graphics.Font() font.LoadFont("fonts/7x13.bdf") # Zorg dat dit fontbestand aanwezig is text_color = graphics.Color(255, 255, 255) while True: if program_active: elapsed_time = time.time() - start_time time_left = max(0, song_duration - elapsed_time) # Bereken minuten en seconden minutes = int(time_left // 60) seconds = int(time_left % 60) timer_text = f"{minutes:02}:{seconds:02}" # Toon de timer op de LED-matrix canvas = matrix.CreateFrameCanvas() canvas.Clear() graphics.DrawText(canvas, font, 10, 30, text_color, timer_text) matrix.SwapOnVSync(canvas) # Stop de timer als de tijd op is if time_left <= 0: reset_session() time.sleep(1) else: # Wacht als het programma niet actief is matrix.Clear() time.sleep(0.5)@app.route('/start', methods=['POST'])def start_program(): global program_active, song_duration, selected_option, current_session_id data = request.json if not data: return jsonify({"error": "No data received"}), 400 command = data.get("command") song_duration = min(data.get("song_duration"), 180) # Maximum van 3 minuten (180 seconden) selected_option = data.get("option", "A") session_id = data.get("sessionId") if not session_id: return jsonify({"error": "No sessionId provided"}), 400 if command == "go" and isinstance(song_duration, int) and song_duration > 0: program_active = True current_session_id = session_id logging.info(f"Received 'go' command. sessionId={session_id}, running for {song_duration}s with option {selected_option}.") return jsonify({"status": "Program started", "duration": song_duration, "option": selected_option, "sessionId": session_id}), 200 else: return jsonify({"error": "Invalid command or missing song_duration"}), 400def reset_session(): global program_active, current_session_id, start_time program_active = False # Clear the LED matrix matrix.Clear() # If there's an active session, end it if current_session_id: send_end_session(current_session_id) current_session_id = None logging.info("Session ended - Ready for next session") @app.route('/get_music_signal', methods=['GET'])def get_music_signal(): global music_signal_ready if music_signal_ready: music_signal_ready = False # Reset het signaal na verzending return jsonify({"command": "start_music"}), 200 else: return jsonify({"command": None}), 200def send_end_session(session_id): # Headers toevoegen met authorization token headers = { 'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InNibWFra2VheGppemFpcnZjd2JwIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTcyODgyNTY3NiwiZXhwIjoyMDQ0NDAxNjc2fQ.1OgmR7PBZI23NtY0UtOcuFC7Dg-kyMRups_S9NOiWWo' #'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InNibWFra2VheGppemFpcwbpIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTcyODgyNTY3NiwiZXhwIjoyMDQ0NDAxNjc2fQ.1OgmR7PBZI23NtY0UtOcuFC7Dg-kyMRups_S9NOiWWo' } # Controleer welke bestanden aanwezig zijn files_to_send = {} if selected_option in ["B", "D"]: # Foto's controleren en toevoegen for i in range(1, 4): image_path = f'image{i}.jpg' if os.path.exists(image_path): files_to_send[f'image{i}'] = ( f'image{i}.jpg', open(image_path, 'rb'), 'image/jpeg' ) if selected_option in ["C", "D"]: # Video controleren en toevoegen if os.path.exists('video.h264'): files_to_send['video'] = ( 'video.h264', open('video.h264', 'rb'), 'video/h264' ) # Form data met sessionId data = { 'sessionId': session_id } try: logging.info(f"Sending end-session request for sessionId={session_id} with collected files...") response = requests.post( END_SESSION_URL, headers=headers, files=files_to_send, data=data ) logging.info("End-session response: %s %s", response.status_code, response.text) except Exception as e: logging.error(f"Error sending files: {str(e)}") finally: # Sluit alle geopende bestanden for f in files_to_send.values(): f[1].close()def main_logic(): global program_active, song_duration, smoke_int, songtime_buffer, music_signal_ready, selected_option, current_session_id while True: if program_active: logging.info(f"Program is running for {song_duration} seconds.") start_time = time.time() # Start de Flask server en de threadsif __name__ == '__main__': threading.Thread(target=main_logic, daemon=True).start() threading.Thread(target=display_timer, daemon=True).start() app.run(host='0.0.0.0', port=5000, ssl_context=None)
https://www.kiwi-electronics.com/nl/64x ... rix&page=2
Statistics: Posted by BaueTe — Sun Jan 19, 2025 1:53 pm