06/02/2011
PySerial es una librería de Python esencial para interactuar con puertos seriales, un estándar (como RS232) para la transmisión de datos entre computadoras y otros dispositivos. Su versatilidad la convierte en una herramienta indispensable en una variedad de proyectos, desde la automatización industrial hasta el control de robots y la integración de sensores.

¿Para qué se utiliza PySerial?
PySerial facilita la comunicación serial en Python, permitiendo enviar y recibir datos a través de puertos como el utilizado por dispositivos como GPS, módems, sensores, controladores lógicos programables (PLCs) y muchos más. Su compatibilidad con diferentes sistemas operativos (Windows, Linux, macOS) la hace una opción robusta y adaptable.
Un ejemplo común es el uso de PySerial con una Raspberry Pi, una computadora de placa reducida popular para proyectos de electrónica. La Raspberry Pi, al conectarse a dispositivos con interfaz serial, puede controlar y monitorizar una amplia gama de procesos. Para ello, es crucial la configuración apropiada del puerto UART en el sistema operativo de la Raspberry Pi.
Instalación de PySerial
La instalación de PySerial es sencilla. Si ya tienes pip3instalado, usa el siguiente comando en tu terminal:
pip3 install pyserialSi no tienes pip3, primero instálalo:
sudo apt-get install python3-pipComunicación Serial con PySerial: Envío y Recepción de Datos
Enviando Datos
El siguiente ejemplo demuestra cómo enviar datos usando PySerial :
import serialser = serial.Serial('/dev/ttyAMA0', baudrate=9600)ser.write(b'Hello, World!')ser.close()Este código importa la librería PySerial, crea una instancia de la clase Serialpara abrir el puerto serial /dev/ttyAMA0(el nombre del puerto puede variar según el sistema operativo y la configuración del hardware) a una velocidad de transmisión de 9600 baudios, envía la cadena de texto "Hello, World!" y finalmente cierra el puerto.
Recibiendo Datos
Para recibir datos, se utiliza un bucle que lee continuamente el puerto serial:
import serialser = serial.Serial('/dev/ttyAMA0', baudrate=9600)while True: data = ser.readline() if len(data) > 0: print(data.decode('utf-8'))ser.close()Este ejemplo lee datos del puerto hasta encontrar un carácter de nueva línea. La función decode('utf-8')convierte los datos recibidos (que son bytes) a una cadena de texto legible. Recuerda que el bucle while Truedebe ser controlado adecuadamente para evitar un consumo excesivo de recursos.
Parámetros de Configuración de PySerial
La clase Serialde PySerial ofrece una amplia gama de parámetros para configurar la comunicación serial. Estos parámetros permiten controlar aspectos cruciales como la velocidad de transmisión (baudrate), el número de bits de datos, la paridad, los bits de stop y los tiempos de espera.
| Parámetro | Descripción | Valores comunes |
|---|---|---|
port | Nombre del puerto serial. | /dev/ttyACM0 (Linux), COM3 (Windows) |
baudrate | Velocidad de transmisión de datos (baudios). | 9600, 19200, 115200, etc. |
bytesize | Número de bits de datos. | 5, 6, 7, 8 |
parity | Tipo de paridad. | PARITY_NONE , PARITY_EVEN , PARITY_ODD |
stopbits | Número de bits de stop. | 1, 5, 2 |
timeout | Tiempo de espera de lectura (segundos). | 0 (no bloqueante), None (bloqueante), valor numérico |
xonxoff | Control de flujo por software (XON/XOFF). | True , False |
rtscts | Control de flujo por hardware (RTS/CTS). | True , False |
dsrdtr | Control de flujo por hardware (DSR/DTR). | True , False |
write_timeout | Tiempo de espera de escritura (segundos). | 0 (no bloqueante), None (bloqueante), valor numérico |
Es fundamental entender y configurar correctamente estos parámetros para asegurar una comunicación serial fiable y eficiente. La configuración incorrecta puede provocar errores de transmisión o bloqueo de la aplicación.
Solución de Problemas Comunes con PySerial
PySerial bloquea la escritura
Si PySerial bloquea la escritura, es posible que el puerto serial esté ocupado, que la configuración sea incorrecta o que exista un problema en el dispositivo conectado. Verifica la configuración del puerto, la velocidad de transmisión (baudrate), y asegúrate de que el dispositivo esté correctamente conectado y funcionando.
El parámetro write_timeoutpuede ayudar a prevenir bloqueos. Si se establece un valor de tiempo de espera, la función write()devolverá un error en lugar de bloquearse indefinidamente si no se pueden enviar los datos en el tiempo especificado.
Aplicaciones Reales de PySerial
PySerial tiene una amplia gama de aplicaciones en la interacción con hardware. A continuación, se presentan algunos ejemplos:
- GPS Tracking: Un módulo GPS se puede conectar a la Raspberry Pi y su información de localización procesarse con PySerial .
- Comunicación con módems: Se puede usar PySerial para enviar y recibir datos a través de un módem conectado a la Raspberry Pi.
- Automatización Industrial: PySerial permite controlar y monitorizar equipos industriales, como PLCs y sensores, a través de la comunicación serial.
- Robótica: PySerial es clave para la comunicación con controladores de motores, sensores y otros componentes robóticos.
- Control de Instrumentos Científicos: Muchos instrumentos científicos utilizan interfaces seriales, y PySerial facilita la automatización de experimentos y la recolección de datos.
Consideraciones Adicionales
Recuerda que la correcta configuración del hardware y la comprensión de los protocolos de comunicación serial son esenciales para el funcionamiento adecuado de PySerial. Es recomendable consultar la documentación del dispositivo al que te conectas para verificar la configuración correcta de baudios, paridad, y otros parámetros. Además, es crucial manejar adecuadamente las excepciones que PySerial puede lanzar para evitar bloqueos o comportamientos inesperados.
La función serial_for_url()proporciona una manera más robusta de crear instancias de la clase Serial, simplificando el manejo de diferentes configuraciones de puertos.
Si quieres conocer otros artículos parecidos a Pyserial: como hacerlo para la comunicación serial en python puedes visitar la categoría Libros y Librerías.
