Quantcast
Channel: Raspberry Pi Forums
Viewing all articles
Browse latest Browse all 1246

Python • Re: LED matrix board error

$
0
0
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)
Thanks for your response. This is the led-matrix I got.
https://www.kiwi-electronics.com/nl/64x ... rix&page=2

Statistics: Posted by BaueTe — Sun Jan 19, 2025 1:53 pm



Viewing all articles
Browse latest Browse all 1246

Trending Articles