En la década de 1980, el auge de las computadoras hogareñas vio máquinas de Atari, Apple, Commodore, Acorn, Sinclair y otros que buscaban introducir la informática a una generación. En un ejemplo de la repetición de la historia, vimos el surgimiento de Raspberry Pi en la década de 2010. Pero como Raspberry Pi y Python ahora van de la mano para esta generación, en la década de 1980 era BASIC.
BASIC, código de instrucción simbólica multiusos para principiantes, es un lenguaje legible por humanos de alto nivel desarrollado originalmente en 1964 por John G. Kemeny, Thomas E. Kurtz y Mary Kenneth Keller en Dartmouth College. BASIC saltó a la fama a fines de la década de 1970, gracias al auge de las computadoras domésticas. La década de 1980 vio BASIC, múltiples versiones del lenguaje, para muchas computadoras domésticas diferentes. Microsoft BASIC, TI-BASIC, Amiga BASIC, AppleSoft BASIC. BASIC era tanto nuestro lenguaje de programación como un medio para controlar las computadoras de nuestra casa.
Con el tiempo, BASIC se desvaneció en las sombras para muchos. Aparecieron nuevos idiomas y se hicieron cargo. Ahora tenemos miles de lenguajes de programación para elegir. Cuando se trata de Raspberry Pi Pico, nuestra elección es un poco más limitada, pero ahora podemos agregar uno más a la lista.
PicoMite es el nombre de un proyecto basado en Raspberry Pi Pico que ve una versión de BASIC (MMBASIC en este caso) utilizada para controlar el GPIO del Pico. El término «Ácaro» proviene del creador, la gama de placas Maximite y Micromite de Geoff Graham, que utilizan SoC basados en Arm para alimentar potentes ordenadores domésticos que ejecutan una versión de BASIC.
PicoMite es un producto más «ligero», diseñado para el Raspberry Pi Pico de $4, que permite que el código BASIC controle y funcione con pines GPIO, sensores, LED RGB y otros componentes. En este tutorial, crearemos nuestro propio dispositivo PicoMite y lo usaremos para controlar una serie de LED Neopixel RGB.
Para este proyecto necesitarás
- Frambuesa Pi Pico (se abre en una pestaña nueva)
- Protoboard de tamaño medio (se abre en una pestaña nueva)
- DIRIGIÓ (se abre en una pestaña nueva)
- Resistencia de 220 ohmios (rojo, rojo, marrón, dorado) (se abre en una pestaña nueva)
- 2 cables de puente macho a macho. (se abre en una pestaña nueva)
- Tira de neopíxeles (se abre en una pestaña nueva)
Configuración de PicoMite
1. Navegar a la Página web de PicoMite y desplácese hacia abajo hasta la sección Descargas. Descargue el último firmware de PicoMite.
2. Extrae el contenido de la descarga
3. Mantenga presionado el botón BOOTSEL de la Raspberry Pi Pico y conéctese a través de USB a su computadora. Aparecerá una nueva unidad, RPI-RP2, esta es nuestra Raspberry Pi Pico.
4. Copie el PicoMite UF2 archivo de firmware a la unidad RPI-RP2. Después de unos momentos, la unidad desaparecerá y nuestro Pico ahora está ejecutando la versión Pico de MMBASIC.
Conexión a PicoMite
Para usar PicoMite, necesitamos crear una conexión en serie entre nuestra computadora y el Raspberry Pi Pico. La mejor herramienta para el trabajo en Windows es PuTTY.
1. Descarga e instala PuTTY a su máquina Windows.
2. Haga clic derecho en el menú de Windows y seleccione Administrador de dispositivos.
3. Desplácese hacia abajo hasta Puertos (COM y LPT) y haga clic en la flecha desplegable. Tome nota del puerto COM del dispositivo serie USB.
4. masilla abierta y haga clic en Serie. Ingrese el puerto COM para su PicoMite y establecer la velocidad a 38400.
5. En el menú Categoría (izquierda), haga clic en Serie.
6. Establezca su configuración serial de la siguiente manera. Velocidad 38400, bits de datos 8, bits de parada 1, paridad ninguna, control de flujo ninguno.
7. Desde el menú Categoríahaga clic en Teclado y establezca la tecla Retroceso en Control-H. Esto nos permitirá usar la tecla de retroceso para eliminar cualquier error en nuestro código. Si esta configuración no está habilitada, la tecla de retroceso está desactivada.
8. Haga clic en Sesión, nombre su sesión PicoMite y clic en Guardar. Ahora tenemos la configuración lista para usar cuando deseemos usar PicoMite con PuTTY.
9. Haga clic en Abrir para crear una conexión.
Uso de PicoMite con MMBASIC
Lo primero que vemos con MMBASIC es nada. Una pantalla en blanco con un aviso es todo lo que saluda. Pero desde aquí podemos escribir código BÁSICO, línea por línea, que se ejecuta cada vez que presionamos la tecla Enter.
Usemos un comando de impresión rápida para probar que todo funciona como se esperaba. Presiona Enter al final de la línea para ejecutar el código, deberías ver el mensaje aparecer en la pantalla.
print “Hello World”
Necesitamos crear un archivo para hacer más con el código.
1. Escribe editar y presione Entrar. Esto abre un editor de texto básico y en la parte inferior de la pantalla podemos ver que las teclas de función se usan para Guardar, Ejecutar, Buscar, Marcar (resaltar para cortar/copiar) y Pegar.
2. Cree un comentario, comenzando con ‘, que identificará lo que hará el proyecto. Los comentarios, observaciones en lenguaje BÁSICO, son formas de dejar mensajes en nuestro código. Para MMBASIC también funcionan como nombres de archivo de proyecto.
‘For loop
3. Cree un bucle for que se repetirá diez veces.
For i = 1 To 10
4. Dentro del bucle for, agregue un comando de impresión para imprimir un mensaje en la pantalla.
Print “Tom’s Hardware”
5. Cierra el ciclo for usando Siguiente. Esto aumentará el valor de i cada vez que el ciclo itere. Cuando llega a 10, el ciclo termina.
Next i
6. Presione F1 para guardar. Esto también nos sacará del editor.
7. Guarde el código en la ranura uno de la memoria integrada. PicoMite tiene siete ranuras en las que podemos guardar código.
flash save 1
8. Escribe correr y presione Entrar para iniciar el código. Aparecerá un mensaje diez veces.
Para la lista completa de códigos de bucle
'For Loop
For i = 1 To 10
Print "Jugo Mobile"
Next i
Usando el GPIO
Como se trata de un Raspberry Pi Pico, podemos hacer mucho más que imprimir cadenas de texto. MMBASIC tiene acceso al GPIO. Disponemos de digital, analógico, PWM, I2C, SPI, RS232 y 1-Wire. Comencemos de manera simple con un LED.
El LED tiene dos conexiones, el ánodo y el cátodo. El ánodo (pata larga) se conecta a GP0 a través de un cable puente macho a macho. El cátodo (pata corta, GND) se conecta a cualquier pin GND en el Pico a través de una resistencia de 220 ohmios.
1. Escribe editar y presione Entrar. Esto abre un editor de texto básico.
2. Nombre el proyecto Parpadeo LED.
‘LED Blink
3. Configure el pin 0 de GPIO como salida.
SetPin GP0, DOUT
4. Cree una variable, retraso, en la que almacenamos el valor 1000. Este es un retraso de un segundo en milisegundos.
delay = 1000
5. Crea una etiqueta, Blink_Loop: que indica el inicio de nuestro código en bucle. BASIC puede usar etiquetas o números de línea, subiendo en pasos de 10, para indicar posiciones en el código.
6. Encienda el LED conectado a GP0, y utilice un comando de impresión para escribir «On» en la pantalla. Al imprimir un mensaje en la pantalla, podemos ver que el bucle está funcionando, en caso de que nuestro circuito LED sea incorrecto.
Pin(GP0) = 1
Print “On”
7. Agrega una pausa, usando el valor almacenado en delay. Esto mantendrá el LED encendido durante un segundo.
Pause delay
8. Apague el LED, imprima en la pantalla y luego haga una pausa de un segundo.
Pin(GP0) = 0
Print "Off"
Pause delay
9. Use un comando GoTo para enviar el código de regreso a Blink_Loop, cerrando el ciclo.
GoTo Blink_Loop
10 Presione F1 para guardar y salir del código.
11 Guarde el proyecto en la ranura dos de la memoria integrada.
flash save 2
12 Escribe correr y presione Entrar para iniciar el código. El LED ahora debería parpadear cada segundo. Presione CTRL+C para salir del código.
Parpadeo de LED Listado completo de códigos
'LED Blink
SetPin GP0, DOUT
delay = 1000
Blink_Loop:
Pin(GP0) = 1
Print "On"
Pause delay
Pin(GP0) = 0
Print "Off"
Pause delay
GoTo Blink_Loop
Código de carga
Ahora tenemos dos proyectos guardados en PicoMite, pero solo se puede ejecutar uno a la vez.
1. Enumere los proyectos guardados en el PicoMite.
flash list
2. Cargue el código de bucle for desde la ranura uno.
flash load 1
3. Enumere el contenido del código, escriba lista y presione Entrar.
4. Escribe correr y presione Entrar para ejecutar el código.
¿Qué pasa si queremos ejecutar nuestro código cuando la Raspberry Pi Pico está lejos de una computadora? Digamos que queremos que el proyecto de parpadeo del LED se cargue cuando se enciende el PicoMite.
Utilice este comando para configurar el código de parpadeo del LED en la ranura 2 para que se cargue en el arranque.
option autorun 2
Controlando NeoPixels con PicoMite
¡Has leído bien! Normalmente necesitamos CircuitPython, MicroPython o C para controlar NeoPixels con Raspberry Pi Pico. Pero PicoMite admite «bitbanging», donde creamos las señales/pulsos necesarios para controlar los LED RGB WS2812 en el software.
El circuito para NeoPixels es simple. Tenemos tres conexiones.
Pico de frambuesa pi | neopíxel | Color del cable |
---|---|---|
3v3 | CCV | Rojo |
TIERRA | TIERRA | Negro |
GPIO28 | Entrada de datos (DIN) | Verde |
El código para este proyecto es un poco más complicado ya que usaremos arreglos (esencialmente, grupos de variables) para controlar el color de cada LED en una cadena de seis.
1. Cargue una ranura vacía para el código.
flash load 3
2. Abra la ranura usando editar.
3. Agregue el comentario ‘Neopixels. Recuerda que este será el título del código en la ranura 3.
4. Crea una variable llamada demora y ahí tienda 1000. Este será un retraso de un segundo entre cada color en el ciclo.
delay = 1000
5. Cree una matriz (Python llama a esto una lista) que contendrá los seis valores para cada uno de los seis Neopixels que deseamos controlar. En BASIC tenemos que crear las dimensiones (tamaño) de la lista. Los ! denota que nuestra matriz contiene enteros, y cada uno es un valor RGB, en este caso rojo.
Dim a%(5)=(RGB(red),RGB(red),RGB(red),RGB(red),RGB(red),RGB(red))
6. Cree otra matriz, esta vez para configurar los LED en verde.
Dim b%(5)=(RGB(green),RGB(green),RGB(green),RGB(green),RGB(green),RGB(green))
7. Cree una matriz final, esta vez para configurar los LED en azul.
Dim c%(5)=(RGB(blue),RGB(blue),RGB(blue),RGB(blue),RGB(blue),RGB(blue))
8. Configure GPIO 28 en una salida.
SetPin GP28, DOUT
9. Cree una etiqueta que indique el inicio de un ciclo.
pixel_loop:
10 Use el comando Bitbang para simular el tiempo WS2812 necesario para configurar los LED en rojo. La opción WS2812 tiene dos configuraciones para Neopixels. O para estándar y B para la versión WS2812B. Si uno no funciona, prueba con el otro.
Bitbang ws2812 o, GP28, 6, a%()
11 Agregue una pausa. Usamos el valor almacenado en demora como la duración.
Pause delay
12 Use otro bitbang para configurar los LED en verde, luego agregue otra pausa. Usamos los valores de la b matriz para establecer cada LED verde.
Bitbang ws2812 o, GP28, 6, b%()
Pause delay
13 Establezca los LED azules con un comando bitbang final y una breve pausa.
Bitbang ws2812 o, GP28, 6, c%()
Pause delay
14 Finalmente cierre el ciclo, indicándole al código que regrese a la etiqueta.
GoTo pixel_loop
15. Presione F1 para guardar el código.
dieciséis. Sobrescriba el código en la ranura 3. Esto asegura que nuestro código se guarde correctamente.
flash overwrite 3
17 Escribe correr para iniciar el código. Presione CTRL+C para detenerse en cualquier momento.
Listado de códigos Neopixel
Su código para este proyecto debería verse así.
'Neopixels
delay = 1000
Dim a%(5)=(RGB(red),RGB(red),RGB(red),RGB(red),RGB(red),RGB(red))
Dim b%(5)=(RGB(green),RGB(green),RGB(green),RGB(green),RGB(green),RGB(green))
Dim c%(5)=(RGB(blue),RGB(blue),RGB(blue),RGB(blue),RGB(blue),RGB(blue))
SetPin GP28, DOUT
pixel_loop:
Bitbang ws2812 o, GP28, 6, a%()
Pause delay
Bitbang ws2812 o, GP28, 6, b%()
Pause delay
Bitbang ws2812 o, GP28, 6, c%()
Pause delay
GoTo pixel_loop