0% encontró este documento útil (0 votos)
104 vistas

L9V Python Comunicación Serial Arduino

Este documento presenta un laboratorio sobre comunicación serial entre Python y Arduino. El objetivo es comprender el uso del módulo PySerial para implementar aplicaciones con comunicación serial entre una computadora y Arduino. Se explican los pasos para instalar PySerial, configurar puertos virtuales seriales, programar Arduino en PlatformIO e implementar la comunicación serial mediante el envío de datos entre Python y el simulador PICSimLab.

Cargado por

Derek Rojas
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
104 vistas

L9V Python Comunicación Serial Arduino

Este documento presenta un laboratorio sobre comunicación serial entre Python y Arduino. El objetivo es comprender el uso del módulo PySerial para implementar aplicaciones con comunicación serial entre una computadora y Arduino. Se explican los pasos para instalar PySerial, configurar puertos virtuales seriales, programar Arduino en PlatformIO e implementar la comunicación serial mediante el envío de datos entre Python y el simulador PICSimLab.

Cargado por

Derek Rojas
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 19

vs

LENGUAJES DE PROGRAMACIÓN
II Ciclo

Laboratorio 9: Python-Comunicación Serial- NOTA


Arduino

Alumnos: <colocar aquí los apellidos y nombres del alumno>


<colocar aquí los apellidos y nombres del
alumno>

Fecha de realización: 00-00-2021


Fecha de entrega: 00-00-2021

1. Objetivos
● Comprender el uso del módulo Pyserial

● Identificar los conceptos de backend y frontend

● Implementar aplicaciones con comunicación serial

2. Seguridad
Advertencia:
●Obligatorio el uso de Mascarilla y careta de protección
●Desinfectar las manos con alcohol al ingreso del laboratorio
●Mantener siempre la distancia durante el laboratorio
●No obstruir las vías de evacuación con mochilas, sillas en mala
posición, etc.
●Ubicar maletines y/o mochilas al final del aula o en los casilleros
asignados al estudiante.
●No ingresar con líquidos, ni comida al aula de Laboratorio.
●Al culminar la sesión de laboratorio apagar correctamente la
computadora y la pantalla, y ordenar las sillas utilizadas.
●En este laboratorio está prohibida la manipulación del hardware,
conexiones eléctricas o de red

3. Equipos y Materiales
Una computadora con:
● Windows 7 o superior
● Conexión a la red
● Python 3.9 o superior, VS Code
● PySerial
● ELTIMA Virtual Serial Port Driver
● PlatfomIO IDE
● PICSimLab

4. Fundamento Teórico
PySerial: Este módulo encapsula el acceso al puerto serie y proporciona los Back-Ends (Capa de
acceso a datos), para que Python se ejecute en Windows. Este módulo selecciona
automáticamente el backend apropiado.
Lab. N° 9 Python-Comunicación Serial-
Arduino
po

Docente: Armando Sarco Montiel Pág. 1


Lab. N° 9 Python-Comunicación Serial-
Arduino
5. Procedimiento:
Instalación del módulo PySerial
Primero procedemos a actualizar el el gestor de paquetes PIP (Package Installer for Python) en el
PowerShell: python -m pip install --upgrade pip
-m (module-name): busca por el nombre del módulo dentro de sys.path y ejecuta su contenido.

Luego procedemos a instalar el PySerial, utilizando el comando: pip install pyserial

Nota: En caso de que no puedan instalar mediante el CMD pueden descargar e instalar manualmente
desde la página oficial: https://pypi.org/project/pyserial/, si ya estan instalados los paquetes te saldra
el aviso: Requirement already satisfied

Verificamos si se llegó a instalar el PySerial son el siguiente comando: pip list

Nota: los paquetes instalados solo estarán disponibles para una sola versión de Python y no para
todas las versiones.

Docente: Armando Sarco Montiel Pág. 2


Lab. N° 9 Python-Comunicación Serial-
Arduino

Configuración del PySerial en el VS Code


Finalmente ejecutar en el VS Code el siguiente programa para ver si el módulo está correctamente
instalado.

import serial <module 'serial' from 'C:\\Program Files\\Python39\\lib\\


print(serial) site-packages\\serial\\__init__.py'>
Si no ejecuta el programa abrimos el ejecutor de comandos de VS Code (F1 o shift + p), escribimos "Select
Interpreter" y seleccionamos el intérprete de python (la última versión instalada), o la versión donde están
instaladas las librerías.

Instalación y configuración del Virtual Serial Ports Driver (VSPD)


De forma física solo necesitamos un puerto para conectarnos. Para simular de manera virtual la
comunicación serial, vamos a necesitar dos puertos (COM13 y COM14).

Arduino COM13: envía información VSCode COM14: recibe la


información

