USERS Bi |!
Programaci6n en
ython
©.©
PROYECTOS PRACTICOS - RASPBERRY PI
MICROPYTHONProgramacion en
ython
PROYECTOS PRACTICOS - RASPBERRY PI
MICROPYTHON
Gaara
Titulo: Programaci6n en Python - Vol. IIT / Autor: Edgardo Stasi
Coordinador editorial: Miguel Lederkremer / Edici6n: Claudio Penta
Disefio y Maquetado: Marina Mozzetti / Coleccién: USERS ebooks - LPCU298
Copyright © MMXX. Es una publicacién de Six
Ediciones. Hecho el depésito que marca la ley
11723. Todos los derechos reservados. Esta
pubiicacién no puede ser reproducida ni en todo
ni en parte, por ningdn medio actual o futuro, sin
al permiso previo y por escrito de Six Ediciones.
Su infraccién est penada por las leyes 11723
y 25446. La editorial no asume responsabiidad
alguna por cualquier consecuencia derivade de
la fabricacién, funcionamiento y/o utlizecién de
los servicios y productos que se describen y/o
analzan. Todas las marcas mencionadas en este
libro son propiedad exclusiva de sus respectivos
duefios. Libro de edicién argentina,
PREMIUM.REDUSERS.COM
Stasi, Edgardo
Programacién en Python 3 : proyectos
pricticos - Raspberry Pi - Micropython
Edgardo Stasi, - 1a ed . - Ciudad Auténoma de
Buenos Aires : Six Ediciones, 2020
Libro digital, PDF - (Programacion en
Python ; 3)
Archivo Digital: online
ISBN 978-987-4958-26-6
1. Lenguajes de Programacién. I. Titulo.
CDD 005.4Proyectos con
Descubriendo
JavaScript Arduino,
PONGAEN PRACTICA EL
LENGUAJE DEL MOMENT
Nuestros expertos comparten su saber y experiencia
Calidad y cantidad por una minima cuota mensual
Cientos de publicaciones con los temas que mas interesan
Siempre, donde vayas. On Line — Off Line. En cualquier dispositivo
Al menos 1 novedad semanal. Lee todo lo que desees sin limites
cei) Peres ALi to)
SUSCRIBETE 921»
mw Pete ois eeklyPROLOGO
Python es un lenguaje de programacién que supo ganarse el cariito de la comuni-
dad de programadores tanto por su simplicidad en la escritura como en su poten-
cialidad a la hora de crear un proyecto.
No es extrafto, entonces, encontrarnos que cada vez mds sistemas sean imple-
mentados bajo este lenguaje y que su extensa comunidad aporte continuamente
librerias simples pero eficientes.
En este e-book, veremos distintas maneras que existen para llevar todo su poten-
cial a proyectos practicos, simples pero ilustrativos que, extrapolados, nos pueden
dar una idea de cémo encarar proyectar mas grande.
Para ello, veremos cémo ponerlos en prictica y obtener resultados en el mundo
{fisico utilizando placas de usos miiltiples, como Raspberry pi o pyboard.
También conoceremos MicroPython, una versién acotada del lenguaje, aunque no
menos potente, creada exclusivamente para funcionar en componentes donde los
recursos son limitados por tratarse de placas de un tamario reducido, ideales para
la implementacién de sistemas dentro del mundo del lol.
Acerca del autor
Edgardo Stasi es un Ingeniero en informatica argentino,
recibido en el afio 2004. Ha desarrollado distintos sistemas de
gestion empresarial adquiriendo experiencia con los lenguajes
VB6, Progress 4GL, VB.Net. En los Ultimos afios comenzé a
desarrollar aplicaciones para entorno web, lo que lo llevé a
capacitarse en HTML, CSS, PHP y JS.
Sus primeros encuentros con Python fueron en el laboratorio
de programacién de la facuitad, donde pudo visualizar su potencial y su simplicidad de
Codificacin. Actualmente, es su lenguaje preferido como hobby, con el que desarrolla
e implementa proyectos de domotica y robotica de manera aficionada.ython es un lenguaje de programacién multiplataforma, consistente y
maduro, utilizado por numerosas empresas internacionales. Se utiliza
en miltiples campos tales como aplicaciones web, juegos y multimedia,
interfaces grificas, networking, aplicaciones cientificas, inteligencia artificial y
muchos otros.
En esta serie de ebooks sobre programacion en Python el lector encontrara todo
lo necesario para iniciarse 0 profundizar sus conocimientos en este lenguaje de
programacién.
El curso se compone de tres volimenes, orientados tanto a quien recién se inicia
en este lenguaje como a quien ya esta involucrado y quiere profundizar sus
conocimientos de Python.
Volumen |
Se realiza una revisién de las caracteristicas de este lenguaje, también se entregan
las indicaciones para instalar el entorno de desarrollo y se analizan los elementos
basicos de la sintaxis y el uso de las estructuras de control, con una serie de
cédigos de ejemplo explicados en detalle
Volumen II
Se presenta el paradigma de programacién orientada a objetos con todas sus
implicancias: clases, herencia y todo el campo de posibilidades que nos abre
comenzar a utilizar este paradigma en Python.
Volumen III
Orientado a la aplicacién de Python en proyectos, veremos ejemplos de aplicacion
en Raspberry Pi y Micropython entre otros.
iExitos en este nuevo desafio!
4 PRENIUM.REDUSERS.CON.01 - QUE ES RASPBERRY PI /6
EL SOFTWARE / 6
EL HARDWARE [ 7
PREPARAMOS PYTHON / 10
ACCESO A RASPBERRY PI POR SHH /11
QUE ES SHH?
02 - GPIO / 14
DISENO DEL CIRCUITO /15
CONEXIONES PROTOBOARD PLACA /
CONEXIONES DE ELEMENTOS
ALTERNATIVAS SI NO
TENEMOS LA PLACA / 16
NUESTRO CODIGO / 18
LIBERIA TIME / LIBRERIA GPIO /
CONTINUEMOS CON EL C60'60
03 - HACKEO A
MINECRAFT PI / 22
INSTALACION DE MINECRAFT / 22
PRIMEROS PASOS / 23
HOLA MINECRAFT / 25
CONECTARNOS CON MINECRAFT / 25
COMANDOS PYTHON PARA MINECRAFT PI /
ARMEMOS NUESTRA CASA
OTROS COMANDOS INTERESANTES / 38
MINECRAFT.PLAYER / MINECRAFT.CAMERA
APLICACIONES / 39
04 - MICROPYTHON / 40
VENTAJAS / 40
DESVENTAJAS / 40
PREMIUM.REDUSERS.COM
PLACAS COMPATIBLES
CON MYCROPYTHON / 41
PYBOARD / WIPY / ESP8 266 / BBC.MICRO.BIT
PLACAS PYBOARD / 44
PRIMEROS PASOS / MODULO PYB / CLASES / MODULO
MACHINE / SIMULADPOR ON LINE DE PYBQARD
ENCENDAMOS EL LED / 54
05 - PROYECTOS
EN MYCROPYTHON / 56
HOLA MUNDO | 56
LA CLASE l2C / LA CLASE FRAMEBUF
HAGAMOS NUESTRA APLICACION / 60
CONTROL DE SERVO / 63
PYTHON Y 10T / 69
Apéndice - DJANGO:
PYTHON EN LA WEB / 70
QUE ES DJANGO / 70
‘SUS ORIGENES
INSTALACION EN WINDOWS
O LINUX /71
EN LINUX / EN WINDOWS:
ENTORNOS VIRTUALES / 72
USOS DE ENTORNOS VIRTUALES
CREAR UN PROYECTO / 74
ESTRUCTURA
AGREGAR UNA APLICACION
A UN PROYECTO /78
LOGICA DEL FUNCIONAMIENTO /
ARMADO DE UN TEMPLATE / HOLA MUNDO.
RESUMEN / 87Qué es Raspberry pi
La tecnologia avanza en una direccién indiscutible apuntando a la
hiperconectividad, y en este proceso el LoTT (internet de las cosas) toma relevancia
y comienza a vivir Su auge. Para acompaiiar este movimiento, surgen placas que
simplifican el diseflo y la implementacion de proyectos que permiten conectar
distintos dispositivos para obtener, procesar y transmitir informacion en tiempo real
Raspberry pi da un salto a esto e integra en una placa de un tamafto poco mayor
que una tarjeta de crédito una computadora funcional con todos sus componentes.
Solo basta conectarle una memoria con una imagen del sistema operativo, un
teclado, un mouse, un monitor y parlantes, para poder disfrutar de sus capacidades.
EL SOFTWARE
Si bien podemos instalar distintas versiones de sistemas operativos, al menos, para
seguir este curso, recomendamos instalar Raspbian, una distribuci6n GNU/Linux
basado en Debian y optimizada para el hardware disponible.
Una vez que tenemos este sistema operativo funcionando, vamos a verificar que,
dentro de los programas preinstalados, se encuentra Python, por lo que solo nos resta
comenzar a escribir chdigo
para generar nuestros
programas, procesos 0
automatizaciones.
Ra Ss p b I a n Raspbian: distribucién
Debian para Raspberry pi.
6 PRENIUM.REDUSERS.CON.EL HARDWARE
Como ya hemos visto, la placa Raspberry pi es una computadora integrada, a la que
solo le faltan los periféricos.
Segiin la version que tengamos, sera el hardware disponible, sin embargo, para los
alcances de este e-book, es indistinto con cual estemos trabajando.
Placa Raspberry pi 2015.
Si observamos detalladamente la imagen anterior, nos vamos a encontrar con una
serie de pines generales de entrada/salida, conocidos como GPIO (General Purpose
Input/Output), estos nos van a permitir interactuar con el mundo exterior mas alla de
los periféricos estandares
PREMIUM.REDUSERS.COM1. Qué es Raspberry pi
Desde Python, veremos como conectarnos y obtener o transmitir datos a través
de ellos. Por tal raz6n, es importante que sepamos cmo identificarlos y cual es su
funcion individualmente.
KEE les ae
bg Uilele 9
CVT ee}
Lele 2
Alimenta
isle
Ieee
ele Baecets)
En las Ultimas versiones
de Raspbian OS, podemos
ejecutar pinout por
consola para obtener la
configuracién de pines
sobre la placa que estamos
Alimentacién 84 1 sbaiando
Alimentacion 5v
Masa
BCM 14 (1x0)
BCM 15 (Axo)
BCM 18 (pwn)
Masa
BCM 23
BCM 24
Masa
BCM 25
BCM 8 (ceo)
BCM 7 (ce1)
BCM 1 (1osc)
Masa
BCM 12 (pwno)
Masa
BCM 16
BCM 20 (mos),
BCM 21(sciK)
Resultado de pinout.
PRENIUM.RED| conPeer
Perera
ea
Suna eed
Camera ports (CSI)
[See va eos 8)
rr
EE]
ted
te!
GPIoa (7 ones
othe)
CaCed Cary
Cota
ote tre)
EYemal ote)
Coeet)
Cao ty)
CoCr ated
GPIO7
GPT00 orn
at)
Corr ted
Cored
ator) coer
Cr ats)
Cetra
PREMIUM.REDUSERS.COM
python Vol.3,
Para trabajar desde Python,
bastard con asignar a una
variable un pin determinado.
A partir de ese momento,
podremos leer o escribir el
estado de dicha variable,
que va a otorgarnos el
estado electrénico del pin en
cuestion.
En Raspberry pi podremos
hacerlo de dos formas
distintas
* mediante el ntimero fisico
en la placa, 0
* mediante el nimero
de canal asignado en el
procesador (BCM).
clea
en cuenta
Los pines GPIO
Peer Le Rd
Pu acy
Dae
esto para evitar
sobrecargarlo y
CTE ac}
placa Raspberry pi.1. Qué es Raspberry pi eS
PREPARAMOS PYTHON
Para comenzar a programar con Python, debemos contar con la libreria GPO.
Si nuestra placa tiene instalado Raspian OS, ya viene correctamente instalada.
Sin embargo, si por algin motivo no se encuentra, 0 estamos utilizando alguna
otra distribucién como sistema operativo, deberemos ejecutar desde consola los
siguientes comandos:
Con el primero, instalamos Python, si no esta. Mientras que, con el segundo,
instalamos la libreria GPIO.
Cuando, por algin inconveniente, el paso anterior no funciona, podemos
instalar la Libreria en forma manual.
Lo primero que haremos es descargar el paquete desde:
https://pypi.org/project/RPi.GPIO/.
Luego, lo descomprimimos (en caso de cambiar el nombre del archivo,
colocamos el correcto):
Entramos al directorio que acabamos de crear en la descarga:
Instalamos la libreria con:
Con todo esto, ya estamos en condiciones de comenzar a programar.
Dicha programacién podemos hacerla de dos maneras distintas.
* Desde la misma placa, instaldndole los periféticos adecuados para poder
manipular y visualizar como si de una computadora se tratase.
* De manera remota, accediendo mediante SSH (Secure Shell).
10 PRENIUM.REDUSERS.COMeee python Vol.3
ACCESO REMOTO A
RASPBERRY PI POR SSH
Si no contamos con los periféricos adecuados o preferimos acceder a nuestra placa
de manera remota, podemos utilizar este protocolo y trabajar desde una PC como si
estuvigramos haciéndolo desde la misma Rasberry pi.
éQué es SSH?
Es un protocolo de acceso remoto seguro, que utiliza la arquitectura cliente/servidor.
A diferencia de otros protocolos, SSH encripta la informacion
.
iia Swatch lly
Raspberry Pi i
Esquema basico de SSH.
Para poder acceder, es
condicién que estemos
conectados en la misma
red y que conozcamos la ip
@ Prearammng
® office
@ treme
Bb Games de la Raspberry pi
—_— Lo primero que haremos
es habilitar desde la
® tap > 2 Raspberry el SSH. Para
ello, deberemos conectarle
By 4 Remove sotare un monitor y un teclado,
Dir We, Aopearance Settings y acceder a la parte de
GBI Audio Device Settings configuraciones.
BB srurcown
FA vain ers ester
[BB Mouse and Keyboard Settings
Acceso a configuracién
por SSH.
PREMIUM.REDUSERS.COM "11. Qué es Raspberry pi eS
Activacién SSH -
Modo grafico
Luego, en la
ventana que se nos
abre, presionamos
en la solapa de
interfaces,
buscamos la
opcién SSH y
la tildamos en
enable.
120: Enabled © Disabled
Sonat: ® Enabled Disabled
1-Wire Enabled © Disabled
Remote GPIO: Enabled © Disabled
Hecho esto, podremos acceder desde la maquina cliente. Para eso aceedemos
a la consola de comandos y escribimos ssh seguida del nimero ip y el nombre
del usuario -Lusr-name (por defecto pi). Al presionar ENTER, nos pediré una
contrasefia, que por defecto es raspberry. Una vez cumplidos estos pasos,
ya estamos dentro de nuestra placa y podremos enviar los comandos como si
estuviéramos de manera local.
En el caso de que tengamos instalada una versién de Raspbian Lite, que no
incluye la interfaz grafica y solo tenemos acceso por consola de comandos,
deberemos escribir sudo raspi-config y asi se nos abrir un ment.
Ment acceso a configuracién por comandos.
12 PRENIUM.REDUSERS.CON.Ss python Vol.3
Una vez en este ment, accedemos a Interfacing Options y seleccionaremos,
en la nueva pantalla, la opcién SSH para habilitarla.
Activacién SSH - Modo comandos
Ahora si. Ya tenemos todo en condiciones para poder comenzar a programar
nuestro proyecto.
PREMIUM.REDUSERS.COM 13GPIO
En este capitulo nos introduciremos en el uso de la libretia GPIO. Como vimos en el
capitulo anterior, podremos transmitir o recibir sefiales de cada uno de los pines de
la placa
Para poner esto en practica, diseftaremos un circuito con el cual sera posible
encender 0 apagar un led mediante un pulsador,
Disefio eléctrico de nuestro proyecto
14
PRENIUM.REDUSERS.CON.Los materiales que utilizaremos son:
© Una placa Raspberry pi 3
* Un diodo led
* Una resistencia de 1000.
* Un pulsador.
* Una protoboard
* Tres cables macho-hembra
* Dos cables macho-macho.
Para escribir nuestro cédigo, crearemos una carpeta llamada proyectos y, dentro
de esta, un archivo con el nombre proyecto py en donde escribiremos nuestro
eédigo Python.
DISENO DEL CIRCUITO
Para asegurarnos un correcto funcionamiento, conectaremos siguiendo
el siguiente detalle
CONEXIONES PROTOBOARD-PLACA
* Tomaremos un cable macho-hembra y conectaremos la columna 2 de la zona de
alimentacién de nuestra protoboard al pin 6 (GND).
* Desde el pin 3 (BCM 2), conectaremos la linea 3
* Luego, desde el pin 11, conectaremos la linea 13
* Conectaremos la fila I y 8 con la columna 2 de la zona de alimentacién, que ya
habiamos conectado GND de la placa
PREMIUM.RED com2. GPIO
CONEXIONES DE ELEMENTOS
* El pulsador lo colocaremos puenteando la fila 1 y 3 de la protoboard.
* El LED, lo conectaremos: positivo en fila 9 y negativo en fila 8
* Colocaremos la resistencia de manera que haga un puente entre la fila 13 y la
fila 9 para alimentar el led de manera segura.
ALTERNATIVAS SI
NO TENEMOS LA PLACA
Ya contamos con nuestro circuito armado y con el archivo creado listo para recibir
el codigo que ejecutaremos en nuestra Raspberry pi. Solo nos resta comenzar a
codificar. Pero si no tenemos una placa, podemos simular de manera online nuestro
proyecto
Para esto, accederemos a un simulador online gratuito alojado en
https://create.withcode.uk/,
donde podremos codificar y observar los resultados sin necesidad de tener una placa
Calculos de Resistencia
Sabemos que nuestro led funciona con un voltaje de 2,1V, con una
ee CER Cea Kersh
SEES Cte ues One eu ee
eS eR CCR CR CUCU eee ics
3,3V-2,1=1,2V
Secrecy
necesitaremos una resistencia para obtener una caida de tensi6n de al
menos 1,2V.
OMe ee oy Wnty d ea Lee)
toe Ue Ce AOR yale rau ice
16 PRENIUN.RED conCasas python Vol.3
ee create.withcode.uk
mycode.py HH
name = input("What is your name?")
print("Hello " + name)
Dt
Simulador online de Python.
Su uso es simple intuitivo, ya que va cargando componentes a medida que
importamos bibliotecas en nuestro codigo
En el caso de importar GPIO, nos mostrara la siguiente pantalla
. create.withcode.uk
mcode.py HH
import RPi.GPIO as io
mycode.py x
Médulo de GPIO cargado.
En este médulo, visualizaremos una luz, que indica el estado de un pin, y
podremos tildar para indicar que esta recibiendo una sefial y simular asi el
comportamiento de nuestro proyecto.
PREMIUM.REDUSERS.COM W72.GPIO ea
NUESTRO CODIGO
Lo primero que haremos es importar la libreria que nos permitira codificar y
manipular cada uno de los pines GPIO.
Es importante colocarle un alias (en este caso io), para simplificar el llamado
posterior a la libreria.Luego, para tener un mejor manejo del tiempo y las esperas,
importamos la libreria time:
Antes de avanzar, detengémonos a analizar estas librerias para conocer
brevemente de qué se tratan.
LIBRERIA TIME
Esta biblioteca incluye un conjunto de funciones que nos permiten trabajar con fecha
y hora. Entre las mas importantes, podriamos mencionar:
* time(): nos devuelve la cantidad de segundos que transcurrieron desde las 0 h
del 1 de enero de 1970
© ctime(): esta funcién convierte una expresidn devuelta por time() en una
cadena del tipo semana mes dia hora:minutos:segundos aio. Por ejemplo sat
noy 1 20:30:01 2019.
* gmtime( ): obtencidn del tiempo UTC (tiempo universal coordinado) a partir de
los segundos. Esta funcién nos devuelve un objeto que posee los siguientes atributos:
+ tm_year: afio
+ tm_mon: mes
+ tm_mday: dia del mes
+ tm_hour: hora
«tm_min: minutos
+ tm_sec: segundos
+ tm_wday: dia de la semana [0, 6]
+ tm_yday: dia del afio [1, 366]
+ sleep(n): funcion que pone en suspensién n segundos la ejecucién del
programa.
18 PRENIUM.REDUSERS.COMSS python Vol.3
LIBRERIA GPIO
Como ya se ha dicho, esta libreria es la compuerta entre los pines de entrada/salida
de la placa y Python. Por tal raz6n resulta mds que interesante el hecho de conocer
cuales son las funciones mas importantes que contiene.
* setmode(modo): indica en qué modo vamos a referenciamos a los pines.
Podemos darle dos valores: de GPIO.BCM o por la placa (GPIO. BOARD).
© setup(pin, modo): configura para qué vamos a utilizar el pin. Podemos darle
dos valores: a modo GPIO. OUT (salida) 0 GPIO. IN (entrada).
* output (pin, valor): indicamos el valor que sacaremos por el pin sefalado.
Puede tomar dos valores: GPIO.HIGH (emitimos sefal, 3.3V) 0 GPIO. LOW (no
emitimos, 0).
* input (pin): lee el valor del pin indicado. El resultado puede estar entre dos
GPIO.HIGH (se reciben 3.3V) 0 GPIO. LOW (no se recibe nada, OV).
* PWM(pin, frecuencia): modulacién por ancho de pulso. Es un modo en el
que se modula la sefial para simular una transferencia analdgica al pin indicado
controlando la cantidad de energia que se entrega 0 se recibe.
* cleanup(): limpia el estado de todos los puertos empleados, devolviéndoles su
estado original.
CONTINUEMOS CON EL CODIGO
Ya importamos las librerias que vamos a utilizar en nuestro proyecto, ahora nos toca
comenzar a configurar de qué modo utilizaremos estos pines
En este caso, lo referenciaremos segin el canal empleado por el procesador, por
tal motivo configuraremos el modo en BCM.
Si miramos nuestro esquema, veremos que el pulsador lo conectaremos al pin 3
(BCM2), y el led, en el pin 11 (BCM17). Para ello, configuraremos el BCM2 como
entrada y el BCM17 como salida.
PREMIUM.REDUSERS.COM 192.GPIO
Pero para no tener que estar continuamente pensando qué numero representa
cada elemento, vamos a definir una variable para el pulsador y una para el LED. Y
referenciaremos el pin en el setup con estas variables.
pulsador = 2
led = 17
GPIO.setup(pulsador, GPIO.IN)
GPIO.setup(led, GPIO.OUT)
Lo que haremos ahora es generar un ciclo de 100 vueltas, con un retardo de medio
segundo, que leera continuamente el estado del pulsador, y en caso de obtener un
valor, encendera el led poniendo el estado del pin en alto. En caso contrario, lo
pondré en bajo.
Una vez finalizado el ciclo, limpiamos el estado de todos los pines utilizados.
for i in range(100):
inputValue = GPIO.input(pulsador)
if (inputValue == True):
GPIO.output(led, GPIO.HIGH)
else:
GPIO.output(led, GPIO.LOW)
time.sleep(@.5)
GPIO. cleanup()
20 PRENIUM.REDUSERS.CON.Casas python Vol.3
create.withcode.uk
rmycode-py #84
import RPi.GPIO as GPIO
import time
GPIO. setmode (GPIO..BCM)
pulsador = 2
led = 17
GPIO. setup(pulsador, GPIO.IN)
GPIO.setup(led, GPI0.OUT)
for i in range(10@)
inputValue = GPIO. input (pulsador)
if (inputValue ue):
GPIO.output(1ed, GPIO. HIGH)
else:
GPIO.output(led, GPIO. LOW)
tne. ste09(0.5) >Be
GPIO.cleanup()
mycode py *
Simulador en ejecucién y cédigo completo
PREMIUM.REDUSERS.COM 21Hackeo a
Minecraft Pi
Minecratt Pi es una version libre de este popular juego reescrito exclusivamente
para las placas Raspberry pi. Esta pensado como una herramienta educativa para
programadores y se puede descargar gratuitamente bajo licencia GNU desde
https://www.minecraft.net/en-us/edition/pi/.
Esta version del juego viene preinstalada en el sistema operativo Raspbian, por
eso es recomendable iniciar esta placa con este sistema operativo para simplificar
areas y evitar problemas de compatibilidades
INSTALACION
DE MINECRAFT PI
Si por algiin motivo nos vemos en la necesidad
de instalar Minecraft Pi, deberemos seguir estos
pasos
© Descargarlo desde la pagina indicada antes.
* Abrir una consola de comandos.
* Con el comando ed navegar hasta la carpeta
donde hemos descargado el juego, por lo general.
en a carpeta Download
ler © Descomprimir el archivo descargado: tar-
ee eae zxvf
[email protected].
* Acceder a la carpeta de instalacién: cd mepi.
Minecraft Pi - © Ejecutar Minecraft Pi: ./minecraft-pi.
Version del juego para Raspberry
También podemos descargar el juego directamente desde la consola de
COIS OUT Pu Ren On et ST nur u ied
weet https://s3.amazonaws.com/assets.minecraft.net/pi/minecraft-pi-0.1.1.tar.gz.
22 PRENIUM.REDUSERS.CON.PRIMEROS PASOS
Para programar Ordenes en el juego desde Python, lo primero que haremos es
iniciarlo. Esto podemos hacerlo desde la consola de comandbs, accediendo a la ruta
donde se halla guardado el juego, o desde el ment Game de nuestra placa Raspberti,
seleccionando Minecraft Pi
Derr eas)
Tae
PIVEOITION
Beery
tie iyi
STI =s
Pantalla inicial del juego
Una vez iniciado el juego, comenzamos una nueva partida presionando
Start Game y, en la pantalla que se nos abre a continuacién, hacemos clic en
Create new.
PREMIUM.REDUSERS.COM 233. Hackeo a Minecraft Pi SS
ee aaa)
Creacién de una nueva partida.
Una vez hecho esto, ya tenemos
el juego listo para utilizar. Lo
siguiente es abrir el IDLE de
Python para poder programar.
Para esto, nuevamente desde el
ment principal de programas,
seleccionamos.
Programing->Python 3(IDLE)
Es importante que tengamos
en todo momento el juego abierto
para que el cédigo que ejecutemos
desde el IDLE se vea reflejado
A partir de ahora, tenemos
dos opciones: crear un archivo
donde pondremos las rutinas para
luego ejecutarlas, o ir escribiendo
cédigo a medida que jugamos para
obtener los resultados Ejecucion del IDLE de Python.
a
3
Pat
&
e
tl
&
&
a
24 PRENIUM.REDUSERS.CON.|
python Vol.3
HOLA MINECRAFT
Vamos a programar nuestro primer script. En este caso, lo vamos a hacer
directamente desde el IDLE sin necesidad de crear un archivo aparte.
Para lograrlo, es importante que tengamos abierto tanto el juego como Python.
CONECTARNOS CON MINECRAFT
Para conectarnos con el juego desde Python, debemos importar la libreria
Minecraft perteneciente al paquete mepi. Como ya sabemos, lo realizaremos con
el comando import.
Luego, deberemos crear un objeto con la funcién create(), que nos servira de
rnexo entre el lenguaje y el juego
Esta funcién puede ser Hamada con o sin parémetros. Si la llamamos sin
parimetros, nos referenciaré a una instancia del juego que est en ejecucién en el
mismo dispositive que Python y en el mismo instante.
Sin embargo, podemos llamarla pasdndole dos parimetros: direccién y puerto
Este cédigo crea una instancia para enlazarse a un mundo en el dispositivo cuya ip
es 192.168.1.33, y la comunicaci6n se establecerd mediante el puerto 4711
A partir de ahora, ya podremos manipular el mundo de Minecraft. Para ello, solo
debemos referenciar algtin método del objeto me.
Para poder escribir nuestro mensaje en el chat, lo que debemos hacer es llamar
al método postToChat (texto). Este método escribe directamente en el chat del
juego el texto que le estemos pasando como parametro, por eso lo utilizaremos con
el texto Hola Minecraft.
PREMIUM.REDUSERS.COM 253. Hackeo a Minecraft Pi
Hola Minecraft
Resultado de nuestro primer script.
Veremos cémo, con estas tres lineas, pudimos manipular nuestro juego de manera externa.
A continuacién, disefiaremos un pequefio refugio simple, pero antes de meternos
en el cédigo vamos a ver algunos de los comandos que tenemos disponibles en la
libreria y que nos permitiran automatizar distintas tareas en el juego.
COMANDOS PYTHON PARA MINECRAFT PI
Existen distintos comandos con los que podremos hacer una variedad de acciones
instanténeas en el juego solo con escribirlas en Python. De hecho, podremos
crearnos una interfaz con botones para ejecutar tareas rutinarias y ponerlas en
funciones al hacerle clic
Muchos de los comandos que se ejecutan hacen referencia a una posicién espacial
del mundo de Minecraft, por eso es importante que entendamos de qué se trata dicha
posicién espacial
POSICION ESPACIAL
Si nos remontamos a nuestras clases de matematica, recordaremos que, en el mo-
mento de querer dibujar en dos dimensiones, nos bastaba con un simple eje de dos
coordenadas (x e y).
26 PRENIUM.REDUSERS.CON.eee python Vol.3
Ejes de
coordenadas en 2
dimensiones
Pero si quisiéramos representar algo en tres dimensiones (supongamos un punto),
vamos a necesitar un eje més, por lo que obtendriamos un sistema de coordenadas de
tres ejes (x, y yz), donde x representa el ancho, y la altura y z la profundidad.
Ejes de
coordenadas en 3
dimensiones.
PREMIUM.REDUSERS.COM 273. Hackeo a Minecraft Pi
Como el mundo en Minecraft esta en tres dimensiones, es l6gico pensar que
necesitamos un eje de tres coordenadas para representar cada elemento. Y para
simplificar las cosas, la unidad tomada es un bloque. Es decir que cada uno posee
una unidad de ancho, por una de profundidad, por una de alto. De esta forma, si nos
movemos cuatro posiciones hacia la derecha, lo que estamos haciendo es movernos
cuatro bloques a la derecha
En un principio, el mundo esta lleno de bloques vacios, que se van llenando con
bloques de distintos materiales (piedra, césped, aire, etcétera)
AIR
STONE
GRASS
ORT
COBBLESTONE
WOOD_PLANKS
SAPLING
BEDROCK
WATER_FLOWING
WATER
WATER_STATIONARY
LAVA_FLOWING
Lava
LAVA_STATIONARY
‘SAND
GRAVEL
GOLD_ORE
TRON_ORE
COAL_ORE
wood
Leaves
GLass
LAPTS_LAZULT_ORE
LAPTS_LAZULI_BLOCK
Ceavaneunre
10
BU)
11
12
13
14
1s
16
17
18
20
21
22
‘SANDSTONE
BED
|COBWEB
GRASS_TALL
WOOL
FLOWER_YELLOW
FLOWER_CYAN
/MUSHROOM_BROWN
MUSHROOM_RED
|GOLD_BLock
TRON_BLOCK
STONE_SLAB_DOUBLE
STONE_SLAB
BRICK_BLOCK
TT
BOOKSHELF
MOSS_STONE
JopsIDIAN
TORCH
FIRE
STATRS_woOD
CHEST
DIAMOND_ORE
DIAMOND_BLOCK
Codigo de id de los bloques en Minecraft Pi.
28
24
26
38
31
35.
7
38
39
40
41
42
a3
44
45
46
a7
48
4g
58
51
53
54
56
37
CRAFTING TABLE 58
FARMLAND 60
FURNACE_INACTIVE 61
FURNACE_ACTIVE 62
]DOOR_WOOD 64
LADDER 65
STAIRS COBBLESTONE 67
DOOR_IRON 71
REDSTONE_ORE B
SNOW 78
Tce 79
|SNOW_BLOCK 80
cactus 81
clay 82
|SUGAR_CANE 83
FENCE 85
J]GLOWSTONE_BLOCK 89
BEDROCK_INVISIBLE 95
|STONE_BRICK 98
GLASS_PANE 102
MELON 103
FENCE_GATE 107
|GLOWING_OBSIDIAN 246
NETHER_REACTOR_CORE 247
PRENIUM.REDUSERS.CON.Ss python Vol.3
Cada bloque, cada objeto dentro de nuestro mundo, se encuentra en una
coordenada determinada por los valores asignados a x, y y z.
Sabiendo esto, podemos aprovechar Python para agregar, quitar o modificar un
bloque. También es posible posicionar nuestro personaje en distintos puntos del
espacio cambiandole al menos una de estas coordenadas.
Para comenzar a interactuar, es importante que sepamos cual es nuestra posicién
actual, de esa manera podremos alterar el mundo en torno al personaje.
Para obtener la posicién, deberemos escribir:
La funcion getPos() nos va a devolver un objeto con tres valores, cada uno
representa a una de las coordenadas espaciales.
Entonces, resulta eficaz crear tres variables donde almacenamos cada una de estas
coordenadas
Otra forma de hacer lo mismo es utilizar una técnica de Python, que consiste en
asignar las variables en una sola linea como sigue:
Como se observa, reducimos tres lineas el cddigo de nuestro script. Si
consideramos que tenemos muy limitada la cantidad de memoria disponible,
comprenderemos répidamente la importancia de optimizar lo mas que podemos el
cédigo.
Si queremos trasladar a nuestro personaje como si lo estuviéramos
teletransportando, deberemos utilizar la funci6n setPos(x,y,z). Como
imaginamos, asignaremos una nueva posicién al personaje estableciéndole las tres
coordenadas espaciales como pardmetro.
Entonces, si quisiéramos crear un script para teletransportarnos diez bloques mas
adelante, bastaria con escribir el siguiente cédigo:
PREMIUM.REDUSERS.COM 293. Hackeo a Minecraft Pi
from mcpi.minecraft import Minecraft
mc = Minecraft.create()
xX, y, Z = mc.player.getPos()
mc.player.setPos(x+10,y,z)
Ahora que sabemos la posicion de nuestro personaje y como movernos, vamos a
agregar un bloque frente a nosotros. Para ello utilizaremos la funcion setBlock()
Esta funcion recibe los siguientes parametros:
* x: coordenada en x;
* y: coordenada en y;
* z: coordenada en z;
* Ad: id de bloque a ingresar;
* data: este parimetro es opcional y se utiliza solo en algunos bloques. Su
funcién es asignarle alguna propiedad especial. Por ejemplo, si insertamos un
bloque del tipo lana (id = 35), podemos variar este parametro para indicar si es
blanco (data = @), naranja(data = 1), magenta (data = 2), celeste(data =
3) oamarillo (data = 4)
Insertemos entonces un bloque de piedra frente al personaje. Lo que haremos es:
* Definir una variable piedra a la que le asignaremos el valor correspondiente al
id del bloque de piedra.
* Obtener la posicién actual
* Insertar el blogue en la misma posicién que el personaje, pero aumentando en
uno x 0 z (si cambiamos y, situariamos el bloque por encima del personaje)
from mcpi.minecraft import Minecraft
piedra = 1
mc = Minecraft.create()
x, y, Z = mc.player.getPos()
mc.setBlock(x+1, y, z,piedra)
30 PRENIUM.REDUSERS.CON.S python Vol.3
Insertamos un bloque tipo piedra frente al personaje.
AVANCEMOS UN POCO MAS EN NUESTRO CODIGO
Lo que vamos a hacer ahora es que florezca todo a nuestro paso, en otras palabras,
insertaremos un bloque tipo flor a medida que vamos caminando. Para ello
deberemos realizar un script que no finalice nunca, y que cada corto tiempo obtenga
la posicién de nuestro personaje e intercambie el bloque existente debajo por un
bloque del tipo flor (id = 38)
Para pausar el cédigo, utilizaremos la funcién sleep(), de la libreria time, por
lo que debemos importarla a nuestro script.
from mcpi.minecraft import Minecraft
from time import sleep
flor = 38
me = Minecraft.create()
while True:
x, y, Z = me.player.getPos()
mc. setBlock(x,y-1,z, flor)
sleep(@.1)
PREMIUM.RED com 313. Hackeo a Minecraft Pi
Pero si queremos ser realistas, deberiamos poner una validacién mas, porque
nuestro cédigo nos inserta una flor debajo de nosotros sin importar el tipo de bloque
en el que estemos parados, y podremos poner una en el agua, en la arena, en el aire
0 en el césped. Pero lo coherente seria que solo floreciera cuando caminamos por el
césped, por este motivo antes de poner una flor, chequearemos si el bloque debajo de
nosotros tiene un id = 2 (Grass).
from mcpi.minecraft import Minecraft
from time import sleep
flor = 38
cesped = 2
mc = Minecraft.create()
while True:
x, y, Z = mc.player.getPos()
mipiso = mc.getBlock(x,y-1,2)
if mipiso == cesped:
mc. setBlock(x, y-1,z, flor)
sleep(@.1)
Veremos cémo ahora, a medida que caminamos, solo pondremos una flor si lo que
estamos pisando es un bloque del tipo césped. Si caminamos sobre cualquier otra
cosa, no pasa absolutamente nada
Como nuestro cédigo es infinito, si queremos frenarlo, deberemos presionar la
combinacién de teclas Ctrl + C en la ventana de Python
ARMAR UN CUBO SOLIDO DE BLOQUES
Si quisiéramos crear un cubo de 5 x 5x 5 bloques, la primera solucién que
encontrariamos seria la de anidar tres for de la siguiente manera:
piedra = 1
x, y, Z = mc.player.getPos()
for iz in range(1,6):
for iy in range(1,6):
for ix in range(1,6):
mc.setBlock(x + ix,y + iy,z + iz,piedra)
32 PRENIUM.REDUSERS.CON.Ss python Vol.3
Pero como la premisa que debemos considerar siempre, atendiendo la memoria
limitada que podamos llegar a tener en nuestra placa, es la de reducir el cddigo lo
mas posible, podemos utilizar la funcién setBlocks(), que hard el mismo trabajo,
pero en una sola linea.
Esta funci6n, recibe dos coordenadas, el tipo de bloque y opcionalmente alguna
caracteristica del bloque por insertar.
Para entender el desarrollo de esta funcion, deberemos visualizar un cubo en
un eje de coordenadas tridimensional, y centrarnos en dos vertices opuestos. La
idea es reconocer las coordenadas de estos vértices, y Python Ilenara el cubo
automaticamente con el bloque indicado.
Coordenadas
de vértices
de un cubo.
Con esta funcién, el codigo
anterior quedaria de la siguiente
manera:
Observemos que, tanto en el primer cédigo como en el segundo, el cubo de
bloques comienza a crearse a partir de la posicién del personaje mas 1, esto es para
asegurarnos que no lo aplastaremos al crear nuestra estructura.
PREMIUM.REDUSERS.COM 333. Hackeo a Minecraft Pi
ARMEMOS NUESTRA CASA
Ahora armarnos una casa de manera automitica. Siguiendo con el concepto
minimalista, trataremos de hacerlo con la menor cantidad de cédigo posible para
evitar sobrecargar la memoria de nuestra Raspberry pi
Una forma sencilla de levarlo a cabo es crear un cubo sélido de madera, y en
su interior crear un cubo de aire. Luego, nos deberiamos encargar de agregar una
ventana y una puerta en una de sus paredes
Pasemos al codigo.
Como siempre, lo primero que haremos es importar las librerias que vamos a
emplear:
frommcpi.minecraftimportMinecraft
Luego crearemos una variable que nos permita almacenar el id del bloque
que utilizaremos como estructura. Como vamos a utilizar el bloque de madera
trabajaremos con id =
estructura = 5
Como este tipo de bloque acepta distintos tipos, crearemos otra variable a la cual
le asignaremos el niimero que representa al deseado:
tipo = 3
Lo que estamos haciendo al crear estas dos variables es parametrizar el bloque
que utilizaremos. De manera que, si deseamos realizar la casa con otro material, no
tengamos que cambiar todo el cédigo, solo bastard con cambiarle el valor a estas
variables,
JUNGLE WOOD PLANK
Minecraft Id: 5:3
Caracteristicas del bloque a emplear.
34 PRENIUM.REDUSERS.CON.|
python Vol.3
Nos conectamos con el juego, creando su instancia y asignandola a una variable.
Luego obtenemos la posicién del personaje:
Para dejar listas las variables de posicién, vamos a aumentar el valor de z en
15. De esta manera, no tenemos que preocuparnos si la casa puede llegar a caernos
encima:
Al aumentar z en 15 unidades, estamos definiendo que la casa se va a construir 15
bloques frente a nosotros.
Una vez que tengamos las coordenadas listas, pasamos a crear el primer bloque
macizo, el cual lo haremos de 10 x 10 x 4.
El parametro y lo iniciamos desde la posicién -1. Lo hacemos asi para que el piso
de nuestra casa se encuentre a la altura del suelo que estamos pisando y no sobre un
escalén de un bloque.
Hasta el momento, construimos un bloque sélido con el material elegido, lo que
vamos a hacer ahora es ahuecarlo, Para ello crearemos un cubo de 9 x 9x 3 desde la
posicion x + 1. yyz + 1hastalaposicién x + 10,y + 3yz + 10
En este caso, el tipo de bloque va a ser aire, por lo que emplearemos el id = @.
Con esto ya tenemos un cubo hueco realizado con el material escogido, solo nos faltan
la puerta y la ventana. Para la puerta, dejaremos una abertura de 2 x 3. Es decir, id =
®. Pero para parametrizar el valor, crearemos una variable puerta con el fin de que en
el futuro podamos cambiar el material. Para la ventana, emplearemos ocho boques tipo
vidrio (id = 26), por lo que insertaremos cuatro bloques con y = 1en la mitad de la
pared donde coloquemos la puerta, y otros cuatro cony = 2.
Entonces, sabiendo que en las coordenadas (x; y3 z) de nuestro mundo
comienza una pared, y finaliza en (x + 10; y + 4; 2), podemos insertar la
puerta y la ventana de la siguiente manera:
PREMIUM.REDUSERS.COM 353. Hackeo a Minecraft Pi
PUERTA
* Bloquel:
* Bloque2:
* Bloque3:
* Bloque4:
* Bloques:
* Bloque6:
VENTANA
* Bloquel:
* Bloque2:
* Bloque3:
* Bloque4:
* Bloques:
* Bloque6:
* Bloque7:
* Bloque’:
Sabiendo esto, luego de ahuecar nuestro cubo, insertaremos el siguiente cédigo:
Hemos puesto una condici6n antes de insertar la ventana, porque la queremos
coordenadas (x + 13 y3 z)
coordenadas (x
coordenadas (x
coordenadas (x
coordenadas (x
coordenadas (x
+
+
+
+
+
en coordenadas (x
en coordenadas (x
en coordenadas (x
en coordenadas (x
en coordenadas (x
en coordenadas (x
en coordenadas (x
en coordenadas (x
despegada del suelo.
Podemos, al principio, crear dos variables con las que parametrizaremos la puerta
y la ventana. Entonces:
23 ys 2)
13; y + 13 z)
23 y + 13 z)
13 y + 23 z)
23 y + 23 z)
+45 y+ 5
+55 y+ 15
+63; y+ 15
+73 y+ 15
+ 45 y + 25
+53 y + 25
+ 63 y + 23
+73 y + 23
y la insertamos de la siguiente manera:
z)
z)
z)
z)
z)
z)
z)
z)
PRENIUM.REDUSERS.COMeee python Vol.3
for iy in range(@,3):
for ip in range(1,3): #bloque para puerta
mc.setBlock(x + ip, y + iy, z,puerta)
if iy> @:
for iv in range(4,8): #bloque para ventana
mc.setBlock(x + iv, y + iy,z,ventana)
Con esto, ya hemos terminado de armar toda la estructura de nuestra casa, que
quedara como sigue:
Disefio final de la casa armada.
Lo ultimo que le haremos al c6digo es teletransportar a nuestro personaje dentro
de la casa y para ello insertaremos lo siguiente
mc.player.setPos(x + 5,y,z + 5)
CODIGO COMPLETO
Luego de haber escrito todos los pasos, nuestro cédigo final es el siguiente
from mcpi.minecraft import Minecraft
estructura = 5
tipo = 3
PREMIUM.REDUSERS.COM 373. Hackeo a Minecraft Pi
puerta = @
ventana = 20
mc = Minecraft.create()
Xx, y, Z = mc.player.getPos()
z=z+i15
mc.setBlocks(x, y - 1, z,x +11, y+4, z+
11,estructura, tipo)
mc.setBlocks(x + 1, y, z + 1,x + 10, y + 3, z + 10,0)
for iy in range(0,3):
for ip in range(1,3): #bloque para puerta
mc.setBlock(x + ip, y + iy, z,puerta)
if iy> @:
for iv in range(4,8): #bloque para ventana
mc.setBlock(x + iv, y + iy,z,ventana)
me.player.setPos(x + 5,y,z + 5)
Mientras estemos jugando, bastard con ejecutar nuestro cédigo para que, en forma
automética, aparezca una casa lista para ser habitada con nuestro personaje dentro de ella
OTROS COMANDOS INTERESANTES
Existen muchos comandos dentro de la libreria de Minecraft: a continuacién,
pasaremos a conocer los mas destacados:
© getBlock(x,y,z): en muchas situaciones, nos vemos en la necesidad de saber
de qué esta hecho un determinado bloque. Esta funcién nos devuelve el id del
bloque posicionado en las coordenadas pasadas como parametros
* saveCheckpoint(): con esta funcién, grabamos la partida para ser recuperada
en cualquier momento, sin temor a que se pierdan los cambios 0 avances
realizados hasta el momento.
* restoreCheckpoint( ): esta funcién nos permite recuperar una partida
previamente almacenada con saveCheckpoint ()
38 PRENIUM.REDUSERS.CON.eee python Vol.3
MINECRAFT.PLAYER
El objeto player de Minecraft nos entrega una serie de funciones con las cuales
podremos interactuar con el personaje principal
Entre las funciones més importantes podemos nombrar:
* getPos() y setPos(): obtenemos o seteamos la posicién actual del personaje.
* getRotation( ): nos devuelve en qué direccién esta mirando el personaje. El
resultado es un valor que va de @ a 369, representando los grados del angulo de
rotacion.
MINECRAFT.CAMERA
Este objeto nos permite manipular la vista del juego. Entre los comandos mas
destacados podemos nombrar:
* setNormal (entityid): carga la camara normal para un determinado jugador
que pasamos como parametro.
* setFollow(entityid): con esta funcién, la cémara entra en modo para
seguir a la entidad especificada
APLICACIONES
En este capitulo vimos algunos de los comandos que la libreria minecraft para
Python nos ofrece. También conocimos algunos métodos para modificar el mundo
que rodea a nuestro personaje. Pero las posibilidades son infinitas, y los limites
de qué cosas podemos hacer queda en cada uno de nosotros hasta donde nos Ileve
nuestra inventiva.
Siguiendo con el ejemplo de la casa, podriamos Hamar una subrutina para
amueblarla. © hacer que aparezcan y desaparezcan elementos en funcién del
tiempo con las funciones setBlock() en posiciones aleatorias, con lo que nos
entretendriamos como si de un minijuego se tratase, en el que el objetivo seria
obtener la mayor cantidad de determinados elementos.
Si bien vimos herramientas suficientes para interactuar con el mundo, podemos
acceder a una guia completa del API desde
https://www.stuffaboutcode.com/p/minecraft-api-reference.html..
PREMIUM.REDUSERS.COM 39MicroPython
Seginn el sitio oficial, MicroPython es un pequefio pero eficiente interprete del
lenguaje de programacién Python 3 optimizado para que pueda ser ejecutado en
microcontroladores y ambientes restringidos.
A pasos lentos pero seguros, este lenguaje supo hacerse camino en el [oT, por un
lado, por la sencillez en su uso, por la prolijidad de su cédigo; y por el otro, porque
al ser de cédigo abierto cuenta con un sinfin de librerias para poder implementar
cualquier tipo de proyecto, comandando una importante cantidad de placas
VENTAJAS
© Incluye un RELP (Read-Eval-Print-Loop 0 consola de lenguaje) que lee las
instrucciones, las evalta y procesa los resultados sin necesidad de compilar 0
cargar los programas en la memoria del dispositive.
Muchas librerias para la ejecucién de tareas y el simplificado de codificaci6n
Con estas librerias, podemos conectarnos mediante un socket, leer un JSON
(sigia en inglés de notacién de objetos de JavaScript) desde un sitio web, entre
otras posibilidades, con las cuales simplificamos la programacin y reducimos el
eédigo por cargar.
* Extensible: podemos extender Python con lenguajes de programacién de mas
bajo nivel con los cuales personalizaremos mejor los procesos y resultados.
DESVENTAJAS
* MicroPython esta elaborado con las funciones mas relevantes de Python 3 y
sus librerias. Si bien est basado en su eficiencia, podemos encontrarnos muchas
veces con que no contamos con algo que solemos utilizar en su version completa.
* Como no es un lenguaje de bajo nivel, su ejecucién suele ser mas lenta que en
homélogos realizados en C 0 C++.
40 PRENIUM.REDUSERS.CON.PLACAS COMPATIBLES
CON MICROPYTHON
Existen muchas placas compatibles con MicroPython. Si bien cada una tiene sus
particularidades, todas se caracterizan por la simplicidad en el uso y la programacién
de la mano de este potente lenguaje. Algunas de las mas empleadas son:
PYBOARD
Esta placa es un disefio compacto pero poderoso que se puede conectar a una PC
mediante un cable micro USB, como el de los celulares.
Fue disefiada exclusivamente para ser programada con Python, por lo que posee
una integracién perfecta con este lenguaje
Pena tet B
PREMIUM.REDUSERS.COM a4. MicroPython
Posee una memoria RAM de 256KB, cuenta con conectividad WiFi y Bluetooth.
Si bien no esté preparada para que se le instale un sistema operativo como si sucede
con la Raspberry, ofrece una gran versatilidad al permitir ejecutar codigos de manera
remota desde un dispositivo anfitrién, o almacenando el cddigo por ejecutar en
la memoria interna de la placa para luego hacerla funcionar de manera auténoma
desconectada de la PC
WIPY
Esta placa representa un novedoso desarrollo para IoT, centrado en la conectividad
y la ejecucion de codigos Python. Esté equipada con un procesador de doble chipset
Espressif ESP32 y una placa WiFi capaz de conectar | km
Resulta ideal para proyectos que requieran la conexién remota de un dispositivo
con todo el potencial que Python puede ofrecer,
aT Lae
42 PRENIUN.RED conpython Vol.3
ESP8266
Esta es una placa versatil y poderosa, pensada
para ser programada tanto desde el IDE de
Arduino como desde Python
Su grandeza radica en que es posible
ejecutar codigos enviados desde un shell a
través de internet.
Cuenta con el procesador ESP8266 de
80Mhz, placa WiFi y una memoria Flash de
4MB para almacenar programas. Oe NSS LE
BBC MICRO:BIT
BBC micro:bit es un microcomputador programable, atil para distintos proyectos
que pueden ir desde un instrumento musical hasta un robot
Su punto fuerte es la simplicidad para programar soportando la programacién en
bloques. Fue disefiada para ser utilizada en ambitos escolares, y ha obtenido una
gran aceptacién entre docentes y alumnos.
a
an LG
Trike
eT
Neel a)
fad or
micro:bit
Placa
BBC micro:bit.
PREMIUM.RED com 434. MicroPython
PLACAS PYBOARD
pin cru
fame fame available timers peripherals aii
cé
rer}
{3}
Bo
B12 ~~
B13 ——_
B14
B15
B6
87
C4.
5
inner row
B3 (USR)
C13 (amA))
Micro Python pyboard
@PYBV1.0 ==
44 PRENIUM.REDUSERS.CON.available timers CPU, Pn
peripherals name hame
VIN: 3.6v - 10v power input
(supplied by USB when USB connected)
3V3: regulated 3.3v output only, max 300mA
IVBAT: battery backup input
|A3V3, analog reference connected to 3V3 via inductor
X17 is pulled to GND via 4.7k resistor when USR pressed
}P2-P5 are connected to the 4 LEDs
ISD = AB is used for SD card switch
IMMA INT = B2 is used for accelerometer interrupts
connect BOOTO to 3V3 and press RST to enter DFU mode
micropython.org
PREMIUM.REDUSERS.COM
python Vol.3
Como ya hemos visto, esta placa
es disefiada exclusivamente para
ejecutar cédigos Python. Si bien
esto parece una limitacion, no
resulta tal debido a que posee un
gran potencial en el hardware
En combinacion con un lenguaje
simple pero potente, es posible
emprender proyectos de gran
tamafio gracias a su variedad
de pines disponibles con una
gran versatilidad de uso y
configuraciones.
PRIMEROS PASOS
Cuando conectamos la placa
pyboard a nuestra PC, como ya
hemos anticipado, tenemos dos
maneras de enviarle e6digo:
escribiendo en la memoria flash
0 enviandole c6digo mediante un
intérprete de comandos conectado
por el puerto serie.
ESCRITURA DIRECTA EN LA
MEMORIA FLASH (MSC)
Cuando conectamos la placa a
nuestra computadora sin instalar
ningun tipo de driver, es reconocida
como si se tratase de un pendrive.
Si accedemos a la unidad que se
crea, nos vamos a encontrar con los
siguientes archivos:4. MicroPython
* boot. py: archivo de configuracin de la placa
* main. py: script que va a ejecutar la placa al ser encendida, sin importar si esta
© no conectada a otro dispositivo
© pybcdc. inf: driver necesario para que podamos acceder mediante un puerto
serie.
* README. txt: archivo de interés.
Para poder introducirle un cédigo a nuestra placa, bastard con abrir y reescribir el
archivo main. py
Supongamos que queremos que parpadee el led | para indicar que la placa esta
encendida y funcionando, deberiamos escribir en dicho archivo lo siguiente:
import pyb
led = pyb.LED(1)
while True:
led. toggle()
pyb. delay(1000)
Una vez que hemos actualizado el archivo main. py, debemos reiniciar la placa,
para ello presionamos el botén de reset
CODIFICACION DIRECTA DESDE UNA CONSOLA SHELL
En este método, podemos ejecutar cédigo directamente desde nuestra computadora,
y la placa vaa responder sin necesidad de actualizar ningiin tipo de archivo ni
reiniciarla. Es un buen método para cuando estamos generando un programa y
necesitamos chequear el funcionamiento.
Para poder utilizar este método, deberemos instalar en nuestro equipo:
* toggle: cambia de estado el led, si esta encendido lo apaga y si
esta apagado lo enciende.
OP ae CME ie Rumer
46 PRENIUM.REDUSERS.CON.eee python Vol.3
© El driver, que es el archivo pybcde.inf que encontramos en la unidad creada
automéaticamente al conectar la placa a la PC. Si bien el manual recomienda
utilizar solo el archivo incluido en la placa, en Windows 10 la instalacion
automatica suele funcionar correctamente.
* Un Shell de acceso remoto, podriamos utilizar PuTTY por ser de uso gratuito y
liviano.
Lo primero que haremos es ir al administrador de dispositivos y chequear en qué
puerto serie se nos ha instalado la placa.
Archivo Accién Ver Ayuda
¢o9\mni\bm|2
Bf Dispositivos de software a
[LJ Dispositivos de tecnologia de memoria
> Ka Dispositivos del sistema
BF Dispositivos portatiles
i Entradas y salidas de audio
» GB Equipo
BG Firmware
i Modems
» Gl Monitores
>» Mousey otros dispositivos sefialadores
[Otros dispositivos
CO Procesadores
Y §@ Puertos (COM y LPT)
{Bi Dispositivo serie USB (COM15)
Serie estandar sobre ellaanculo Bluetooth (COMS)
i Teclados
Y me Unidades de disco
= ST500LTO12-1DG142
“m= _uPy microSD Flash USB Device v
Reconociendo placa Pyboard desde administrador de dispositivos.
PREMIUM.REDUSERS.COM 474. MicroPython
A continuacién, abrimos PuTTY y configuramos para una conexi6n serial,
determinando donde dice Serial line el numero de puerto que vimos en el
administrador de dispositivos.
§R PUTTY Configuration ? x
Category
Session Basic options for your PUTTY session
: wig Specify the destination you want to connect to
in
Tea Serial ine Speed
el com1s 9600
———
Features Comnection type
Window Raw OTehet © Riogin OSSH @ Sena
Sec Load. save or delete a stored session
Behaviour
‘erahiton Saved Sessions
Selection
in Defaut Settings Load
Configuracién serial con Public TTY (PuTTY).
Luego, haciendo clic en Open se nos abrir una consola de comando donde
se estard ejecutando MicroPython. En esta consola, podremos ingresar el cédigo
directamente y veremos el resultado en Ia placa de manera inmediata sin necesidad
de resetearla.
Cabe aclarar qué, utilizando este método, no se almacena nada en el firmware, por
lo que todo lo que escribamos se va a perder al cerrar la consola
cOMi5- PuTTY
Consola MicroPython con PuTTY.
48 PRENIUM.REDUSERS.CON.eee python Vol.3
MODULO PYB
Este médulo posee funciones especificas de la placa pyboard. Entre las funciones
que mas se destacan podemos enumerar las siguientes:
* pyb.delay(ms): crea una interrupeién de ms milisegundos
* pyb.udelay(us) : crea una interrupcidn de us microsegundos.
© pyb.millis(): devuelve la cantidad de milisegundos desde que la placa ha
sido reiniciada.
© pyb..wfi( ): entra en un estado de bajo consumo esperando una interrupcién
interna o externa.
* pyb.stop(): pone a la placa en un estado de suspension, y se mantiene hasta
que una interrupci6n externa o una orden interna lo reactive.
* pyb.have_cdc(): chequea si el usb esté conectado, devuelve True si esta, 0
False en caso contrario
CLASES
También, podemos encontrarnos con una serie de clases, que nos facilitan el
manejo de distintos componentes internos como externos. De esta manera, ya no
necesitarfamos programar ni instalar nada adicional, sino que bastard con invocar a
la adecuada. Entre las clases mas relevantes podemos mencionar:
* LED(): nos devuelve un objeto que representa uno de los led incluidos en la
placa. Se debe pasar como pardmetro el niimero de led (1: rojo, 2: verde,
3:amarillo, 4: azul) y luego darle las opciones on(),of F() 0 toggle()
import pyb
led1 = pyb.LED(1) #declaramos la variable led1
#con la que manejaremos led
#rojo
led1.on() #1la encendemos
led1.off() #la apagamos
led1.toggle() #cambiamos es estado, si
#esta encendida, la apagamos
#o encendemos si est4 apagada
led1.intensity(valor) #indicamos con que intensidad
#queremos que brille. Toma un
#valor entre @ y 255
PREMIUM.REDUSERS.COM 434. MicroPython
*Accel(): la placa pyboard incluye un chip acelerémetro, con el cual podemos
determinar cualquier movimiento que sufta. Para controlar tales movimientos
utilizamos esta clase, que, entre sus métodos mas importantes, incluye x(), y() y
2() quienes nos devuelven tales coordenadas.
import pyb
pos = pyb.Accel()
print (pos.x()) #Imprime coordenada x
print (pos.y()) #Imprime coordenada y
print (pos.z()) #Imprime coordenada z
* Servo(): nos devuelve un objeto con el cual podremos manipular uno de los
tres servos posibles. Una vez declarado el objeto, podremos setear el angulo
de giro y la velocidad, entre otras funciones. Dentro de la placa, cada servo es
conectado mediante los pines: GND, VIN y X1 (servo 1), X2 (servo 2) 0 X3
(servo 3).
import pyb
servo = pyb.Servo(1)#Conectamos al servo 1
servo.angle(90, 5@0)#Giramos 982 en 5 segundos
* ADC(): clase para realizar conversién de andlogo a digital en cada pin
#DAC(): clase para realizar conversién de digital a andlogo en cada pin
* Switch: nos devuelve un objeto que nos permitira leer el estado del switch de la
placa
sw = pyb.Switch() # Crea el objeto
sw. value() # Obtiene el valor
sw.callback(f) # registra una funcién para
# llamar cada vez que se
# presiona
En el sitio oficial de MicroPython (www.micropython.org), es posible encontrar
documentacién completa sobre el uso de este médulo
50 PRENIUM.REDUSERS.CON.eee python Vol.3
Este médulo tiene asociado declaraciones y funciones relacionadas con cada placa
en particular. Cada fabricante crea este médulo respetando la interfaz, de manera que
sea posible intercambiar de placa sin variaciones en el codigo.
ALGUNAS DE LAS FUNCIONES MAS EMPLEADAS
* reset (): resetea el dispositive como si hubiéramos presionado el botén de
reinicio
* sleep(): pone la placa en estado de suspension, desactivando la CPU y los
periféricos, salvo la placa WLAN. Para reactivar la placa, es necesario programar
previamente cual es la interrupcién que lo hard.
* deepsleep(): similar a sleep(), salvo que pone en estado de suspension
total, y para reactivarlo se tiene que presionar el bot6n de reset () 0 programar
previamente el pin que lo reactivara.
CLASES IMPLEMENTADAS
Al igual que pyb, machine implementa una serie de clases con las que
automatizamos tareas, y atomizamos el acceso y el funcionamiento de distintos pines
y componentes agregados a la placa
# Pin(): devuelve un objeto que nos permitiré interactuar con un pin determinado
para leer o setear su valor
* WDT(): controlamos el watchdog de la placa. Con esta clase, podemos evitar un
bloqueo y reiniciarla en caso de una falla
En el sitio oficial de MicroPython (www.micropython.org) es posible encontrar
documentacién completa sobre el uso de este médulo
SIMULADOR ONLINE DE PYBOARD
Si entramos en el sitio oficial de MicroPython, www.micropython.org, podemos
acceder a un simulador de la placa pyboard, con el cual interactuaremos con
distintas librerias sin necesidad de contar con una placa fisica
Cabe mencionar que no esta completamente implementado MicroPyton y todas
sus librerias, pero podemos hacer una simulacién bastante aproximada para darnos
una idea general del funcionamiento de la placa
PREMIUM.REDUSERS.COM 514. MicroPython
ii ceed
MicroPython
Macey et ot et pn
‘cobyhon aso capt wth mal Pion as posse to
Sitio oficial de MicroPython.
Para acceder al simulador, deberemos hacer clic sobre el botén que dice USE
MICROPYTHON ONLINE, esto nos Ilevard a un simulador online sin necesidad de
instalar nada.
Simulador online.
52 PRENIUM.REDUSERS.CON.SS python Vol.3
Para otorgar mayor realismo y mas versatilidad, este simulador posee cuatro
sectores con los que podemos interactuar.
ESPACIO DE CONSOLA
Este espacio representa una consola de comando donde podremos escribir
cédigo como si estuviéramos ejecutando el modo serial. De esta manera,
cada sentencia que escribamos la veremos reflejada de manera inmediata.
Por otro lado, si en el cédigo por ejecutar utilizamos la sentencia print(),
veremos impreso en este sector el resultado, esto nos servira para hacer un
seguimiento de la ejecucion del programa.
ESPACIO PARA CODIGO
Si escribimos el cédigo en un editor externo 0 queremos simular que
estamos creando un archivo para luego actualizar el archivo main.py de la
placa, debemos escribir el cédigo en este sector.
Para entrar en modo de ejecucién, deberemos presionar sobre el botén que esté
abajo y que dice RUN SCRIPT.
A la par de este botén, veremos otro con el cual podremos cargar algiin cédigo de
ejemplo de entre los que nos propone el simulador.
SELECTOR DE COMPONENTES
En este espacio, tenemos la opcién de conectar a la placa 4 componentes
distintos
© Un led: este se conecta al pin Y12. Como la clase Pin del médulo pyb no esta
implementada, utilizaremos machine para encenderlo y apagarlo.
* Un servo que se conecta con los pines GND, VIN y X1.
© Un potencidmetro con el que podremos trabajar con el convertidor de sefiales
andlogo y digital (ADC).
© Una pantalla LCD.
Podemos seleccionar uno o varios de estos elementos. Cada vez que tildamos uno,
lo vemos reflejado en el simulador de la placa (4).
PREMIUM.REDUSERS.COM 534. MicroPython
Por arriba de los componentes, tenemos una serie de opciones para configurar el
hardware de nuestra placa Ilevando la ejecucién lo mis realista posible a distintas
situaciones.
Para que estas configuraciones surtan efecto, cada vez que hagamos una
modificacién en los parametros, deberemos presionar el bot6n que dice reset.
SIMULADOR DE PLACA
Este espacio es mis que un simple dibujo. En él se ve reflejado cada
elemento que seleccionemos del panel 3. También podemos interactuar
como si de una placa real se tratase o ver el estado de los led de placa
‘A medida que avanza la ejecucion, podremos ver como cambian los estados de
cada componente en este sector. También es posible presionar sobre el boton de
reset, en el caso de que necesitemos reiniciar la placa, o si un error de cédigo nos
ha llevado a una mala ejecuci6n o ciclo infinito
También podemos presionar sobre el botén de usuario o switch
ENCENDAMOS EL LED
A modo de prueba, vamos a realizar un pequefio seript que nos permitiré encender
las cuatro led de la placa de nuestro simulador,
En primer lugar, importamos las librerias que vamos a utilizar, en este caso
emplearemos time y pyb
import time
import pyb
El paso siguiente es realizar un ciclo de 1000 vueltas que ira cambiando el estado
de cada luz en forma alternada definiendo a 4 como iterador.
Para realizar una division cuyo resultado queremos que sea lo mas
preciso posible, utilizamos el operador /. Por el contrario, sila idea es
CU Cm CMU ec OMe eae
ETE a1)
Ey es
54 PRENIUM.REDUSERS.CON.Ss python Vol.3
Sabiendo que tenemos cuatro luces, vamos a dividir nuestro iterador en cuatro con
el operador %, lo que nos ira arrojando un valor entero que va a estar entre @ y 3.
Con este resultado, invocaremos a la funcion toggle de la clase LED(), con lo
que iremos encendiendo y apagando alternadamente cada una de las lamparas de la
placa.
Para dar un tiempo de espera entre cada suceso, emplearemos la funcién sleep_
ms de la clase time.
PREMIUM.REDUSERS.COM 55Proyectos en
MicroPython
En este capitulo, crearemos una serie de proyectos simples escritos en
MicroPython. Para ponerlos en practica sin necesidad de adquirir la placa
pyboard, emplearemos el simulador descripto en el capitulo anterior.
Para ello, accederemos a http://www.micropython.org/unicorn/,
donde nos abrir el simulador de Python y la placa pyboard.
HOLA MUNDO
En este primer proyecto, emplearemos una pantalla LCD, donde imprimiremos el
tradicional Hola Mundo.
Para llevar a cabo nuestro proyecto, deberemos conectar una pantalla
monocromatica en los pines x9 y x10. Si miramos la referencia de pines de la
placa pyboard, veremos que x9 corresponde a SCL y x10 corresponde a SDA.
Pero {qué significan estas siglas?
Muchos sensores y periféricos, como la pantalla que queremos conectar,
requieren de dos pines en serie para poder funcionar, uno correspondiente a datos
(serial data), conocido como SDA, y otro correspondiente al clock interno (serial
clock), conocido como SCL.
MicroPython implementa una clase para poder controlar estos pines, conocida
como 12C.
Es importante mencionar que este bus permite la conexién de mas de un
dispositivo, para ello a cada uno que se conecta se le asigna un identificador tinico
con el cual podra intercambiar datos.
Como esta conexién es serial, la transmisi6n y recepcién de datos queda
definida por palabras de 8 bits.
56 PRENIUM.REDUSERS.CON.PREMIUM.REDUSERS.COM
Pines
SDAy SCL5. Proyectos en MicroPython eS
LA CLASE |2C
Esta clase es implementada tanto por pyb como por machine. Si bien el
funcionamiento es homélogo en ambos médulos, existen diferencias sutiles en sus
implementaciones.
Como el simulador con el cual trabajamos solo implementa el médulo de
machine, explicaremos algunos de los métodos implementados por esta clase.
DECLARACION
El constructor requiere cuatro parametros, de los cuales solo dos son requeridos:
i2c = machine. 12C1(id,scl,sda,frq).
Donde:
* id: es la identificacién Gnica del dispositivo conectado, por defecto es -1
* scl: (requerido) corresponde al pin del clock.
* sda: (requerido) corresponde al pin de datos.
* frq: con este parimetro configuramos la frecuencia minima del clock. Dicha
frecuencia debe ser compatible con el dispositive que conectamos
INIT(SCL,SDA, FREQ)
Este método inicializa el bus con los parametros especificados. Es importante que
respetemos los pines scl y sda de la placa en el momento de llamar a este método, en
caso contrario nos arrojara un error.
DEINITO
Finaliza el bus 12C.
METODOS PRIMITIVOS
Estos métodos forman parte del disefio primitivo de la clase y permiten implementar
la lecturalescritura de un dispositivo
* start(): inicializa una transaccién, pone el pin de datos en bajo, y el del
clock, en alto.
* stop(): finaliza una transacci6n, pone el pin de datos en alto mientras el de
clock lo sostiene en alto.
*readinto(buffer, nack=True): lee un paquete de bytes del dispositivo
y los almacena en la variable buffer. Si nack es true, se indica que ya no
58 PRENIUM.REDUSERS.CON.eee python Vol.3
se volver a leer, por lo que vacia el buffer de lectura. En caso contrario, queda
esperando a una siguiente lectura.
* write (buffer): escribe en el dispositivo los byte enviados por buffer.
OPERACIONES ESTANDARES.
Con estos métodos, se pueden llevar a cabo operaciones de lectura y escritura de un
dispositivo determinado.
* readfrom(addr, nbyte,stop): lee n bytes del dispositivo cuya id es addr y
los devuelve para asignarlos a una variable. Si stop es verdadero, se genera la
condicion de parada al final de la transferencia.
* readfrom_into(addr, buffer, stop): lee todo el contenido del dispositivo
cuya id es addr y lo devuelve dentro de la variable buffer. Si stop es
verdadero, se genera la condicion de parada al final de la transferencia
*writeto(addr, buffer ,stop): escribe los bytes del buffer pasado como
pardmetro.
*writetovto(addr, vector, stop): escribe los bytes contenidos en el vector
que es pasado como pardmetro al dispositivo conectado cuyo id es addr.
LA CLASE FRAMEBUF
En nuestro proyecto, también utilizaremos este médulo para crear un buffer donde
cargaremos una imagen o un texto y lo pasaremos a nuestra pantalla.
Esta clase nos permite trabajar a nivel pixeles una imagen, generar una linea, un
rectngulo o un texto y traducirlo a un buffer de byte
CONSTRUCTOR
El constructor requiere cinco parametros:
* buffer: un espacio de memoria donde almacenaremos todos los bytes.
width: el ancho expresado en pixeles.
* height: el alto expresado en pixeles.
* format: corresponde al tipo de los pixeles que se van a almacenar. (MONO_
HLSB: monocromatico; RGB565: color RGB de 16 bits; GS2_HMSB: escala de
grises de 2 bits; GS4_HMSB: escala de grises de 4 bits; GS4_HMSB: escala de grises
de 8 bits).
© stride: representa la cantidad de pixeles entre dos lineas horizontales.
PREMIUM.REDUSERS.COM 59ty
5. Proyectos en MicroPython oa
METODOS
*fill(c): pinta todo el buffer del color pasado como parametro.
* pixel(x,y,c): si el color no es pasado, devuelve el color de un determinado
pixel. Por el contrario, si se pasa como parametro el color, se setea dicho color en
el pixel determinado por las coordenadas x e y.
*hline(x,y,w,c);vline(x,y,h,c); line(x1,y1,x2,y2,c): con
estas funciones podemos dibujar una linea; la primera la hacemos horizontal; la
segunda, vertical; y la tercera, entre dos puntos pasados por las coordenadas.
*rect(x,y,w,h,c); fill_rect(x,y,w,h,c): con estas funciones podemos
dibujar un rectangulo con inicio x, y, de ancho wy alto h. La diferencia entre
una y otra es que la primera solamente dibuja el contorno (un solo pixel como
borde) mientras que la segunda realiza un recuadro leno.
* text(s,x,y,¢). escribe un texto (s) en las coordenadas indicadas (x €
y), del color ¢. Hasta el momento, el texto se realiza en un tamafio de 8 x 8 sin
posibilidad de hacer un cambio en la fuente.
HAGAMOS NUESTRA APLICACION
Para comenzar a llevar a cabo nuestra aplicacién, lo primero que haremos es
importar las librerias que utilizaremos, estas son: machine, 12C, y framebuf.
Como la declaracién del objeto 12¢ requiere los pines de dato y clock,
utilizaremos Pin de machine para referenciarlos. Como vimos, la placa pyboard
reserva al pin X9 como SCL y al pin X10 como SDA
EI paso siguiente es crear nuestro buffer, para ello lo primero que tenemos que
ver es el tamaiio del display y el tipo de pantalla. En nuestro caso, que estamos
60 PRENIUM.REDUSERS.COMSs python Vol.3
utilizando el emulador, tenemos una pantalla monocromatica cuya dimension es de
64 columnas por 32 filas
fbuf = framebuf.FrameBuffer(bytearray(64 * 32 // 8), 64, 32,
framebuf .MONO_HLSB)
Para saber cual es el tamafio de nuestro buffer, creamos un array de byte de 64
columnas y 32 filas, dividido en grupos de ocho que conforman nuestra palabra,
como mencionamos al principio
Ya tenemos todo definido, solo nos queda empezar a dibujar. El primer paso es
pintar todo de negro. De esta forma nos aseguramos que el buffer no incluya basura
en su contenido.
fbuf.fil1(0)
Lucgo, agregamos el texto Hola en la columna 15, fila 8
Como sabemos que cl alto es de 8 pixeles, escribiremos Mundo cn la columna 15
fila 18
fbuf.text(‘Hola’, 15, 8)
fbuf.text( ‘Mundo’, 15, 18)
Por tiltimo, enviaremos la informacién a nuestro display.
i2c.writeto(8, fouf)
Resultado de nuestro cédigo.
PREMIUM.REDUSERS.COM 615. Proyectos en MicroPython
Pero para darle un toque mas artistico a nuestro proyecto, vamos a agregarle como
detalles un punto en cada extremo del display y le insertaremos un recuadro ala
frase Hola Mundo.
Para insertar un punto, pintaremos un pixel en la posicién que deseemos. En este
caso, pondremos uno en las coordenadas correspondientes al extremo izquierdo
superior y otro en el derecho inferior. Esto es:
fbuf.pixel(@,2,1)
fbuf.pixel(63,31,1)
y para el recuadro, utilizaremos la funcién rect.
fbuf.rect(14,7,45,20,1)
De esta forma, nuestro c6digo finalmente nos queda de la siguiente manera:
import machine
import framebuf
from machine import 12C
scl = machine. Pin( ‘x9? )
sda = machine.Pin(‘x1@’)
i2c = 12C(scl=scl, sda=sda)
fbuf = framebuf.FrameBuffer(bytearray(64 * 32 // 8), 64, 32,
framebuf.MONO_HLSB)
buf. fill(@)
fbuf.pixel(@,8,1)
fbuf. pixel(63, 31,1)
fbuf.rect(14,7,45,20,1)
fbuf.text(‘Hola’, 15, 8)
fbuf.text(‘Mundo’, 15, 18)
i2c.writeto(8, fbuf)
62 PRENIUM.REDUSERS.CON.eee python Vol.3
Estado final de nuestra aplicacion.
CONTROL DE SERVO
En este proyecto, armaremos un sistema en donde podremos mover un
potenciémetro para cambiar la posicién de un servo mecanico. Para saber cual es la
inclinacién que ha adquirido el servo, mostraremos en un display el Angulo de giro
Estado inicial del sistema.
Si llevamos a la practica este proyecto con componentes reales, deberemos
instalar dichos componentes de la siguiente manera:
* Potenciémetro: en el pin Y4
* Display: SCL en el pin X9 y SDA en X10
* Servo: en los pines X1, GND y VIN, tomando la precaucién de que estos dos
Ultimos pertenezcan a la fila de X1
PREMIUM.REDUSERS.COM 635. Proyectos en MicroPython ea
LAS LIBRERIAS POR IMPORTAR SON LAS SIGUIENTES.
* machine: para obtener los pines correspondientes al potenciémetro y al display.
* 12C: para trabajar con el display.
* pyb: para interactuar con el servo y llevar a cabo la conversién de seftal andloga
a digital del potenciémetro, y poder interactuar con las led de estados.
© time: para realizar una espera antes de volver a chequear el estado del
potencidmetro.
* framebuf: para cargar la informacion por mostrar en el display.
Una vez que esta todo preparado, definimos las variables con las cuales
interactuaremos con el servo, con el potenciémetro y con el display.
SERVO
Como conectamos el servo en la linea correspondiente al pin X1, nuestra variable la
definiremos de la siguiente manera:
Si la conexién fuese en la linea del pin X2, usariamos Servo(2), y si fuera en la
linea del pin X3, Servo(3).
POTENCIOMETRO
Nuestro potenciémetro est en el pin Y4, por tal raz6n, crearemos primero la
variable que represente a dicho pin, y luego la variable que nos permitira interactuar
con el potenciémetro propiamente dicho.
DISPLAY
Nuestro display esta conectado en los pines X9 y X10, por lo que crearemos las
variables para representar ambos pines y la variable correspondiente al display.
g
PRENIUM.REDUSERS.COM