LABORATORIO: Laboratorio de Transmisión serial Asincrónica usando Arduino y Python
Requisitos de finalización
8. Tx Rx con Python
Python posee una poderosa libreria para manejar comunicaciones seriales la cual se muestra a continuación.
La liberaria tiene el nombre de pySerial, mientras que su modulo se llama serial
- Pagina oficial https://pyserial.readthedocs.io/
- API https://pyserial.readthedocs.io/en/latest/pyserial_api.html
1. Instalación
Para poder utilizar la libreria primero se debe realizar la instalación.
Podemos utilizar pip para la instalación:
pip install pyserial
Se puede instalar mediante pip, o se debe descargar los sources de
https://github.com/pyserial/pyserial/releasesy luego correr el instalador que trae el paquete
python setup.py install
instalar pip:https://www.geeksforgeeks.org/how-to-install-pip-on-windows/
2. Inicializacion
Como primer punto es necesario importar la libreria al codigo:
import serial
Para iniciar el puerto creamos un objeto y llamamos la función:
ser = serial.Serial(port, baudrate, xxx,....)
Algunos de los parámetros básicos de configuración son los siguientes:
- port : Nombre del puerto, en windows tenemos COMx, mientras que en linux puede ser /dev/ttyUSBx, /dev/ttyACMx, /dev/ttySx, etc dependiendo del tipo de dispositivo.
- baudrate: velocidad de transmision, por defecto 9600
- timeout: tiempo de espera para recepción, por defecto sin timeout.
- stopbits: bits de stop a enviar, por defecto 1
- bytesize: tamaño de dato, por defecto 8
- parity: paridad serial.PARITY_NONE, N, serial.PARITY_EVEN, E, serial.PARITY_ODD, O. por defecto Sin paridad
Ejemplo:
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1, stopbits=1,bytesize=8,parity=serial.PARITY_NONE)
3. lectura y escritura
write(data)
Escribe un dato del tipo byte a la salida del puerto, se puede utilizar bytearray para poder mandar cadenas codificadas
write(b'\x0D\x0A') //escribe CR+LF ingresado en Hex
write(bytearray('Hola\r\n','latin1')) //escribe "Hola" + CR+LF
write(b"Hello World") //escribe "Hello world"
write(chr(27)) //escribe caracter 'ESC'
read(size)
Lee un determinado numero de bytes del puerto serial.
read(10) //Lee 10 bytes del buffer de entrada.
importante: Las funciones de lectura de puerto pueden verse afectadas por el paràmetro timeout en la configuracion del puerto