VSCode COM14: envía Información Arduino COM13: recibe la


información

Descargar e instalar la última versión de prueba (15 días) de Virtual Serial Port Driver en:
https://drive.google.com/drive/folders/1066bThZ7QoPZbKe2qw9U8eUqiwpwxiKs?usp=sharing

Docente: Armando Sarco Montiel Pág. 3


Lab. N° 9 Python-Comunicación Serial-
Arduino

Abrimos el programa como administrador y agregamos un nuevo emparejamiento


Configuramos el Nuevo emparejamiento con los puestos COM3 y COM4.

Presionamos “Windows + X” y le damos en: Administrador de Dispositivos. Verificamos si los


puertos se han emparejado y configurado correctamente tal como se muestra en la figura de abajo.

Docente: Armando Sarco Montiel Pág. 4


Lab. N° 9 Python-Comunicación Serial-
Arduino
Extensión PlatformIO IDE para el VS Code
Abrir el VS Code como administrador, luego instalamos el PlatformIO IDE en el VS Code, para
poder programar los shields de Arduino.

Reiniciar el VS Code y luego Abrir el PlatformIO IDE y creamos un nuevo proyecto

Docente: Armando Sarco Montiel Pág. 5


Lab. N° 9 Python-Comunicación Serial-
Arduino

en el explorer del VS Code, buscamos el archivo main.cpp de C++ y lo abrimos.

En main.cpp realizamos nuestro programa para cargar en el Arduino y realizar la comunicación serial
con el Python.

#include <Arduino.h>
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
if(Serial.available()>0){
char dato=Serial.read(); //dato que llega al puerto serie
if(dato == 'a'){
digitalWrite(13, HIGH); // Enciende Led en pin 8
Serial.println("ON");
}
else if(dato == 'b'){
digitalWrite(13, LOW); //Apaga led en pin 8
Serial.println("OFF");
}
else{
Serial.println("dato incorrecto");
}
}
}

Docente: Armando Sarco Montiel Pág. 6


Lab. N° 9 Python-Comunicación Serial-
Arduino

Compilamos el programa para generar el archivo .hex que usaremos en el PICSimLab

Nota: si no aparece el check, presiona F1 y escribe PlatformIO: Build

Una vez generado el archivo firmware.hex, buscamos la dirección de la carpeta donde se encuentra
para cargarlo en el PICSimLab.

Nota: si te sale error al ejecutar el PlatformIO, desinstalaló y ve a C:\Users\tu_usuario y elimina la


carpeta “.platformio”, Luego reinicia el VS Code como administrador y vuelve a instalar el PlatformIO.

Docente: Armando Sarco Montiel Pág. 7


Lab. N° 9 Python-Comunicación Serial-
Arduino
Instalación y configuración del simulador PICSimLab
Instalamos la última versión estable del PICSimLab de:
https://github.com/lcgamboa/picsimlab/releases

Abrimos el programa instalado

En File configuramos el COM3, ya que es el puerto que configuramos anteriormente con el VSPD.

Volvemos a File y ahora seleccionamos Load Hex y cargamos el archivo firmware.hex de la carpeta
abierta anteriormente en el PlatformIO IDE.

Vamos a Módulos y seleccionamos Spare parts (repuestos), para simular el encendido de un led.

Docente: Armando Sarco Montiel Pág. 8


Lab. N° 9 Python-Comunicación Serial-
Arduino
Cerramos el simulador del ventilador haciendo clic derecho sobre la imagen y seleccionamos Delete.

Para abrir el simulador de leds, vamos al menú Outputs y seleccionamos LEDs, luego le hacemos
clic normal en la parte superior izquierda del la pantalla en negro y aparecerá el simulador de leds.

Le damos clic derecho al primer led y seleccionamos Properties.

Finalmente conectamos el primer led (Pin 1) al pin digital 13 del Arduino (19 PB5/13).

Docente: Armando Sarco Montiel Pág. 9


Lab. N° 9 Python-Comunicación Serial-
Arduino
Monitor serial desde el PlatformIO IDE al Arduino (PICSimLab)
Ejercicio 1: En el VS Code, usando el PlatformIO IDE, prender y apagar un led en el simulador
(PICSimLab) mediante el monitor serial.
Primero abrimos el monitor serial, si no aparece el símbolo del enchufe presionamos F1 y escribimos
PlatformIO: Upload

No olvidarse que para escribir en el puerto serial del Arduino (PICSimLab) debemos conectarnos al
COM4, para que el Arduino reciba la información.

Arduino COM13: envía información PlatformIO IDE COM14: recibe la información

PlatformIO IDE COM14: envía Información Arduino COM13: recibe la información

Escribimos com4 en el Terminal y presionamos enter, finalmente tecleamos a, b, c y a, para prender


y apagar el led en el PICSimLab

