Una de las mejores cosas sobre CircuitPython, es lo sencillo que es poner a trabajar al código. En esta sección vamos a hablar de como crear y editar tu primer programa en CircuitPython.
Para crear y editar el código, todo lo que necesitas es un editor. Existen muchas opciones. ¡Nosotros recomendamos fuertemente a Mu! Es diseñado para CircuitPython, y es realmente simple y sencillo de utilizar, ¡con una consola serial integrada!
Si no utilizas o no puedes usar Mu, hay editores básicos para texto en cualquier sistema operativo, como Notepad en Windows, TextEdit en Mac, y gedit en Linux. Sin embargo, muchos de estos editores no escriben sus cambios de inmediato a los archivos que editas. Esto puede causar problemas con CircuitPython. Ver la sección de Editando código a continuación. Si quieres saltarte dicha sección por el momento, asegurate de "Expulsar" o "Remover de forma segura" en Windows, o "sync" en Linux luego de escribir un archivo si no estás en Mu. (Esto no es un problema en MacOS).
Abre tu editor y crea un archivo nuevo. Si estás usando Mu, da click al botón de Nuevo arriba a la izquierda
Copia y pega el siguiente código en tu editor:
import board import digitalio import time led = digitalio.DigitalInOut(board.D13) led.direction = digitalio.Direction.OUTPUT while True: led.value = True time.sleep(0.5) led.value = False time.sleep(0.5)
Para las CLUE de Adafruit, vas a tener que utilizar board.D17
en lugar de board.D13
. El resto del código se mantiene igual. Realiza el siguiente cambio a la línea led =
:
led = digitalio.DigitalInOut(board.D17)
Se va a ver Así - nota que cuando estás bajo la línea while True:
, las siguientes cuatro líneas tienen espacios para identarlas, pero están identadas la misma cantidad. El resto de líneas no tiene espacios antes del texto.
En cada tarjeta vas a encontrar un pequeño LED rojo. Debería estar parpadeando una vez por segundo.
¡Felicidades, estas ejecutando tu primer programa en CircuitPython!
Para editar código, abre tu archivo code.py bajo tu unidad de disco CIRCUITPY usando un editor.
Realiza los cambios deseados en tu código. Salva el archivo. ¡Eso es todo!
Los cambios en tu código son aplicados en el momento que el archivo es salvado.
Solamente hay una advertencia para darte, antes de continuar...
El código CircuitPython en tu tarjeta detecta cuando los archivos cambian o son escritos y automáticamente re-inicia tu código. Esto hace programar muy rápido porque tu salvas y vuelve a correr.
¡Sin embargo, debes esperar a que el archivo esté completamente salvado antes de desconectar o reiniciar tu tarjeta! En Windows, usando algunos editores es posible que dure hasta 90 segundos o 30 segundos para Linux, para completar porque el editor de texto no salva el archivo completamente. Mac OS parece no tener este retraso, ¡lo cual es bueno!
Esto es muy importante para tener en cuenta. Si desconectas o reinicias la tarjeta antes de que tu computadora termine de escribir a la tarjeta, puedes corromper la unidad de disco. Si esto sucede, es posible que pierdas el código que has escrito, por lo que es importante respaldar tu código regularmente hacia una computadora.
Estas son algunas recomendaciones para evitar que suceda:
1. Utiliza un editor que escriba los archivos completamente cuando los salvas.
Editores recomendados:
- mu es un editor que escribe de forma segura todos los cambios (Así como es también nuestro editor recomendado!)
- emacs también es un editor que va a escribir completamente los archivos cuando los salvas
- Sublime Text escribe de forma segura los cambios
- Visual Studio Code parece que escribe de forma segura los cambios
- gedit en Linux, parece que escribe de forma segura los cambios
- IDLE, en Python 3.8.1 o posterior, fue arreglado de forma que ahora escribe de forma segura los cambios
Recomendado solo para ciertos escenarios o con añadidos:
-
vim / vi escribe de forma segura los cambios. Pero configura a vim para que no escriba archivos temporales (archivos .swp: registros temporales de las ediciones) para CIRCUITPY. Ejecuta vim con
vim -n
, configura la opciónno swapfile
, o configura la opción de directorio(directory)
para que escriba los temporales en otro lugar. De otra manera, los archivos temporales van a causar reinicios de tu aplicación. - El IDE PyCharm escribe de forma segura si "Safe Write" se activa en Settings->System Settings->Synchronization (activado por omisión).
- Si estás utilizando Atom, instala el paquete fsync-on-save para que siempre escriba los cambios en CIRCUITPY.
- SlickEdit funciona solo si le agregas un macro para que escriba los cambios a disco.
Nosotros no recomendamos estos editores:
- notepad (el editor por omisión en Windows) ni Notepad++ que pueden serlentos para escribir, ¡por lo que recomendamos los editores mencionados arriba! Si estás utilizando notepad, Asegúrate de expulsar la unidad de disco (ver abajo).
- IDLE en Python 3.8.0 o anterior no fuerza la escritura inmediata de los cambio
- nano (on Linux) no fuerza la escritura de cambios
- geany (on Linux) no fuerza la escritura de cambios
-
Cualquier otro - nosotros no hemos probado otros editores, Así que por favor ¡utilice uno recomendado!
2. Expulse o sincronice el dispositivo luego de escribir
Si estás utilizando uno de los editores no recomendados, ¡todavía hay esperanza! Todavía puedes lograr que funcione.
En Windows, puedes Expulsar o Remover de forma segura, la unidad de disco CIRCUITPY. No se va a expulsar realmente, pero forzará al sistema operativo a escribir tu archivo al disco. En Linux, puedes usar el comando sync en una terminal para forzar la escritura al disco.
¡No se preocupe! El corromper una unidad de disco no es el fin del mundo (¡o de tu tarjeta!). Si esto sucede, sigue los pasos descritos en la página de Solución de Problemas en la guía de cada tarjeta, para tenerla trabajando de nuevo.
Volviendo con la edición de código...
¡Ahora! Vamos a tratar de editar el programa que has agregado a tu tarjeta. Abre tu archivo code.py en tu editor. Vamos a realizar un simple cambio. Modifique el primer 0.5
hacia un 0.1
. El código debería verse de esta manera:
import board import digitalio import time led = digitalio.DigitalInOut(board.D13) led.direction = digitalio.Direction.OUTPUT while True: led.value = True time.sleep(0.1) led.value = False time.sleep(0.5)
Mantenga el resto del código sin cambios. Salve su archivo. Observe que sucede con el LED de tarjeta. ¡Algo ha cambiado! ¿Sabes por qué? ¡Vamos a averiguarlo!
Explorando tu primer programa en CircuitPython
Primero, vamos a observar el código que estamos editando.
Aquí está de nuevo el código original:
import board import digitalio import time led = digitalio.DigitalInOut(board.D13) led.direction = digitalio.Direction.OUTPUT while True: led.value = True time.sleep(0.5) led.value = False time.sleep(0.5)
Imports y librerías
Cada programa en CircuitPython que ejecutas necesita tener mucha información para trabajar. La razón de porqué CircuitPython es tan sencillo es porque mucha de esa información se encuentra almacenada en otros archivos y trabaja detrás del telón. Estos archivos se llaman librerías. Algunas de ellas están integradas dentro e CircuitPython. Otras están almacenadas dentro de la unidad de disco CIRCUITPY en una carpeta llamada lib.
import board import digitalio import time
Las palabras de import
le dicen a la tarjeta que vas a utilizar una librería en particular en tu código. En este ejemplo, hemos importado tres librerías: board
, digitalio
, y time
. Estas tres librerías se encuentran integrada en CircuitPython, por lo que no son necesarios archivos adicionales. Eso es una de las cosas que lo vuelven un excelente primer ejemplo. ¡No necesitas nada extra para que funcione! board
provee el acceso al hardware de tu tarjeta, digitalio
permite accesar las entradas y salidas de hardware, time
te permite pasar el rato 'durmiendo'
led = digitalio.DigitalInOut(board.D13) led.direction = digitalio.Direction.OUTPUT
Tu tarjeta conoce el LED rojo como D13
. Así que cuando inicializas este pin, lo preparamos para salida. Preparamos led
para para que retenga esta información y no sea necesario escribirlo de nuevo más adelante en nuestro código.
Ciclos
La tercera sección comienza con una palabra de while
. while True:
básicamente significa "por siempre haga esto". while True:
crea un ciclo. El código va a repetir "mientras" (while) la condición sea "verdadera" (true) (a diferencia de falso), y como True
nunca es falso, el código se encicla sin fin. Todo el código que está identado bajo while True:
está "dentro" del ciclo.
Dentro del ciclo, tenemos cuatro elementos:
while True: led.value = True time.sleep(0.5) led.value = False time.sleep(0.5)
Primero, tenemos led.value = True
. Esta línea le dice al LED que se encienda. En la siguiente línea tenemos time.sleep(0.5)
. Esta línea le dice a CircuitPython que realice una pausa durante medio segundo. Ya que esta línea está en medio del prendido y apagado el led, el led va a estar encendido por medio segundo.
Las siguientes dos líneas son similares. led.value = False
le dice al LED que se apague, y time.sleep(0.5)
le dice a CircuitPython que realice otra pausa, también medio segundo.
Luego el ciclo comienza de nuevo, y ¡se va a mantener ejecutándose siempre y cuando el código esté trabajando!
Entonces, cuando cambiaste el primer 0.5
hacia un 0.1
, bajaste el tiempo que el LED se mantiene encendido. Así que parpadea encendido, ¡muy rápido antes de apagarse!
¡Excelente trabajo! ¡Has editado código de un programa en CircuitPython!
Si no tienes el ciclo, el código se va a ejecutar hasta el final, y terminal. Esto puede llevar a comportamientos extraños en programas sencillos como este, ya que el comportamiento de "exit" también reinicia el estado del hardware. Esto es un comportamiento diferente a ejecutar comandos en el REPL. Así que si estás editando un programa sencillo que parece no funcionar, pueda que necesites agregar un ciclo al final para que el programa no termine.
El ciclo más sencillo sería:
while True:
pass
Y recuerda, puedes presionar para salirte del ciclo.
Puedes también leer la sección Comportamiento, en la documentación.
Más Cambios
¡No hay razón para detenernos Aquí! Vamos a continuar. Cambie el segundo 0.5
por 0.1
para que se vea así:
while True: led.value = True time.sleep(0.1) led.value = False time.sleep(0.1)
¡Ahora parpadea muy rápido! ¡Has bajado ambos tiempos que el código prende y apaga el LED!
Ahora trata de cambiar ambos de 0.1
a 1
.El LED va parpadear mucho más despacio porque aumentaste la cantidad de tiempo que el LED esta prendido y apagado.
¡Bien hecho! ¡Lo estas haciendo muy bien! ¡Estas listo para comenzar con nuevos ejemplos y editarlos para ver que pasa! Estos cambios han sido sencillos, pero cambios mayores se puede realizar por el mismo proceso. Haces el cambio que deseas, lo salvas y recibes los resultados. ¡No tiene nada de complicado!
CircuitPython busca un código en tu tarjeta para ejecutar. Existen cuatro opciones: code.txt, code.py, main.txt y main.py. CircuitPython buscar por esos archivos, en ese orden, y ejecuta el primero que encuentre. Así como sugerimos utilizar code.py como tu archivo para código, es importante que sepas que existen otras opciones. Si pareciera que tu programa no se actualiza mientras trabajas, verifica que no hayas creado otro archivo que pueda estar siendo leído en lugar del archivo sobre el que estas trabajando.
Text editor powered by tinymce.