LENGUAJES DE PROGRAMACIÓN
II Ciclo
Laboratorio 9: Python-Comunicación Serial-Arduino NOTA
Alumnos: Tapia Leiva Ivan Ronaldo
1. Objetivos
● Comprender el uso del módulo Pyserial
● Identificar los conceptos de backend y frontend
● Implementar aplicaciones con comunicación serial
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
Lab. N° 9 Python-Comunicación Serial-Arduino
Para el ejercicio 1 tendremos que tener nuestro picsimlab y poner nuestro LEDS, al ejecutar
ponemos la letra A para prender el led, la letra B para apagar.
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.
Docente: Armando Sarco Montiel Pág. 1
Lab. N° 9 Python-Comunicación Serial-Arduino
cadena = 'Esto es una cadena'
print([Link]())
b 'Esto es una cadena'
cadena = b'Esto es una cadena'
print([Link]())
Esto es una cadena
Estos ejercicios es mejor tener un Arduino para tener una mejor experiencia
Docente: Armando Sarco Montiel Pág. 2
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 = [Link]("COM4", 9600) #instanciamos la comunicación serial
while True:
dato = input("Ingrese letra: ")
dato = [Link]()
if dato == "a":
[Link](b"a")
elif dato == "b":
[Link](b"b")
elif dato == "x":
[Link](b"b")
[Link]() #cerramos la comunicación serial y la dejamos libre
break
else:
print("Letra incorrecta")
print("Programa finalizado")
[Link]()
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. 3
Lab. N° 9 Python-Comunicación Serial-Arduino
from tkinter import*
from tkinter import messagebox
import serial as sr
uno = [Link]("COM4", 9600) #instanciamos la comunicación serial
root = Tk()#Instanciamos pantalla principal
[Link]('Comunicación Serial') #Título de la ventana
[Link]('200x150') #Configuramos el Ancho x Altura de la ventana
[Link](bg="gray95") #Fondo de la ventana
[Link]("[Link]") #Llamamos al archivo de tipo ico
#Función con parámetros
def led(x):
if x==1: #Activa led
[Link](b"a")
label_0['text'] = "ON"; label_0["bg"]="white"; label_0["fg"]="Black"
[Link](id, fill="white")
elif x==2: #Apaga led
[Link](b"b")
label_0['text'] = "OFF"; label_0["bg"]="gray35"; label_0["fg"]="White"
[Link](id, fill="gray35")
#Función para cerrar la comunicación serial
def al_cerrar():
if [Link]("Salir", "¿Quieres salir?"):
[Link]()
[Link]()
#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
[Link]() #Posicionamiento relativo (pack)
[Link](row=0, column=0) #Posicionamiento grilla (grid)
label_0.grid(row=0, column=0) #Posicionamiento grilla (grid)
[Link]() #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)
[Link]("WM_DELETE_WINDOW", al_cerrar)
[Link]() #Bucle que actualiza continuamente la ventana
Docente: Armando Sarco Montiel Pág. 4
Lab. N° 9 Python-Comunicación Serial-Arduino
En este problema lo hice en cmd “Python”, pero se desarrollo con normalidad
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 [Link] del platformio
#include <Arduino.h>
void setup(){
[Link](9600);
}
void loop(){
if([Link]()>0){
int v = [Link](); //Recibimos datos de python y lo parseamos a
entero
analogWrite(3,v);
[Link]("velocidad:");
[Link]("\t");
[Link](v);
}
}
#Programa en el python
import serial
arduino = [Link]("COM4", 9600) #instanciamos la comunicación serial
while True:
dato = input("Ingrese velocidad del motor (0-255): ")
if([Link]()):
if(int(dato)>=0 and int(dato)<=255):
[Link]([Link]())
print(f"La velocidad del motor es: {dato}")
else:
print ("Rango de velocidad incorrecto")
Docente: Armando Sarco Montiel Pág. 5
Lab. N° 9 Python-Comunicación Serial-Arduino
elif dato == "x":
[Link](b"0")
[Link]()
break
else:
print("La velocidad debe ser un número")
print("Programa finalizado")
El “void setup” y “void loop”. Consiste en ingresar la velocidad del motor entre el rango de 0
y 255 y el resultado es lo que aparece en la imagen
Docente: Armando Sarco Montiel Pág. 6