Docente: Armando Sarco Montiel Pág.


10
Lab. N° 9 Python-Comunicación Serial-
Arduino

Conexión PlatformIO con el Arduino físico


Ejercicio 2: Solo para este ejercicio, en grupo de 2 descargar el programa realizado en el PlatformIO
IDE a un Arduino real y tomar las capturas como evidencias.

Funciones incorporadas encode( ) y decode( )


str = '...' literales = una secuencia de caracteres Unicode (Latin-1, UCS-2 o UCS-4, según el carácter
más ancho de la cadena)
bytes = b '...' literales = una secuencia de octetos (enteros entre 0 y 255)

La notación ‘b’ se usa para especificar una cadena de bytes en Python. En comparación con las
cadenas normales, que tienen caracteres ASCII, la cadena de bytes es una matriz de variables de
bytes donde cada elemento hexadecimal tiene un valor entre 0 y 255.
También podemos codificar cadenas regulares en cadenas de bytes con la función incorporada
encode( ). El programa siguiente nos muestra cómo codificar cadenas regulares en cadenas de bytes
con la función encode( ).

cadena = 'Esto es una cadena'


print(cadena.encode())

b 'Esto es una cadena'

Codificamos la cadena regular Esta es una cadena en un formato de cadena de bytes con la función
encode ( ) en el código anterior. También podemos codificar una cadena en un formato de cadena de
bytes con la declaración b. El siguiente fragmento de código nos muestra cómo podemos hacer eso.

Docente: Armando Sarco Montiel Pág.


11
Lab. N° 9 Python-Comunicación Serial-
Arduino

cadena = b'Esto es una cadena'


print(cadena.decode())

Esto es una cadena


Aquí, la variable de cadena no es una cadena regular; en cambio, es una cadena de bytes.

Docente: Armando Sarco Montiel Pág.


12
Lab. N° 9 Python-Comunicación Serial-
Arduino
Conexión Python con el Arduino (PICSimLab)
Ejercicio 3: Crear un programa para prender y apagar un led desde el Python. Copiar el programa de
abajo, compilar, analizar y comentar lo que sucede.

import serial as sr
uno = sr.Serial("COM4", 9600) #instanciamos la comunicación serial
while True:
dato = input("Ingrese letra: ")
dato = dato.lower()
if dato == "a":
uno.write(b"a")
elif dato == "b":
uno.write(b"b")
elif dato == "x":
uno.write(b"b")
uno.close() #cerramos la comunicación serial y la dejamos libre
break
else:
print("Letra incorrecta")
print("Programa finalizado")
uno.close()

Canvas
Canvas: es un objeto de tipo imagen para mostrar imágenes, el cual podemos usar como un lienzo y
colocar figuras sobre está.
Oval: es un objeto (elipse) que se genera dentro del canvas, La elipse se ajusta a un rectángulo
definido por las coordenadas (x0, y0) de la esquina superior izquierda y las coordenadas (x1, y1) de
un punto justo fuera de la esquina inferior derecha.

c = Canvas()
id = c.create_oval(x0, y0, x1, y1, option, ...)

Conexión Digital Python con el Arduino (PICSimLab) usando el Tkinter


Ejercicio 4: Crear un programa utilizando el Tkinter, para prender y apagar un led desde el Python.
Copiar el programa de abajo, compilar, analizar y comentar lo que sucede.

Docente: Armando Sarco Montiel Pág.


13
Lab. N° 9 Python-Comunicación Serial-
Arduino

from tkinter import*


