Programación en Python Vol. 3
Programación en Python Vol. 3
111
Programación en
Descargado de www.pcprogramasymas.com
V . III
OLVol.3
python
python
Programación en
PREMIUM.REDUSERS.COM 1
1. Qué
Qué eess RRaspberry
aspberry ppii
2 PREMIUM.REDUSERS.COM
P
PRE
PRRE
R EM
MIIU
MIU
IUM.RE
RED
R E USERS.COM
python Vol.3
PRÓLOGO
Python es un lenguaje de programación que supo ganarse el cariño 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 extraño, entonces, encontrarnos que cada vez más sistemas sean imple-
mentados bajo este lenguaje y que su extensa comunidad aporte continuamente
librerías simples pero eficientes.
En este e-book, veremos distintas maneras que existen para llevar todo su poten-
cial a proyectos prácticos, simples pero ilustrativos que, extrapolados, nos pueden
dar una idea de cómo encarar proyectar más grande.
PREMIUM.REDUSERS.COM 3
1. Qué es Raspberry pi
Volumen I
Se realiza una revisión de las características de este lenguaje, también se entregan
las indicaciones para instalar el entorno de desarrollo y se analizan los elementos
básicos 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 aplicación
en Raspberry Pi y Micropython entre otros.
4 PREMIUM.REDUSERS.COM
python Vol.3
PREMIUM.REDUSERS.COM 5
1. Qué
Q es Raspberry
p y ppi
Qué es Raspberry pi
La tecnología avanza en una dirección indiscutible apuntando a la
hiperconectividad, y en este proceso el IoT (internet de las cosas) toma relevancia
y comienza a vivir su auge. Para acompañar este movimiento, surgen placas que
simplifican el diseño y la implementación de proyectos que permiten conectar
distintos dispositivos para obtener, procesar y transmitir información en tiempo real.
Raspberry pi da un salto a esto e integra en una placa de un tamaño 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 distribución 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 código
para generar nuestros
programas, procesos o
automatizaciones.
Raspbian: distribución
Debian para Raspberry pi.
6 PREMIUM.REDUSERS.COM
python Vol.33
py
01
EL HARDWARE
Como ya hemos visto, la placa Raspberry pi es una computadora integrada, a la que
solo le faltan los periféricos.
Según la versión que tengamos, será el hardware disponible, sin embargo, para los
alcances de este e-book, es indistinto con cuál estemos trabajando.
byYako1976 www.identi.io
PREMIUM.REDUSERS.COM
1. Qué es Raspberry pi
Pines
GPIO.
Resultado de pinout .
8 PREMIUM.REDUSERS.COM
python Vol.3
• mediante el número
de canal asignado en el
procesador (BCM).
Para tener
en cuenta
Los pines GPIO
trabajan a 3.3V.
Es importante
no olvidarnos de
esto para evitar
sobrecargarlo y
quemar nuestra
placa Raspberry pi.
PREMIUM.REDUSERS.COM 9
1. Qué es Raspberry pi
PREPARAMOS PYTHON
Para comenzar a programar con Python, debemos contar con la librería GPIO.
Si nuestra placa tiene instalado Raspian OS, ya viene correctamente instalada.
Sin embargo, si por algún motivo no se encuentra, o estamos utilizando alguna
otra distribución como sistema operativo, deberemos ejecutar desde consola los
siguientes comandos:
tarzxvf RPi.GPIO-0.7.0.tar.gz
cd RPi.GPIO-0.7.0/
10 PREMIUM.REDUSERS.COM
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
estuviéramos 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 información
Acceso a configuración
por SSH.
PREMIUM.REDUSERS.COM 11
1. Qué es Raspberry pi
Activación SSH –
Modo gráfico
Luego, en la
ventana que se nos
abre, presionamos
en la solapa de
interfaces,
buscamos la
opción SSH y
la tildamos en
enable.
Hecho esto, podremos acceder desde la máquina cliente. Para eso accedemos
a la consola de comandos y escribimos ssh seguida del número ip y el nombre
del usuario -lusr-name (por defecto pi). Al presionar ENTER, nos pedirá una
contraseña, 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 gráfica y solo tenemos acceso por consola de comandos,
deberemos escribir sudo raspi-config y así se nos abrirá un menú.
12 PREMIUM.REDUSERS.COM
python Vol.3
PREMIUM.REDUSERS.COM 13
2. GPIO
GPIO
En este capítulo nos introduciremos en el uso de la librería GPIO. Como vimos en el
capítulo anterior, podremos transmitir o recibir señales de cada uno de los pines de
la placa.
Para poner esto en práctica, diseñaremos un circuito con el cual será posible
encender o apagar un led mediante un pulsador.
14 PREMIUM.REDUSERS.COM
python Vol.3
En el capítulo anterior dejamos sentadas las bases del
paradigma de programación orientada a objetos (POO).
En este capítulo veremos en profundidad los conceptos
fundamentales aplicados a Python y daremos nuestros
primeros pasos con clases y objetos.
02
Los materiales que utilizaremos son:
Para escribir nuestro código, crearemos una carpeta llamada proyectos y, dentro
de esta, un archivo con el nombre proyecto1.py en donde escribiremos nuestro
código Python.
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 línea 3.
• Luego, desde el pin 11, conectaremos la línea 13.
• Conectaremos la fila 1 y 8 con la columna 2 de la zona de alimentación, que ya
habíamos conectado GND de la placa.
PREMIUM.REDUSERS.COM
2. 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 código 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.
Cálculos de Resistencia
Sabemos que nuestro led funciona con un voltaje de 2,1V, con una
corriente máxima de 20mA (0,02A).
También sabemos que los pines GPIO trabajan con 3,3V.
Esto nos indica que el led tiene una sobrecarga de:
16 PREMIUM.REDUSERS.COM
python Vol.3
PREMIUM.REDUSERS.COM 17
2. GPIO
NUESTRO CÓDIGO
Lo primero que haremos es importar la librería que nos permitirá codificar y
manipular cada uno de los pines GPIO.
importRPi.GPIO as io
Es importante colocarle un alias (en este caso io), para simplificar el llamado
posterior a la librería.Luego, para tener un mejor manejo del tiempo y las esperas,
importamos la librería time:
import time
LIBRERÍA TIME
Esta biblioteca incluye un conjunto de funciones que nos permiten trabajar con fecha
y hora. Entre las más importantes, podríamos mencionar:
18 PREMIUM.REDUSERS.COM
python Vol.3
LIBRERÍA GPIO
Como ya se ha dicho, esta librería es la compuerta entre los pines de entrada/salida
de la placa y Python. Por tal razón resulta más que interesante el hecho de conocer
cuáles son las funciones más importantes que contiene.
GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.IN)
GPIO.setup(17, GPIO.OUT)
PREMIUM.REDUSERS.COM 19
2. GPIO
Pero para no tener que estar continuamente pensando qué número 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 leerá continuamente el estado del pulsador, y en caso de obtener un
valor, encenderá 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(0.5)
GPIO.cleanup()
20 PREMIUM.REDUSERS.COM
python Vol.3
byYako1976 www.identi.io
PREMIUM.REDUSERS.COM 21
Hackeo a
3. Hackeo a Minecraft Pi
Minecraft Pi
Minecraft Pi es una versión libre de este popular juego reescrito exclusivamente
para las placas Raspberry pi. Está 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 versión del juego viene preinstalada en el sistema operativo Raspbian, por
eso es recomendable iniciar esta placa con este sistema operativo para simplificar
tareas y evitar problemas de compatibilidades.
INSTALACIÓN
DE MINECRAFT PI
Si por algún motivo nos vemos en la necesidad
de instalar Minecraft Pi, deberemos seguir estos
pasos.
• Descargarlo desde la página indicada antes.
• Abrir una consola de comandos.
• Con el comando cd navegar hasta la carpeta
donde hemos descargado el juego, por lo general,
en la carpeta Download.
• Descomprimir el archivo descargado: tar-
zxvf minecraft-pi-0.1.1.tar.gz.
• Acceder a la carpeta de instalación: cd mcpi.
Minecraft Pi – • Ejecutar Minecraft Pi: ./minecraft-pi.
Versión del juego para Raspberry
22 PREMIUM.REDUSERS.COM
python Vol.3
03
PRIMEROS PASOS
Para programar órdenes en el juego desde Python, lo primero que haremos es
iniciarlo. Esto podemos hacerlo desde la consola de comandos, accediendo a la ruta
donde se halla guardado el juego, o desde el menú Game de nuestra placa Raspberri,
seleccionando Minecraft Pi
PREMIUM.REDUSERS.COM 23
3. Hackeo a Minecraft Pi
24 PREMIUM.REDUSERS.COM
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.
Luego, deberemos crear un objeto con la función create(), que nos servirá de
nexo entre el lenguaje y el juego.
mc = Minecraft.create()
Esta función puede ser llamada con o sin parámetros. Si la llamamos sin
parámetros, nos referenciará a una instancia del juego que está en ejecución en el
mismo dispositivo que Python y en el mismo instante.
Sin embargo, podemos llamarla pasándole dos parámetros: dirección y puerto.
mc = Minecraft.create(“192.168.1.33”,4711)
Este código crea una instancia para enlazarse a un mundo en el dispositivo cuya ip
es 192.168.1.33, y la comunicación se establecerá mediante el puerto 4711.
A partir de ahora, ya podremos manipular el mundo de Minecraft. Para ello, solo
debemos referenciar algún método del objeto mc.
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 parámetro, por eso lo utilizaremos con
el texto Hola Minecraft.
mc.postToChat(“Hola Minecraft”)
PREMIUM.REDUSERS.COM 25
3. Hackeo a Minecraft Pi
Veremos cómo, con estas tres líneas, pudimos manipular nuestro juego de manera externa.
A continuación, diseñaremos un pequeño refugio simple, pero antes de meternos
en el código vamos a ver algunos de los comandos que tenemos disponibles en la
librería y que nos permitirán automatizar distintas tareas en el juego.
POSICIÓN ESPACIAL
Si nos remontamos a nuestras clases de matemática, 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 PREMIUM.REDUSERS.COM
python Vol.3
Ejes de
coordenadas en 2
dimensiones
Ejes de
coordenadas en 3
dimensiones.
PREMIUM.REDUSERS.COM 27
3. Hackeo a Minecraft Pi
28 PREMIUM.REDUSERS.COM
python Vol.3
pos = mc.player.getPos()
La función 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.
x = pos.x
y = pos.y
z = pos.z
Otra forma de hacer lo mismo es utilizar una técnica de Python, que consiste en
asignar las variables en una sola línea como sigue:
x, y, z = mc.player.getPos()
PREMIUM.REDUSERS.COM 29
3. Hackeo a Minecraft Pi
mc = Minecraft.create()
x, y, z = mc.player.getPos()
mc.player.setPos(x+10,y,z)
• x: coordenada en x;
• y: coordenada en y;
• z: coordenada en z;
• id: id de bloque a ingresar;
• data: este parámetro 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 parámetro para indicar si es
blanco (data = 0), naranja (data = 1), magenta (data = 2), celeste (data =
3) o amarillo (data = 4).
mc = Minecraft.create()
x, y, z = mc.player.getPos()
mc.setBlock(x+1, y, z,piedra)
30 PREMIUM.REDUSERS.COM
python Vol.3
mc = Minecraft.create()
while True:
x, y, z = mc.player.getPos()
mc.setBlock(x,y-1,z,flor)
sleep(0.1)
PREMIUM.REDUSERS.COM 31
3. Hackeo a Minecraft Pi
Pero si queremos ser realistas, deberíamos poner una validación más, 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
o en el césped. Pero lo coherente sería 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).
mc = Minecraft.create()
while True:
x, y, z = mc.player.getPos()
mipiso = mc.getBlock(x,y-1,z)
if mipiso == cesped:
mc.setBlock(x,y-1,z,flor)
sleep(0.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.
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 PREMIUM.REDUSERS.COM
python Vol.3
Coordenadas
de vértices
de un cubo.
piedra = 1
x, y, z = mc.player.getPos()
mc.setBlocks(x + 1, y + 1, z + 1,x + 6, y + 6, z + 6,piedra)
PREMIUM.REDUSERS.COM 33
3. Hackeo a Minecraft Pi
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 = 5:
estructura = 5
Como este tipo de bloque acepta distintos tipos, crearemos otra variable a la cual
le asignaremos el número que representa al deseado:
tipo = 3
34 PREMIUM.REDUSERS.COM
python Vol.3
mc = Minecraft.create()
x, y, z = mc.player.getPos()
z = z + 15
El parámetro y lo iniciamos desde la posición -1. Lo hacemos así 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 9 x 3 desde la
posición x + 1, y y z + 1 hasta la posición x + 10, y + 3 y z + 10.
En este caso, el tipo de bloque va a ser aire, por lo que emplearemos el id = 0.
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 =
0. 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 = 20), por lo que insertaremos cuatro bloques con y = 1 en la mitad de la
pared donde coloquemos la puerta, y otros cuatro con y = 2.
Entonces, sabiendo que en las coordenadas (x; y; z) de nuestro mundo
comienza una pared, y finaliza en (x + 10; y + 4; z), podemos insertar la
puerta y la ventana de la siguiente manera:
PREMIUM.REDUSERS.COM 35
3. Hackeo a Minecraft Pi
PUERTA
• Bloque1: coordenadas (x + 1; y; z)
• Bloque2: coordenadas (x + 2; y; z)
• Bloque3: coordenadas (x + 1; y + 1; z)
• Bloque4: coordenadas (x + 2; y + 1; z)
• Bloque5: coordenadas (x + 1; y + 2; z)
• Bloque6: coordenadas (x + 2; y + 2; z)
VENTANA
• Bloque1: en coordenadas (x + 4; y + 1; z)
• Bloque2: en coordenadas (x + 5; y + 1; z)
• Bloque3: en coordenadas (x + 6; y + 1; z)
• Bloque4: en coordenadas (x + 7; y + 1; z)
• Bloque5: en coordenadas (x + 4; y + 2; z)
• Bloque6: en coordenadas (x + 5; y + 2; z)
• Bloque7: en coordenadas (x + 6; y + 2; z)
• Bloque8: en coordenadas (x + 7; y + 2; z)
for iy in range(0,3):
for ip in range(1,3): #bloque para puerta
mc.setBlock(x + ip, y + iy, z,0)
if iy> 0:
for iv in range(4,8): #bloque para ventana
mc.setBlock(x + iv, y + iy,z,20)
puerta = 0
ventana = 20
36 PREMIUM.REDUSERS.COM
python Vol.3
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> 0:
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
quedará como sigue:
mc.player.setPos(x + 5,y,z + 5)
CÓDIGO COMPLETO
Luego de haber escrito todos los pasos, nuestro código final es el siguiente:
PREMIUM.REDUSERS.COM 37
3. Hackeo a Minecraft Pi
puerta = 0
ventana = 20
mc = Minecraft.create()
x, y, z = mc.player.getPos()
z = z + 15
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> 0:
for iv in range(4,8): #bloque para ventana
mc.setBlock(x + iv, y + iy,z,ventana)
mc.player.setPos(x + 5,y,z + 5)
Mientras estemos jugando, bastará con ejecutar nuestro código para que, en forma
automática, aparezca una casa lista para ser habitada con nuestro personaje dentro de ella.
38 PREMIUM.REDUSERS.COM
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:
MINECRAFT.CAMERA
Este objeto nos permite manipular la vista del juego. Entre los comandos más
destacados podemos nombrar:
APLICACIONES
En este capítulo vimos algunos de los comandos que la librería 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 límites
de qué cosas podemos hacer queda en cada uno de nosotros hasta donde nos lleve
nuestra inventiva.
Siguiendo con el ejemplo de la casa, podríamos llamar una subrutina para
amueblarla. O hacer que aparezcan y desaparezcan elementos en función del
tiempo con las funciones setBlock() en posiciones aleatorias, con lo que nos
entretendríamos como si de un minijuego se tratase, en el que el objetivo sería
obtener la mayor cantidad de determinados elementos.
Si bien vimos herramientas suficientes para interactuar con el mundo, podemos
acceder a una guía completa del API desde
https://www.stuffaboutcode.com/p/minecraft-api-reference.html.
PREMIUM.REDUSERS.COM 39
4. MicroPython
MicroPython
Según el sitio oficial, MicroPython es un pequeño pero eficiente intérprete 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 IoT, 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 sinfín de librerías para poder implementar
cualquier tipo de proyecto, comandando una importante cantidad de placas.
VENTAJAS
• Incluye un RELP (Read-Eval-Print-Loop o consola de lenguaje) que lee las
instrucciones, las evalúa y procesa los resultados sin necesidad de compilar o
cargar los programas en la memoria del dispositivo.
• Muchas librerías para la ejecución de tareas y el simplificado de codificación.
Con estas librerías, podemos conectarnos mediante un socket, leer un JSON
(sigla en inglés de notación de objetos de JavaScript) desde un sitio web, entre
otras posibilidades, con las cuales simplificamos la programación y reducimos el
código por cargar.
• Extensible: podemos extender Python con lenguajes de programación de más
bajo nivel con los cuales personalizaremos mejor los procesos y resultados.
DESVENTAJAS
• MicroPython está elaborado con las funciones más relevantes de Python 3 y
sus librerías. Si bien está basado en su eficiencia, podemos encontrarnos muchas
veces con que no contamos con algo que solemos utilizar en su versión completa.
• Como no es un lenguaje de bajo nivel, su ejecución suele ser más lenta que en
homólogos realizados en C o C++.
40 PREMIUM.REDUSERS.COM
python Vol.3
04
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 más empleadas son:
PYBOARD
Esta placa es un diseño compacto pero poderoso que se puede conectar a una PC
mediante un cable micro USB, como el de los celulares.
Fue diseñada exclusivamente para ser programada con Python, por lo que posee
una integración perfecta con este lenguaje.
Placa PyBoard.
PREMIUM.REDUSERS.COM 41
4. 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 sí sucede
con la Raspberry, ofrece una gran versatilidad al permitir ejecutar códigos de manera
remota desde un dispositivo anfitrión, o almacenando el código 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 ejecución de códigos Python. Está equipada con un procesador de doble chipset
Espressif ESP32 y una placa WiFi capaz de conectar 1 km.
Resulta ideal para proyectos que requieran la conexión remota de un dispositivo
con todo el potencial que Python puede ofrecer.
Placa WiPy.
42 PREMIUM.REDUSERS.COM
python Vol.3
ESP8266
Esta es una placa versátil y poderosa, pensada
para ser programada tanto desde el IDE de
Arduino como desde Python.
Su grandeza radica en que es posible
ejecutar códigos 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. Placa ESP8266.
BBC MICRO:BIT
BBC micro:bit es un microcomputador programable, útil 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 diseñada para ser utilizada en ámbitos escolares, y ha obtenido una
gran aceptación entre docentes y alumnos.
Placa
BBC micro:bit.
PREMIUM.REDUSERS.COM 43
4. MicroPython
PLACAS PYBOARD
byYako1976 www.identi.io
44 PREMIUM.REDUSERS.COM
python Vol.3
PRIMEROS PASOS
Cuando conectamos la placa
pyboard a nuestra PC, como ya
hemos anticipado, tenemos dos
maneras de enviarle código:
escribiendo en la memoria flash
o enviándole código 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
ningún 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:
PREMIUM.REDUSERS.COM 45
4. MicroPython
Para poder introducirle un código a nuestra placa, bastará con abrir y reescribir el
archivo main.py.
Supongamos que queremos que parpadee el led 1 para indicar que la placa está
encendida y funcionando, deberíamos 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.
Recordemos
• toggle: cambia de estado el led, si esta encendido lo apaga y si
está apagado lo enciende.
• delay: crea una espera en milisegundos.
46 PREMIUM.REDUSERS.COM
python Vol.3
PREMIUM.REDUSERS.COM 47
4. MicroPython
Luego, haciendo clic en Open se nos abrirá una consola de comando donde
se estará ejecutando MicroPython. En esta consola, podremos ingresar el código
directamente y veremos el resultado en la 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.
48 PREMIUM.REDUSERS.COM
python Vol.3
MÓDULO PYB
Este módulo posee funciones específicas de la placa pyboard. Entre las funciones
que más se destacan podemos enumerar las siguientes:
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
necesitaríamos programar ni instalar nada adicional, sino que bastará con invocar a
la adecuada. Entre las clases más relevantes podemos mencionar:
• LED(): nos devuelve un objeto que representa uno de los led incluidos en la
placa. Se debe pasar como parámetro el número de led (1:rojo, 2:verde,
3:amarillo, 4:azul) y luego darle las opciones on(),off() o toggle().
import pyb
PREMIUM.REDUSERS.COM 49
4. MicroPython
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 ángulo
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) o X3
(servo 3).
import pyb
servo = pyb.Servo(1)#Conectamos al servo 1
servo.angle(90, 5000)#Giramos 90º en 5 segundos
• Switch: nos devuelve un objeto que nos permitirá leer el estado del switch de la
placa.
50 PREMIUM.REDUSERS.COM
python Vol.3
MÓDULO MACHINE
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 código.
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.
PREMIUM.REDUSERS.COM 51
4. MicroPython
Para acceder al simulador, deberemos hacer clic sobre el botón que dice USE
MICROPYTHON ONLINE, esto nos llevará a un simulador online sin necesidad de
instalar nada.
1 2
3 4
Simulador online.
52 PREMIUM.REDUSERS.COM
python Vol.3
Para otorgar mayor realismo y más versatilidad, este simulador posee cuatro
sectores con los que podemos interactuar.
1 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 servirá para hacer un
seguimiento de la ejecución del programa.
3 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 está
implementada, utilizaremos machine para encenderlo y apagarlo.
import machine
y12 = machine.Pin(‘Y12’)
y12(1)
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 53
4. MicroPython
Por arriba de los componentes, tenemos una serie de opciones para configurar el
hardware de nuestra placa llevando la ejecución lo más realista posible a distintas
situaciones.
Para que estas configuraciones surtan efecto, cada vez que hagamos una
modificación en los parámetros, deberemos presionar el botón que dice reset.
4 SIMULADOR DE PLACA
Este espacio es más 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 ejecución, podremos ver cómo cambian los estados de
cada componente en este sector. También es posible presionar sobre el botón de
reset, en el caso de que necesitemos reiniciar la placa, o si un error de código nos
ha llevado a una mala ejecución 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 pequeño script que nos permitirá encender
las cuatro led de la placa de nuestro simulador.
En primer lugar, importamos las librerías 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 irá cambiando el estado
de cada luz en forma alternada definiendo a i como iterador.
Recordemos
Para realizar una división cuyo resultado queremos que sea lo más
preciso posible, utilizamos el operador /. Por el contrario, si la idea es
obtener un valor entero, sin importar el resto, utilizaremos %. Ej:
8/3 = 2.666
8%3 = 2
54 PREMIUM.REDUSERS.COM
python Vol.3
Sabiendo que tenemos cuatro luces, vamos a dividir nuestro iterador en cuatro con
el operador %, lo que nos irá arrojando un valor entero que va a estar entre 0 y 3.
Con este resultado, invocaremos a la función toggle de la clase LED(), con lo
que iremos encendiendo y apagando alternadamente cada una de las lámparas de la
placa.
Para dar un tiempo de espera entre cada suceso, emplearemos la función sleep_
ms de la clase time.
for i in range(1000):
pyb.LED((i%4) + 1).toggle()
time.sleep_ms(100)
PREMIUM.REDUSERS.COM 55
Proyectos en
5. Proyectos en MicroPython
MicroPython
En este capítulo, crearemos una serie de proyectos simples escritos en
MicroPython. Para ponerlos en práctica sin necesidad de adquirir la placa
pyboard, emplearemos el simulador descripto en el capítulo 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
monocromática 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 I2C.
Es importante mencionar que este bus permite la conexión de más de un
dispositivo, para ello a cada uno que se conecta se le asigna un identificador único
con el cual podrá intercambiar datos.
Como esta conexión es serial, la transmisión y recepción de datos queda
definida por palabras de 8 bits.
56 PREMIUM.REDUSERS.COM
python Vol.3
05
Pines
SDA y SCL
PREMIUM.REDUSERS.COM
5. Proyectos en MicroPython
LA CLASE I2C
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.
DECLARACIÓN
El constructor requiere cuatro parámetros, de los cuales solo dos son requeridos:
i2c = machine.I2CI(id,scl,sda,frq).
Donde:
INIT(SCL,SDA,FREQ)
Este método inicializa el bus con los parámetros 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 arrojará un error.
DEINIT()
Finaliza el bus I2C.
MÉTODOS PRIMITIVOS
Estos métodos forman parte del diseño primitivo de la clase y permiten implementar
la lectura/escritura de un dispositivo.
58 PREMIUM.REDUSERS.COM
python Vol.3
se volverá a leer, por lo que vacía 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 ESTÁNDARES
Con estos métodos, se pueden llevar a cabo operaciones de lectura y escritura de un
dispositivo determinado.
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 línea, un
rectángulo o un texto y traducirlo a un buffer de byte.
CONSTRUCTOR
El constructor requiere cinco parámetros:
PREMIUM.REDUSERS.COM 59
5. Proyectos en MicroPython
MÉTODOS
import machine
import framebuf
from machine import I2C
Como la declaración del objeto I2c 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.
scl = machine.Pin(“X9”)
sda = machine.Pin(“X10”)
i2c = I2C(scl=scl, sda=sda)
El paso siguiente es crear nuestro buffer, para ello lo primero que tenemos que
ver es el tamaño del display y el tipo de pantalla. En nuestro caso, que estamos
60 PREMIUM.REDUSERS.COM
python Vol.3
fbuf.fill(0)
fbuf.text(‘Hola’, 15, 8)
fbuf.text(‘Mundo’, 15, 18)
i2c.writeto(8,fbuf)
PREMIUM.REDUSERS.COM 61
5. Proyectos en MicroPython
Pero para darle un toque más artístico a nuestro proyecto, vamos a agregarle como
detalles un punto en cada extremo del display y le insertaremos un recuadro a la
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(0,0,1)
fbuf.pixel(63,31,1)
fbuf.rect(14,7,45,20,1)
import machine
import framebuf
from machine import I2C
scl = machine.Pin(‘X9’)
sda = machine.Pin(‘X10’)
i2c = I2C(scl=scl, sda=sda)
fbuf.fill(0)
fbuf.pixel(0,0,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 PREMIUM.REDUSERS.COM
python Vol.3
CONTROL DE SERVO
En este proyecto, armaremos un sistema en donde podremos mover un
potenciómetro para cambiar la posición de un servo mecánico. Para saber cuál es la
inclinación que ha adquirido el servo, mostraremos en un display el ángulo de giro.
PREMIUM.REDUSERS.COM 63
5. Proyectos en MicroPython
Una vez que está 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 línea correspondiente al pin X1, nuestra variable la
definiremos de la siguiente manera:
servo = pyb.Servo(1)
POTENCIÓMETRO
Nuestro potenciómetro está en el pin Y4, por tal razón, crearemos primero la
variable que represente a dicho pin, y luego la variable que nos permitirá interactuar
con el potenciómetro propiamente dicho.
y4 = machine.Pin(‘Y4’)
adc = pyb.ADC(y4)
DISPLAY
Nuestro display está conectado en los pines X9 y X10, por lo que crearemos las
variables para representar ambos pines y la variable correspondiente al display.
scl = machine.Pin(‘X9’)
sda = machine.Pin(‘X10’)
i2c = I2C(scl=scl, sda=sda)
64 PREMIUM.REDUSERS.COM
python Vol.3
def mostrar(texto):
fbuf.fill(0)
fbuf.pixel(0,0,1)
fbuf.pixel(63,31,1)
fbuf.rect(14,7,45,20,1)
fbuf.text(‘Pos’, 15, 8)
fbuf.text(texto + ‘*’, 15, 18)
i2c.writeto(8,fbuf)
CÓDIGO PRINCIPAL
Nuestro programa estará inserto en un ciclo infinito, pues la placa deberá estar
continuamente esperando a que movamos el potenciómetro.
Dentro de este ciclo, lo primero que haremos es leer su estado y determinar el
factor por aplicarle al servo.
Mediante la función adc.read(), obtendremos un valor que va desde 0 hasta
255. Pero nosotros tenemos que convertir esos valores en ángulos de -90° hasta 90°.
Para simplificar la tarea, vamos a suponer que 127 es la mitad, es decir, si la
función me devuelve 127, voy a considerar que el ángulo por aplicar es de 0°.
PREMIUM.REDUSERS.COM 65
5. Proyectos en MicroPython
Entonces si escribo
servo.angle()
Esta función recibe dos parámetros:
El primero es el ángulo por aplicar expresado en un valor entero
que puede oscilar entre -90° y +90°.
El segundo es el tiempo en milisegundos que queremos que tarde el
servo en llegar al ángulo indicado.
66 PREMIUM.REDUSERS.COM
python Vol.3
if pangulo > 0:
pyb.LED(1).on()
pyb.LED(2).off()
else:
pyb.LED(2).on()
pyb.LED(1).off()
time.sleep(0.5)
Con esto, ya hemos finalizado nuestro código, que debería ser el siguiente:
import machine
from machine import I2C
import pyb
import time
import framebuf
servo = pyb.Servo(1)
y4 = machine.Pin(‘Y4’)
adc = pyb.ADC(y4)
scl = machine.Pin(‘X9’)
sda = machine.Pin(‘X10’)
i2c = I2C(scl=scl, sda=sda)
PREMIUM.REDUSERS.COM 67
5. Proyectos en MicroPython
def mostrar(texto):
fbuf.fill(0)
fbuf.pixel(0,0,1)
fbuf.pixel(63,31,1)
fbuf.rect(14,7,45,20,1)
fbuf.text(‘Pos’, 15, 8)
fbuf.text(texto + ‘*’, 15, 18)
i2c.writeto(8,fbuf)
byYako1976 www.identi.io
while True:
pangulo = int(((adc.read() - 127) * 100 / 127))
angulo = int(pangulo * 90 /100)
servo.angle(angulo , 1000)
if pangulo > 0:
pyb.LED(1).on()
pyb.LED(2).off()
else:
pyb.LED(2).on()
pyb.LED(1).off()
mostrar(str(angulo))
time.sleep(0.5)
Estado de ejecución,
ángulo menor a cero.
68 PREMIUM.REDUSERS.COM
Hola soy Yako1976,si estas
leyendo esto y no has
descargado de www.identi.
io ,quiere decir que lo han
copiado.Yo solo posteo en
www.identi.io,buscarme,
descargas directas sin
acortadores.Sofwares,
cursos y más.Que tengáis
buena lectura.
Yako1976
python Vol.3
Estado de ejecución,
ángulo mayor a cero.
PYTHON Y IOT
Hemos visto cómo un lenguaje de programación de código abierto, libre y gratuito
está ganando terreno en el mundo de los programadores. Y no es casualidad que
se esté convirtiendo en el preferido de muchos. Solo debemos considerar que
posee una sentencia simple, una velocidad de ejecución muy eficiente y que es
posible adaptarlo a muchas plataformas. Pero como si esto fuera poco, podemos
encontrarnos por internet con mucha documentación gratuita que no por eso es
de mala calidad, por el contrario, es creada por aficionados que disfrutan idear y
compartir sus logros.
También existen muchas librerías accesibles para cualquiera, que nos permiten
trabajar con un sinfín de placas o sensores manteniendo la premisa de simplicidad
en la programación.
Con todo esto, hoy en día disputa el primer lugar con lenguajes como C, C++,
Java, entre otros, y se convierte cada vez más en el favorito para trabajar en
pequeños componentes para automatizar procesos, conectar dispositivos, ayudar
a las tareas cotidianas. En otras palabras, junto con un grupo extenso de placas y
sensores de hardware libre de fácil acceso y a muy bajo costo, Python da un paso
más en la programación del internet de las cosas.
PREMIUM.REDUSERS.COM 69
Django:
Apéndice
p . Django:
j g Python
y en la Web
Python en la Web
La popularidad de Python ha llevado a que la comunidad de programadores busque
la forma de emplearlo para realizar sistemas web. Django es el resultado de uno de
estos intentos y no solo nos permite crear un servidor web, sino que nos brinda la
plataforma de desarrollo para montar un sistema complejo.
QUÉ ES DJANGO
Django es un framework web de alto nivel, diseñado por programadores expertos
en Python, quienes buscaron simplificar, de alguna manera, el desarrollo web.
La ventaja fundamental de esta plataforma es que permite que los programadores
se enfoquen netamente en el diseño del sistema, dejando la tarea más pesada, el
diseño web, al framework.
Creada bajo estrictas normas de seguridad, se convierte en un medio seguro
para procesar datos sensibles. Su código está escrito en Python bajo una licencia
open source, por lo que es gratis para cualquier persona que desee utilizarlo o
modificarlo.
SUS ORÍGENES
Surge en el 2003, de la mano de Adrian Holovaty y Simon Willison, dos
programadores que trabajaban en un diario de Kansas. Ellos creaban aplicaciones
con Python, y las exigencias del medio los obligaban a desarrollarlas en
tiempos límites. Cuando notaron que todas sus aplicaciones tenían mucho en
común, comenzaron un sistema que les permitiera simplificar el desarrollo y el
mantenimiento. Sin saberlo estaban creando un framework robusto y ágil.
En el año 2005, es liberado su código bajo licencia open source y bautizado como
Django, en honor al guitarrista de jazz Django Reinhardt.
El hecho de que Django naciera de una necesidad laboral lo hace diferente a otros
frameworks que surgen en un entorno artificial, teórico o académico, porque su
70 PREMIUM.REDUSERS.COM
python Vol.33
py
Apéndice
desarrollo implementa soluciones a problemas reales, cotidianos y actuales. Además,
su comunidad está continuamente actualizándolo para que mejore día a día su
operatividad.
PREMIUM.REDUSERS.COM 71
Apéndice. Django: Python en la Web
Una vez que hemos comprobado que Python está en el sistema, podemos proceder
a su instalación; esto puede hacerse o bien descargando los archivos e instalándolos
en forma manual, o directamente utilizando la herramienta PIP con el modificador
install.
EN LINUX
Python suele venir preinstalado en las distros de Linux, por lo que solo deberemos
abrir una terminal y ejecutar el código de instalación.
EN WINDOWS
Si estamos operando bajo el sistema operativo Windows 10, no debemos ejecutar el
comando en la ventana de CMD, sino que deberemos abrir la consola de comandos
PowerShell en modo de administrador para poder llevar a cabo la operación.
Una vez que hemos ejecutado el comando anterior correctamente, ya estamos en
condiciones de trabajar con este framework de manera local sin necesidad de una
conexión a internet y sin tener que llevar a cabo alguna otra configuración.
ENTORNOS VIRTUALES
Si bien con lo expresado en los apartados anteriores ya podemos crear un proyecto,
los propios diseñadores de Django recomiendan crear entornos virtuales para cada
proyecto. De esta manera podemos tener varias sentencias de Django operando
individualmente sin riesgo de que una se mezcle con otra.
Si no queremos llevar a cabo este paso, podemos diseñar nuestro proyecto y
trabajarlo en un entorno global. Algo que muy probablemente, según indicaciones,
nos traerá algún inconveniente cuando llevemos a la práctica más de un proyecto.
Para instalar el entorno virtual:
72 PREMIUM.REDUSERS.COM
python Vol.3
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh
Con estas líneas, configuramos dónde vivirá el entorno, dónde se almacenarán los
proyectos, y la localización de los scripts instalados con el paquete.
Lo último que haremos es recargar el fichero de inicio y para esto escribiremos en
la consola:
source ~/.bashrc
pip3install virtualenvwrapper-win
PREMIUM.REDUSERS.COM 73
Apéndice. Django: Python en la Web
Asimismo, es importante aclarar que existen más comandos disponibles para trabajar
con los entornos virtuales, sin embargo, estos representan los de mayor utilidad.
A partir de ahora, deberemos instalar Django en cada entorno virtual que
creemos. Gracias a esto podemos utilizar nuestra máquina como un servidor en
donde se estén ejecutando distintos proyectos en simultáneo de manera que no se
interfieran entre ellos.
CREAR UN PROYECTO
Como primer paso, deberemos crear un entorno virtual para encapsular todo el
paquete; para ello respetemos los siguientes pasos.
Atención
Si estamos trabajando en Windows, debemos utilizar CMD y no
PowerShell para movernos entre los distintos entornos.
74 PREMIUM.REDUSERS.COM
python Vol.3
Luego de este proceso, se crea una carpeta donde se incluirán todos los archivos
necesarios para ejecutar una sentencia de Python aislada.
Dicha carpeta tendrá la siguiente estructura:
--Envs
|-- redusers
|--Include
|--Lib
|--Scripts
|--tcl
Como esta nueva instancia es creada limpia, es decir, sin ningún paquete,
deberemos instalar todas aquellas librerías que vayamos a emplear en nuestro
proyecto. En este caso, vamos a utilizar Django, por lo que deberemos instalarla.
Recordar que
Si vamos a trabajar con otro entorno virtual, deberemos instalar
Django para cada entorno.
PREMIUM.REDUSERS.COM 75
Apéndice. Django: Python en la Web
Como vemos que no está Django, la instalamos con pip install Django.
76 PREMIUM.REDUSERS.COM
python Vol.3
Una vez instalado, volvemos a listar las librerías y chequeamos si ya figura en el listado.
cd C:\Users\%user-name\Envs
|--holausers
|--manage.py
|--holausers
|--__init__.py
|--asgi.py
|--settings.py
|--urls.py
|--wsgi.py
PREMIUM.REDUSERS.COM 77
Apéndice. Django: Python en la Web
ESTRUCTURA
Para comprender mejor lo que hizo Django, veamos detalladamente la estructura
generada.
Primero nos vamos a encontrar con una carpeta contenedora denominada igual
que nuestro proyecto y, dentro de esta, otra carpeta con igual nombre, donde se
alojarán todos los archivos de nuestro paquete y el archivo manage.py.
MANAGE.PY
Es un programa escrito en Python, que nos permitirá interactuar con el proyecto, con
el cual podremos crear aplicaciones, lanzar el servicio web o administrar usuarios,
entre otras tareas.
78 PREMIUM.REDUSERS.COM
python Vol.3
Con esto, Django nos crea en este directorio una carpeta llamada holaapp con el
siguiente contenido:
|--holausers
|--holaapp
|--__init__.py
|--admin.py
|--apps.py
|--models.py
|--tests.py
|--views.py
|--migrations
|--__init__.py
Veamos su contenido:
PREMIUM.REDUSERS.COM 79
Apéndice. Django: Python en la Web
Cuando realizamos un acceso a una página diseñada con Python, Django lee la
URL y busca cuál es la vista apropiada para esa petición.
Esto lo hace desde el archivo urls.py, donde se hace referencia al archivo
views.py para chequear qué acción tomar a la petición del usuario.
Desde el archivo views.py, podremos renderizar directamente la página que
queremos mostrar o, para evitar codificar, llamamos a una plantilla donde ya
tenemos la interfaz creada. Solo debemos enviarle los datos correctamente para
que esta los muestre.
80 PREMIUM.REDUSERS.COM
python Vol.3
ARMADO DE UN TEMPLATE
Gracias a las plantillas o templates, Django logra simplificar la programación a
muy poco código. Como ya hemos visto, estas son llamadas desde las vistas donde
se les pasan los datos por mostrar.
Luego Django se encarga de completar las plantillas mostrando ordenadamente
el contenido.
Supongamos que tenemos que hacer un ABM (Activity-Based Management)
de artículos, categorías, unidades y proveedores. Tradicionalmente deberíamos
generar un archivo para cada uno de los módulos. Si bien podríamos reutilizar
el código de uno a otro, nos vemos en la necesidad de generar cuatro archivos
distintos encargados de gestionar los artículos, las categorías, las unidades y los
proveedores.
Con Django, nos bastaría crear un solo template que será llamado desde el
archivo views.py con distintos parámetros.
Como ya hemos dicho, los template no son otra cosa que archivos codificados
en HTML, JS, CSS, entre otros lenguajes, a los que se les agregan etiquetas
propias de Django. Cada etiqueta se abre y se cierra con una llave y el signo por
ciento (%).
Dentro de las etiquetas más importantes se pueden enumerar las siguientes:
{{CAMPO}}
Con la doble llave, se hace referencia a un campo enviado como parámetro al
template. Por ejemplo, si pasamos un registro animal, el cual posee como valor
pato en el atributo especie y el valor Lucas en el atributo nombre, podríamos
escribir lo siguiente:
Lo que devolvería:
“Lucas es un pato”
{% IF %}
Esta etiqueta evalúa una variable, si existe, no está vacía y su valor no es falso;
inserta el contenido entre {% if %} y el {% endif %}.
Por ejemplo:
PREMIUM.REDUSERS.COM 81
Apéndice. Django: Python en la Web
{% FOR %}
Esta etiqueta itera para cada elemento de una lista o secuencia enviada al template.
En cada iteración, Django mostrará el contenido de las etiquetas {% for %} y el
{% endfor %}.
Por ejemplo:
<ul>
{% for doc in doctores %}
<li> {{doc.nombre}}–{{doc.especialidad}}</li>
{% endfor %}
</ul>
Es importante tener en cuenta que Django no admite rupturas en los ciclos, por
lo que, si hay valores que no queremos mostrar, debemos limpiar la variable antes
de enviarla al template.
Django asigna al ciclo for la variable forloop, que almacena datos
importantes de iteración.
Algunos de los atributos más empleados son:
82 PREMIUM.REDUSERS.COM
python Vol.3
HOLA MUNDO
Ya hemos visto lo básico para generar nuestro proyecto. Lo que haremos ahora es
codificar para obtener el tradicional “Hola Mundo”.
Para ello, generaremos un template con el cual le daremos el formato a nuestra
página. Crearemos una función en el archivo views.py y redireccionaremos
la dirección por defecto de nuestro servidor para que nos salude cada vez que
accedamos a la aplicación.
EL TEMPLATE
Para crear nuestro template, accederemos a la carpeta de nuestra aplicación –
holaapp– y crearemos la siguiente estructura:
|--holaapp
|--template
|--holaapp
|--saludo.html
<!DOCTYPE html>
<html>
<head>
<title>Saludo de Red Users</title>
</head>
<body>
<p>”Hola {{nombre}}!!!”
</body>
</html>
PREMIUM.REDUSERS.COM 83
Apéndice. Django: Python en la Web
LA VISTA
El paso siguiente consiste en crear una función en el archivo vista con el cual direc-
cionaremos a la plantilla para renderizar la página saludo.html como respuesta a
la solicitud del usuario.
def index(request):
return render(request, ‘holaapp/saludo.
html’,{‘nombre’:’RedUser’})
REDIRECCIONAMIENTO DE LA URL
Lo último que nos queda por hacer para que nuestro proyecto funcione es configurar
el redireccionamiento de las peticiones del usuario.
Para ello, crearemos un archivo urls.py dentro del directorio de la aplicación –
no del proyecto– y pondremos el siguiente código:
Función render(request,template_name,context)
Combina un determinado template y lo relaciona con la información de
un contexto, devolviendo un HttpResponse, que puede ser renderizado
por el navegador.
Parámetros aceptados:
• request: el objeto que genera la solicitud;
• template_name: el nombre de la plantilla que se va a llamar;
• context: el contexto o los valores que se van a combinar con la plantilla.
84 PREMIUM.REDUSERS.COM
python Vol.3
urlpatterns = [
path(‘’, views.index, name=’index’),
]
CONFIGURAR EL PROYECTO
Ya tenemos todos los archivos necesarios, ahora lo que haremos es configurar el
proyecto para incluir nuestra aplicación y para que redireccione sus URL.
Para que el proyecto reconozca las URL, deberemos acceder al archivo urls.py
de la carpeta holausers y editarlo de la siguiente manera:
urlpatterns = [
path(‘holaapp/’,include(‘holausers.holaapp.urls’) ),
]
byYako1976 www.identi.io
Función path(route, view, kwargs=None, name=None)
Devuelve el elemento para incluir en urlpaterns:
• route: es un string que indica la solicitud del usuario;
• view: es la función de la vista llamada para renderizar;
• kwargs: son parámetros adicionales por pasar;
• name: un nombre de referencia para futuras llamadas.
PREMIUM.REDUSERS.COM 85
Apéndice. Django: Python en la Web
En resumen, le dijimos al proyecto que, cada vez que se hace una petición a
holaapp, nos redireccione según lo que esté configurado en el archivo urls.py de
esa aplicación.
Y como último paso, antes de poner a prueba nuestro proyecto, deberemos incluir
nuestra aplicación dentro del archivo settings.py.
Para ello, buscaremos la etiqueta INSTALLED_APPS, borraremos todo su
contenido y le agregaremos holausers.holaapp, por lo que debería quedarnos
así:
INSTALLED_APPS = [
‘holausers.holaapp’,
]
pero, antes de escribir este código, debemos asegurarnos de que estamos dentro
del entorno virtual correspondiente. Y dentro de este entorno, deberemos acceder al
directorio de nuestro proyecto, donde está el archivo manage.py.
Entonces, abriremos la consola de comandos y escribiremos las siguientes
órdenes:
workon redusers
cd c:\Users\%user-name\Envs\redusers\holausers
Python manage.py runserver
86 PREMIUM.REDUSERS.COM
python Vol.3
RESUMEN
Como Django es un framework que hace muchas tareas de manera automática
y transparente, resulta fundamental que el código esté en correcto diseño, pero
también debemos respetar la estructura de los directorios.
Una vez que dominemos esta estructura y la lógica del funcionamiento como
ya hemos explicado, veremos que podremos disminuir considerablemente los
tiempos de diseños y la eficiencia en la implementación de grandes proyectos.
Para el proyecto que hemos diseñado, esta estructura debe responder al
esquema que se muestra en la siguiente imagen.
PREMIUM.REDUSERS.COM 87
Apéndice. Django: Python en la Web
88 PREMIUM.REDUSERS.COM