Introducción Python
Introducción Python
Introducción Python
En este artículo vamos a ver cómo leer datos procedentes de una plataforma Arduino con Python. Para
quienes no lo conozcáis, Arduino es una plataforma de hardware libreconcebida para crear prototipos de
manera rápida y fácil usando componentes electrónicos. Gracias a Arduino vamos a alejarnos un poco de lo
que solemos ver en este blog, que es solo software, y vamos a poder interactuar con el mundo real de una
manera más directa.
Este artículo nace gracias a mi reciente incorporación a Aerobot, el club de robótica de mi escuela, donde iré
En este artículo no vamos a ver en detalle qué es Arduino o el lenguaje con el que se programa. Para ello os
remito a gente que sabe mucho más que nosotros: al final del artículo incluyo unos enlaces que os pueden
interesar si queréis profundizar en este tema. Sin embargo, sí que vamos a explicar brevemente cómo es el
proceso de escribir un programa para Arduino, por razones que en seguida veremos.
Tal y como se detalla en la documentación, el proceso de compilación en Arduino funciona a grandes rasgos
de la siguiente manera:
El concepto
Conceptualmente, el tutorial de hoy es muy sencillo. Tenemos un código en python ejecutándose dentro de
nuestro ordenador que envía mensajes (carácteres) a la placa Arduino. Ésta estará previamente cargada con
un código para recibir mensajes por serial y activar un actuador (un LED).
Material
Y si habéis seguido todos los pasos debería funcionar correctamente. Ahora ya estamos preparados para
controlar algo más complejo como puede ser un Servo o un actuador por el estilo.
Por supuesto, el mundo de Arduino no resulta una excepción y resulta muy sencillo conectar Arduino
con Python, empleando el puerto serie y la librería PySerial.
En esta entrada veremos cómo conectar Arduino con Python y la librería PySerial, para emplearlo en
nuestros proyectos de electrónica, robótica e IoT.
La comunicación por puerto serie puede realizarse tanto por cable, como de forma inalámbrica por
bluetooth, como vimos en la entrada Conectar Arduino por Bluetooth con los módulos HC-05 ó HC-06
Para esta entrada emplearemos el puerto de Arduino. Si aún no estás familiarizado con el puerto serie,
puedes leer la entrada Comunicación de Arduino con puerto serie.
Lo primero que necesitamos es tener instalado Python en nuestro dispositivo. Si aún no te has iniciado
con Python puedes consultar la entrada Nuestro primer programa en Python donde vimos cómo instalar
Python en Windows y Linux, y unos ejemplos básicos para introducir su uso.
Una vez que tengamos Python instalado para poder comunicarnos con Arduino necesitamos la
librería PySerial, que nos permite emplear de forma sencilla el puerto serie. La librería PySerial está
disponible en este enlace https://github.com/pyserial/pyserial
También podemos instalar la librería PySerial directamente desde Python, escribiendo el siguiente
comando desde una consola.
EJEMPLOS DE CÓDIGO
A continuación vamos a ver un par de ejemplos sencillos para empezar a probar y usar la librería
PySerial junto con Arduino.
En este primer ejemplo vamos a leer información enviada por Arduino, y capturada y mostrada en
pantalla por Python.
Para ello empezamos cargamos en Arduino el siguiente sketch, que simplemente envía
continuamente una vez por segundo el texto “Hola Mundo”.
Lo que hacemos es importar la librería Serial (PySerial) e instanciar un objeto PySerial, que hemos llamado
“arduino”. En el constructor del objeto Serial pasamos los parámetros del puerto serie que estemos
empleado.
Recuerda sustituir el puerto serie del código, en el ejemplo “COM4”, por el puerto serie
en el que tengas conectado Arduino.
A continuación, empleamos la orden “readline()” del objeto Serial para leer una línea enviada por
Arduino. Mostramos la línea en pantalla mediante la orden “Print()”
Finalmente mediante la orden “close()” cerramos el puerto serie.
Como vemos, emplear el puerto serie con PySerial es realmente sencillo. Lo único que puede parecer
extraño es por qué hemos tenido que importar la librería “time”.
El motivo es que desde que creamos el objeto Serial hasta realmente está disponible para ser usado,
se necesita un cierto tiempo para abrir el puerto serie. Por tanto, tenemos que introducir una espera
mediante la función “Sleep”, que pertenece a la librería “time”.
En este segundo ejemplo vamos a enviar datos a Arduino desde Python. Para ello vamos a usar el
siguiente sketch que vimos en la entrada Comunicación de Arduino con puerto serie.
Este sketch recibe un número desde 1 a 9 y hace parpadear el LED integrado, conectado al PIN13, el
número de veces recibido. Cargamos el sketch en Arduino, e igual que antes lo dejamos funcionado.
En la parte de Python necesitaremos un nuevo script que llamaremos, por ejemplo “write.py”. En su interior
pegamos el siguiente código.
Como vemos la escritura es muy similar a la lectura. En primer lugar importamos la librería PySerial y
creamos un nuevo objeto de tipo Serial, indicando los valores del puerto serie que estemos empleando.
En esta ocasión, escribimos el valor mediante la función “write” (en el ejemplo, 9). La función “Write”
envía bytes, por lo que es necesario convertir el valor a bytes antecediendo una b al valor enviado (en el
ejemplo b’9’).
Nuevamente hemos tenido que importar la librería time, para poder usar la función Sleep, y dar un
tiempo entre el inicio de la conexión del puerto serie y el envío de datos.
Con esto ya tenemos las funciones básicas para enviar y recibir información a Arduino desde Python,
empleando la librería PySerial para controlar el puerto serie. Resulta sencillo integrar estas funciones en
nuestros programas.
UN EJEMPLO COMPLETO
Realicemos ahora un pequeño proyecto que nos permita integrar todo lo que describimos en la
sección anterior. Vamos a usar un botón para controlar el prendido y apagado de un LED.
Además del Arduino Uno conectado vía USB a la computadora anfitriona, vamos a requerir el
siguiente hardware:
Un protoboard.
Un botón o pulsador (push button).
Un LED (diodo emisor de luz).
Una resistencia de 330Ω (bandas naranja, naranja, café).
Una resistencia de 10KΩ (bandas café, negro, naranja).
Cinco cables conectores.
La siguiente figura, elaborada con Fritzing, muestra la manera de conectar todos los
componentes:
El ánodo del LED (la patita larga) se conecta al pin 12 del Arduino, mientras que el cátodo (la patita
corta) se conecta a la resistencia de 330Ω. El otro extremo de esta resistencia se conecta a tierra
(bus negativo).
El push button se coloca de tal forma que un par de patitas quede a la izquierda y el otro par a la
derecha del canal central del protoboard. Conectamos una de las patitas inferiores del botón al
bus positivo. Una de las patitas superiores del botón se conecta a una resistencia de 10KΩ,
mientras el otro extremo de la resistencia se conecta a tierra (bus negativo). La patita superior que
queda del botón se conecta al pin 8 del Arduino. Dada esta disposición, se dice que la resistencia
es de tipo pull-down. En términos prácticos esto significa que el valor que va leer el pin 8 por
omisión (cuando el botón no está presionado) es 0V, y 5V cuando el botón está presionado.
# Archivo: led_boton.py
import pyfirmata
placa = pyfirmata.Arduino('/dev/ttyACM0')
pyfirmata.util.Iterator(placa).start()
entrada = placa.get_pin('d:8:i')
entrada.enable_reporting()
salida = placa.get_pin('d:12:o')
try:
encendido = False
while True:
if entrada.read():
encendido = not encendido
salida.write(encendido)
placa.pass_time(0.2)
finally:
salida.write(False)
placa.exit()
Para correr el programa, requerimos ejecutar el siguiente comando desde una terminal en el
mismo directorio donde radica el archivo led_boton.py:
python3 led_boton.py
Cuando corremos el programa, el LED se prende cuando presionamos el botón y se apaga cuando
lo volvemos a presionar, y así indefinidamente hasta que presionemos Ctrl-C para terminar el
programa.
UNIVERSIDAD MAYOR DE SAN ANDRES
FACULTAD DE TECNOLOGIA
CARRERA DE ELECTRONICA Y TELECOMUNICACIONES
TRABAJO
MICROPROCESADORES II