from tkinter import messagebox
import serial as sr
uno = sr.Serial("COM4", 9600) #instanciamos la comunicación serial
root = Tk()#Instanciamos pantalla principal
root.title('Comunicación Serial') #Título de la ventana
root.geometry('200x150') #Configuramos el Ancho x Altura de la ventana
root.config(bg="gray95") #Fondo de la ventana
root.iconbitmap("icono.ico") #Llamamos al archivo de tipo ico
#Función con parámetros
def led(x):
if x==1: #Activa led
uno.write(b"a")
label_0['text'] = "ON"; label_0["bg"]="white"; label_0["fg"]="Black"
c.itemconfig(id, fill="white")
elif x==2: #Apaga led
uno.write(b"b")
label_0['text'] = "OFF"; label_0["bg"]="gray35"; label_0["fg"]="White"
c.itemconfig(id, fill="gray35")
#Función para cerrar la comunicación serial
def al_cerrar():
if messagebox.askokcancel("Salir", "¿Quieres salir?"):
uno.close()
root.destroy()
#Creamos los frames, etiquetas, entradas y botones
fm1 = Frame(root,padx=5,pady=5) #Frame
c = Canvas(fm1,width=80,height=80)
id=c.create_oval(2,2,80,80,outline="gray0",fill="gray32")
label_0 = Label(fm1,width=4,height=1,text="...",font="calibri 16
bold",bd=0,highlightthickness=0)
fm2=Frame(root) #Frame 2
boton_1=Button(fm2,text="ON",fg="white",bg="gray35",font="calibri 18
bold",command=lambda:led(1))
boton_2=Button(fm2,text="OFF",fg="white",bg="gray35",font="calibri 18
bold",command=lambda:led(2))
#Posicionamiento
fm1.pack() #Posicionamiento relativo (pack)
c.grid(row=0, column=0) #Posicionamiento grilla (grid)
label_0.grid(row=0, column=0) #Posicionamiento grilla (grid)
fm2.pack() #Posicionamiento relativo (pack)
boton_1.grid(row=0, column=0, padx=15) #Posicionamiento grilla (grid)
boton_2.grid(row=0, column=1, padx=15) #Posicionamiento grilla (grid)
root.protocol("WM_DELETE_WINDOW", al_cerrar)
root.mainloop() #Bucle que actualiza continuamente la ventana

Docente: Armando Sarco Montiel Pág.


14
Lab. N° 9 Python-Comunicación Serial-
Arduino
Conexión de datos enteros, Python con el Arduino (PICSimLab)
Ejercicio 5: Crear un programa utilizando el monitor serial y el PlatformIO IDE, para controlar la
velocidad del ventilador desde el Python. Copiar el programa de abajo, compilar, analizar y comentar
lo que sucede.

//Programa en el main.cpp del platformio


#include <Arduino.h>
void setup(){
Serial.begin(9600);
}
void loop(){
if(Serial.available()>0){
int v = Serial.parseInt(); //Recibimos datos de python y lo parseamos a
entero
analogWrite(3,v);
Serial.print("velocidad:");
Serial.print("\t");
Serial.print(v);
}
}

#Programa en el python
import serial
arduino = serial.Serial("COM4", 9600) #instanciamos la comunicación serial
while True:
dato = input("Ingrese velocidad del motor (0-255): ")
if(dato.isdigit()):
if(int(dato)>=0 and int(dato)<=255):
arduino.write(dato.encode())
print(f"La velocidad del motor es: {dato}")
else:
print ("Rango de velocidad incorrecto")
elif dato == "x":
arduino.write(b"0")
arduino.close()
break
else:
print("La velocidad debe ser un número")
print("Programa finalizado")

Ejercicio 6 (Reto tecsup): Crear un programa utilizando el Tkinter, para el ejercicio anterior.

Docente: Armando Sarco Montiel Pág.


15
Lab. N° 9 Python-Comunicación Serial-
Arduino
Entregables: Capture la pantalla con la ejecución de todos los ejercicios en el VS Code y comente lo
que sucede.

Docente: Armando Sarco Montiel Pág.


16
Lab. N° 9 Python-Comunicación Serial-
Arduino
6. Observaciones:
abc

7. Conclusiones:
abc

8. Normas Generales:
1. Presentar como informe de laboratorio solo los entregables (Lo resaltado en amarillo).
2. Por cada captura de pantalla que se realice, se deberá comentar en no menos de 3 líneas
explicando la figura o procedimiento.
3. La presentación del informe se realiza por el Canvas, un día antes de que se cumpla la semana
de realizado el laboratorio (6 días), no se revisa por otro medio.
4. Se penalizará con puntos en contra las faltas de ortografía en la redacción del informe, la
presentación fuera del tiempo indicado, en especial la falta de orden.
5. Se evaluará con nota cero si el nombre de uno de los participantes no está incluido en el
informe, incluir a un alumno que no ha participado en la experiencia de laboratorio, el nombre del
profesor está mal escrito, la presentación del informe por otro medio que no sea el Canvas, o el
más mínimo intento de plagio.
6. Se dará una bonificación de un punto a aquel alumno que publique en el foro de consultas,
alguna información relevante del tema tratado en la semana o encuentre alguna falla de
redacción u ortografía en las presentaciones y guías de laboratorio, así como de algún error en el
Canvas.
7. Pasada una semana de la publicación de la nota en el SEVA, se dará por entendido la
conformidad del alumno con su nota, es responsabilidad del alumno la verificación de la
conformidad de su nota, en caso de algún reclamo pasada la semana, ya no será tomada en
cuenta.

9. Bibliografía
1. Desarrollo inicial: Charles Severance, Facultad de Información de la Universidad de Michigan
2. Charles R. Severance (2020). Python para todos “Explorando la información con Python 3”
Estados Unidos: Copyright ~2009- Charles Severance.

Docente: Armando Sarco Montiel Pág.


17
Lab. N° 9 Python-Comunicación Serial-
Arduino
10. Anexo

Docente: Armando Sarco Montiel Pág.


18

También podría gustarte