Resultados 1 al 2 de 2

Python pyserial Blender

  1. #1
    Fecha de ingreso
    Mar 2010
    Mensajes
    1

    Python pyserial Blender

    Hola a todos, necesito un favor muy grande de quien me pueda ayudar. Mi caso es que soy un novato, para serles sincero, un punchador de programación, de esos copy/paste, aunque muchas veces me veo en la obligación de aprender para poder resolver muchos líos.

    Tengo un proyecto de Mocap, consiste en un traje que envía las rotaciones Euler directamente a mi armature vía el puerto serial, estoy usando pyserial. Solamente me falta un evento que se dispare con la llegada de datos al puerto y a partir de allí ejecutar una función, ya que no he encontrado ejemplos, o no los he entendido como punchador al fin, y para serles sincero, me temo que no lo entenderé. Pero tengo un código vb, net que utilicé en un proyecto similar que me funciona, si alguien me lo pudiera traducir a Python, sería genial y, además prometo que cuando termine este lio, lo publicaré aquí, tanto el circuito del traje como el script ya terminado, no pudiera pagar de otra forma.

    Aquí les dejo el código vb. Net para quien tuviera el honor y la amabilidad de traducirlo a Python, o mostrarme un ejemplo cómo se hace con pyserial, y me perdonan si estoy abusando, también dejo mi dirección de correo para quien necesite el proyecto:
    Imports system. Io.

    Imports system. Io. Ports.

    Public class form2.

    Dim recibidos as string.

    Public sub new().

    Initializecomponent().

    Serialport1. Portname = com6.

    Abrir puerto mientras se ejecute la aplicación.

    If not serialport1. Isopen then.

    Try.

    Serialport1. Open().

    Catch ex as system. Exception.

    Messagebox. Show(ex. Tostring()).

    End try.

    End if.

    Ejecutar la función recepción por disparo del evento datareived.

    Addhandler serialport1. Datareceived, addressof recepción.

    End sub.

    Private sub recepción(byval sender as object, byval e as system. Io. Ports. Serialdatareceivedeventargs).

    Acumular los caracteres recibidos a nuestro buffer (string).

    Recibidos += serialport1. Readexisting().

    End sub.

    End class.

    Correo: fitopluss@hotmail.es. Gracias de antemano, estoy dispuesto a compartir este script, el circuito del traje y el código para el microcontrolador, si a alguien le interesa, claro está, cuando esté listo.

  2. #2
    Fecha de ingreso
    Dec 2025
    Mensajes
    0
    Aquí tienes la traducción y adaptación del código VB.NET a Python para usar con PySerial en Blender. El concepto clave es usar un hilo (thread) para leer el puerto serial de forma no bloqueante, ya que Blender necesita que la interfaz siga respondiendo.

    Primero, asegúrate de tener instalada la biblioteca pyserial. Puedes instalarla desde la terminal con: pip install pyserial.

    El código principal para Blender, que puedes usar como un script en modo texto o como un complemento, sería algo así:

    Importa los módulos necesarios al inicio de tu script en Blender: serial, threading, y bpy.

    Crea una variable global para almacenar los datos recibidos, por ejemplo: buffer_datos = "".

    Define una función que será tu rutina de recepción. Esta función se ejecutará en un hilo separado. Dentro de ella, debes abrir el puerto serial y leer los datos en un bucle. Es importante manejar las excepciones por si se desconecta el dispositivo.

    La función podría comenzar así: def lector_serial():. Dentro, usa un bloque try: para abrir el puerto con serial.Serial('COM6', 9600) ajustando el nombre del puerto y la velocidad (baudrate) a los que uses. Luego, un bucle while True: para leer constantemente. Puedes usar ser.read() o ser.readline() dependiendo de cómo envíen los datos tus sensores.

    Los datos que leas debes procesarlos. Si son rotaciones Euler, probablemente lleguen como una cadena de texto que puedes separar. Después de procesarlos, debes actualizar los huesos (bones) de tu armature. Para modificar propiedades de Blender desde un hilo, debes usar bpy.app.timers.register para encolar la actualización en el hilo principal.

    Un ejemplo de cómo encolar la actualización: define una función (por ejemplo, actualizar_armature) que tome los datos procesados y asigne las rotaciones a los huesos correspondientes. Luego, desde tu hilo de lectura, después de tener los nuevos datos, llama a bpy.app.timers.register para ejecutar esa función de actualización.

    Para iniciar la lectura cuando se ejecute el script, crea el hilo al final de tu código: hilo = threading.Thread(target=lector_serial, daemon=True) y luego hilo.start(). El argumento daemon=True asegura que el hilo se cierre cuando se cierre Blender.

    Recuerda manejar el cierre del puerto serial de forma elegante, quizás con una señal o verificando una variable global. También es buena idea agregar una interfaz de usuario en el panel de propiedades de Blender (N-panel) para iniciar/detener la conexión y seleccionar el puerto.

    Te recomiendo usar la última versión de Blender (3.6 o superior) y la versión más reciente de pyserial. Para depurar, imprime los datos crudos en la consola de Blender (System Console) para verificar que llegan correctamente antes de intentar rotar el armature.

    El código no es una copia línea por línea de tu ejemplo VB, porque en Python la estructura es diferente, pero captura la misma funcionalidad: abrir el puerto, escuchar datos en un evento (aquí simulado con un bucle en un hilo) y ejecutar una función de recepción.

Temas similares

  1. Videojuegos Pyserial y Blender
    Por luis1193 en el foro Videojuegos
    Respuestas: 1
    : 16-01-2015, 10:02
  2. Blender Blender 64 y python
    Por birckof en el foro Programas de Diseño 3D y CAD
    Respuestas: 2
    : 16-09-2009, 11:29
  3. Blender ¿Dónde encontrar la lista completa de funciones de Python para Blender?
    Por adrifre7 en el foro Plugins y Scripts
    Respuestas: 2
    : 30-01-2009, 10:01
  4. Blender Python y Blender
    Por fog en el foro Programas de Diseño 3D y CAD
    Respuestas: 3
    : 20-12-2006, 15:29
  5. Blender Sugerencias Blender mas Python se puede aceder a un archivo Blender desde otro
    Por yeclapa en el foro Programas de Diseño 3D y CAD
    Respuestas: 4
    : 27-04-2006, 22:02