Saltar a contenido

mBlocks + App Inventor + BLE

Introducción

Se trata de ampliar las funcionalidades de Bluetooth LE utilizando como plataforma de programación MicroBlocks y la placa micro:STEAMakers que estamos tratando en esta web. Vamos a usar la versión de pruebas que nos servirá para introducir el nuevo IDE 2.0 de MicroBlocks.

Nos vamos a basar en MicroBlocks BLE Extension, extensión de App Inventor aportada a la comunidad MIT APP INVENTOR por Peter Mathijssen:

Peter en MIT App Inventor
Peter en MIT App Inventor

En la imagen siguiente vemos el aspecto del nuevo IDE con la libreria micro:STEAMaker cargada y un sencillo programa en la zona de programación:

Aspecto del IDE 2.0
Aspecto del IDE 2.0

MicroBlocks

MicroBlocks es un lenguaje de programación por bloques para computación física. Funciona en microcontroladores como micro:bit, micro:STEAMakers, Calliope mini, AdaFruit Circuit Playground Express y muchas otras.

Codificación de forma interactiva

MicroBlocks es un entorno "en vivo (en directo)". Al hacer clic en un bloque se ejecutará inmediatamente, directamente en la placa. Prueba comandos. Ver y graficar los valores de los sensores en tiempo real. Se acabó esperar a que el código se compile y se descargue.

Multitarea Natural

¿Quieres visualizar una animación mientras controlas un motor? No hay problema, MicroBlocks permite escribir scripts separados para cada tarea y ejecutarlos al mismo tiempo. El código es más sencillo de escribir y más fácil de entender.

Correr en cualquier sitio

MicroBlocks funciona en muchas placas diferentes, pero sus scripts son portables. Los botones, sensores y bloques de pantalla se comportan igual en todas las placas con el hardware relevante. MicroBlocks incluso simula la pantalla micro:bit 5x5 LED en pantallas TFT.

Desconecta y ¡adelante!

MicroBlocks descarga el código en el microcontrolador a medida que lo escribes. Cuando te guste lo que hace tu programa, desconecta la placa y listo. Crea un juego de bolsillo, una aplicación de fitness o ropa luminosa que vaya contigo a todas partes.

MicroBlocks 2.0

Las diferencias entre MicroBlocks 1.2 y 2.0 son obvias y se ven a primera vista.

El viejo MicroBlocks 1.2
El viejo MicroBlocks 1.2 El nuevo MicroBlocks 2.0
El nuevo MicroBlocks 2.0

MicroBlocks 2.0 tiene una interfaz de usuario completamente rediseñada y moderna, con iconos limpios, una atractiva combinación de colores, una paleta de bloques animados y compatibilidad con el modo oscuro. Los cambios en el diseño de los bloques incluyen contornos más sencillos, mejor contraste de colores para mejorar la legibilidad, campos de entrada de datos más grandes y triángulos de selección de menús y opciones más grandes y manejables.

Transición del firmware

MicroBlocks 2.0 también mejora la máquina virtual (VM), el firmware que ejecuta el código MicroBlocks. La antigua VM utilizaba instrucciones de longitud fija de 32 bits; la nueva utiliza instrucciones de longitud variable de 16 bits.

Dado que utilizan conjuntos de instrucciones completamente diferentes, las dos VM no son compatibles. MicroBlocks 2.0 requiere la nueva VM (versiones de firmware 300 y posteriores) mientras que las versiones anteriores de MicroBlocks requieren la antigua VM (versiones de firmware anteriores a 300).

No hay diferencias a nivel de código fuente; los mismos archivos de proyecto y biblioteca de MicroBlocks funcionan tanto en MicroBlocks 2.0 como en versiones anteriores.

La primera vez que se conecta una placa con firmware antiguo a MicroBlocks 2.0 se pedirá que actualice el firmware:

Primera conexión firmware antiguo
Primera conexión firmware antiguo

Si intentas utilizar una placa con un firmware que no es compatible con la versión de MicroBlocks que estás utilizando, recibirás esta advertencia al intentar ejecutar el código:

Firmware no compatible
Firmware no compatible

Si se recibe esa advertencia, sólo hay que actualizar el firmware de la placa utilizando el comando "actualizar firmware de la placa" en el menú engranajes. Esto actualizará la placa con el firmware que coincida con la versión de MicroBlocks que se esté utilizando. Se puede utilizar la misma técnica para revertir el firmware y utilizar una versión anterior de MicroBlocks, si lo necesitamos.

Transición a la versión estable

Tras varias semanas de pruebas de MicroBlocks 2.0 como versión piloto, la versión estable también se actualizará a MicroBlocks 2.0.

Sin embargo, incluso después de eso, las versiones anteriores de MicroBlocks podrán descargarse utilizando el botón "Previous Versions" de la página de descargas:

Botón "Previous Versions"

La última versión estable de la versión antigua es la 1.2.100.

MicroBlocks BLE Extension

La extensión hace que la conexión a microcontroladores sea muy fácil. Hace todo el trabajo difícil por ti utilizando los bloques que contiene.

Métodos

Están disponibles los bloques para los siguientes métodos:

  • Connect

Bloque Connect
Bloque Connect

Conectar a MicroBlocks el dispositivo con el nombre indicado. Tenemos que importar la extensión "Bluetooth LE" y utilizar el bloque "BluetoothLE" () de esa extensión como primer parámetro de este bloque. El segundo parámetro es el nombre de la placa a la que desea conectarse, como "MicroBlocks XYZ", donde XYZ es el ID BLE de tres letras de la placa.

Parámetro Tipo
bleExtension componente
name texto
  • Disconnect

Bloque Disconnect
Bloque Disconnect

Se desconecta del dispositivo BluetoothLE actualmente conectado, si lo hubiera.

  • IsDeviceConnected

Bloque IsDeviceConnected
Bloque IsDeviceConnected

Devuelve el valor booleano 'true' si un dispositivo está conectado.

  • SendMessage

Bloque SendMessage
Bloque SendMessage

Envía el mensaje dado a MicroBlocks.

Parámetro Tipo
message texto

Eventos

Están disponibles los siguientes eventos:

  • ConnectionChanged

Bloque ConnectionChanged
Bloque ConnectionChanged

Este evento se ejecuta cuando se conecta o desconecta un dispositivo.

Parámetro Tipo
isConnected booleano
  • MicroBlocksMessageReceived

Bloque MicroBlocksMessageReceived
Bloque MicroBlocksMessageReceived

Este evento se ejecuta cuando se recibe un mensaje MicroBlocks.

Parámetro Tipo
isConnected texto

Ejemplos

Si no conocemos el BLE id de la placa que estamos utilizando, una forma sencilla de averiguarlo es dirigirnos a la categoría 'Entrada' de MicroBlocks. La placa tiene que estar conectada al IDE para mostrar el BLE id.

BLE id
BLE id

Enviar mensaje desde microcontrolador a una App

Seguimos trabajando con las extensiones:

  • MicroBlocks BLE Extension.
  • Tools Extension, de Pura Vida Apps según los términos y condiciones que aparecen en la web de la extensión:

Utilizo esta extensión para mantener la pantalla activa mientras el microcontrolador permanece conectado.

Captura de la web Pura Vida Apps
Captura de la web Pura Vida Apps

Traducción libre de esta captura:

Términos y Condiciones

  • ¡Diviértete y utiliza esta extensión en tus proyectos de App Inventor! ¡Pura Vida!
  • EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUIDAS, ENTRE OTRAS, LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN FIN DETERMINADO Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O LOS TITULARES DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, EXTRACONTRACTUAL O DE OTRO TIPO, QUE SURJA DE, O ESTÉ RELACIONADA CON EL SOFTWARE O EL USO U OTRAS OPERACIONES CON EL SOFTWARE.
  • Este es el único lugar autorizado para descargar esta extensión. No está permitido alojar esta extensión en otro lugar y ofrecerla para que otros la descarguen, ya sea en otro sitio web o market place o similar. La razón es que todo el mundo debería tener la oportunidad de donar algo en caso de que le guste mi trabajo. Se le permite proporcionar un enlace a este sitio, para que otros puedan descargar la extensión. Aquí encontrará siempre la versión más actualizada, incluyendo documentación y ejemplos de uso. Gracias por su comprensión.

Por las razones expresadas en estos "Términos y Condiciones" aquí solamente se facilita el enlace a la web del autor.

El diseño de la App tiene el aspecto de la imagen siguiente y bajo su título tenemos el enlace de descarga de Recibir_un_dato_desde_microncontrolador.aia.

App Recibir_un_dato_desde_microncontroladorApp Recibir_un_dato_desde_microncontrolador
App Recibir_un_dato_desde_microncontrolador
Descargar Recibir_un_dato_desde_microncontrolador.aia

Una vez escaneado el QR de AI Companion debemos ver la aplicación de la imagen, donde observamos que:

  • Nos avisa que no distingue mayúsculas y minúsculas.
  • Solicita el BLE id de la placa (ISJ en nuestro caso) para poder conectar.
  • El botón se usará para conectar y desconectar la App con la placa.
  • Inicialmente la etiqueta donde se refleja el dato recibido no contiene ningún texto.

Pantalla inicial
Pantalla inicial

Introducimos el BLE id y pulsamos en el botón "Conectar". El botón se pone de color verde y cambia su texto indicando que la conexión está establecida correctamente. Tmabién aparece la etiqueta que muestra el dato recibido.

Conexión establecida
Conexión establecida

Por otra parte el programa en MicroBlocks está enviado el valor de inclinación de la placa respecto al eje X cada 100ms.

Programa Recibir_un_dato_desde_microncontrolador.ubp
Programa Recibir_un_dato_desde_microncontrolador.ubp
Descargar Recibir_un_dato_desde_microncontrolador.ubp

Para que el programa esté en la placa necesitamos establecer conexión entre el IDE de MicroBlocks y la misma, pero es MUY IMPORTANTE que cuando finalicemos esta tarea desconectemos la placa del IDE o no podremos establecer la conexión desde la App. Recordemos que no están permitidas dos conexiones con la misma placa.

En la animación siguiente podemos observar el funcionamiento del ejemplo.

Funcionamiento de Recibir_un_dato_desde_microncontrolador
Funcionamiento de Recibir_un_dato_desde_microncontrolador

Recibir múltiples datos

Este ejemplo es una continuación del anterior "Enviar mensaje desde microcontrolador a una App" y por tanto seguimos trabajando con las extensiones:

  • MicroBlocks BLE Extension.
  • Tools Extension, de Pura Vida Apps según los términos y condiciones que aparecen en la web de la extensión vistos anteriormente.

El diseño de la App tiene el aspecto de la imagen siguiente y bajo su título tenemos el enlace de descarga de RecibirMultiplesDatos.aia.

App RecibirMultiplesDatosApp RecibirMultiplesDatos
App RecibirMultiplesDatos
Descargar RecibirMultiplesDatos.aia

La conexión con AI Companion y la placa micro:STEAMakers es exactamente la misma que en los ejemplos anteriores.

El programa en MicroBlocks está enviado el valor de inclinación de la placa respecto a los tres ejes cada 100ms.

Programa RecibirMultiplesDatos.ubp
Programa RecibirMultiplesDatos.ubp
Descargar RecibirMultiplesDatos.ubp

En la animación siguiente podemos observar el funcionamiento del ejemplo.

Funcionamiento de RecibirMultiplesDatos
Funcionamiento de RecibirMultiplesDatos

Recibir múltiples datos utilizando palabras clave

Otra forma de resolver el ejemplo anterior es utilizar palabras clave (keywords) para distinguir unos datos de otros.

Seguimos trabajando con las extensiones:

  • MicroBlocks BLE Extension.
  • Tools Extension, de Pura Vida Apps según los términos y condiciones que aparecen en la web de la extensión vistos anteriormente.

Utilizo esta extensión para mantener la pantalla activa mientras el microcontrolador permanece conectado.

El diseño de la App tiene el aspecto de la imagen siguiente y bajo su título tenemos el enlace de descarga de RecibirMultiplesDatosKeywords.aia.

App RecibirMultiplesDatosKeywordsApp RecibirMultiplesDatosKeywords
App RecibirMultiplesDatosKeywords
Descargar RecibirMultiplesDatosKeywords.aia

Aunque ya figura comentado en el programa, indicar que como carácter delimitador entre la clave y el valor del dato se utiliza el espacio en blanco y su valor decimal en Latín básico del listado de caracteres Unicode es 32 (U+0020).

La conexión con AI Companion y la placa micro:STEAMakers es exactamente la misma que en los ejemplos anteriores.

El programa en MicroBlocks está enviado el valor de inclinación de la placa respecto a los tres ejes cada 100ms.

Programa RecibirMultiplesDatosKeywords.ubp
Programa RecibirMultiplesDatosKeywords.ubp
Descargar RecibirMultiplesDatosKeywords.ubp

El funcionamiento es totalmente idéntico al del ejemplo anterior.

Beating Heart

Este ejemplo es el que aparece en MicroBlocks BLE Extension, extensión de App Inventor aportada a la comunidad MIT APP INVENTOR por Peter Mathijssen.

Su adaptación a micro:STEAMakers y a los ejemplos anteriores es la que vamos a desarrollar en este apartado. Partimos del ejemplo EstablecerConexionMejorado que cargamos y archivamos como Beating_Heart_microSM

Seguimos trabajando con las extensiones:

  • MicroBlocks BLE Extension.
  • Tools Extension, de Pura Vida Apps según los términos y condiciones que aparecen en la web de la extensión vistos anteriormente.

Utilizo esta extensión para mantener la pantalla activa mientras el microcontrolador permanece conectado.

El diseño de la App tiene el aspecto de la imagen siguiente y bajo su título tenemos el enlace de descarga de Beating_Heart_microSM.aia.

App Beating_Heart_microSMApp Beating_Heart_microSM
App Beating_Heart_microSM
Descargar Beating_Heart_microSM.aia

La conexión con AI Companion y la placa micro:STEAMakers es la misma que en los ejemplos anteriores.

El programa en MicroBlocks está recibiendo mensajes que se envian y el valor recibido en el último mensaje lo guarda en la variable wait, de forma que dicha variable tomará como valor el de la posición del deslizador de la App que como podemos comprobar varía entre 100 y 1000 y su posición inicial se sitúa en 500. Por defecto el programa también asigna dicho valor (500) a la variable, que en definitiva es el retardo entre las imágenes que se muestran, que ya podemos deducir que estará entre 100ms y 1000ms.

Programa Beating_Heart_microSM.ubp
Programa Beating_Heart_microSM.ubp
Descargar Beating_Heart_microSM.ubp

En la animación siguiente podemos observar el funcionamiento del ejemplo. Como se observa el programa está grabado en la placa y como los latidos están dentro de un bucle infinito, el corazón ya está latiendo.

Funcionamiento de Beating_Heart_microSM
Funcionamiento de Beating_Heart_microSM

Como se observa al final, cuando no hay conexión los cambios en la pantalla no tienen efecto en la placa. Esto se debe al bloque "call TaifunTools1.DontKeepScreenOn".

LED editor micro:STEAMakers

Este ejemplo creado y documentado por Peter Mathijssen tiene su historial en el servidor MicroBlocks en Discord en el hilo #appinventor. Utilizaré aquí la versión que tan amablemente Peter me envió a través de esta misma plataforma.

La documentación del ejemplo está en LED editor using MicroBlocks extension.

Seguimos trabajando con las extensiones:

  • MicroBlocks BLE Extension.
  • Tools Extension, de Pura Vida Apps según los términos y condiciones que aparecen en la web de la extensión vistos anteriormente.

Utilizo esta extensión para mantener la pantalla activa mientras el microcontrolador permanece conectado.

El diseño de la App tiene el aspecto de la imagen siguiente y bajo su título tenemos el enlace de descarga de led_editor_v1.aia.

App led_editor_v1!
Descargar led_editor_v1.aia

Dada la extensión del software se pone por partes para facilitar su visualización.

App led_editor_v1. Conexión/Desconexión
App led_editor_v1. Conexión/Desconexión

App led_editor_v1. Variables
App led_editor_v1. Variables

App led_editor_v1. Botonera
App led_editor_v1. Botonera

Any Component Blocks

Este último evento es un bloque del tipo “Cualquier componente (Any Component)” propio de MIT App Inventor que resulta especialmente útil cuando queremos realizar una misma operación en muchos componentes diferentes sin necesidad de copiar y pegar cada bloque las veces que sea necesario. La idea es sustituir diferentes componentes por un solo componente, lo que se consigue con los bloques "cualquier componente".

Los bloques de componentes tienen eventos, métodos y propiedades, y cada uno de ellos tiene sus correspondientes bloques "cualquier componente".

Se puede cambiar entre un bloque para un componente específico y el bloque de cualquier componente equivalente a través de los elementos de menú "Make Generic" en el menú contextual (clic derecho) de un bloque.

En el enlace del título tenemos toda la información al respecto.

La conexión con AI Companion y la placa micro:STEAMakers se realiza de la manera habitual.

En el programa en MicroBlocks, estando conectada la placa, se muestra al inicio el "BLE id" de la placa y se crea una lista con los mismos colores que la aplicación.

La recepción de mensajes se hace utilizando el separador "," (coma) para dividir el mensaje en sus tres partes, que son los índices de la fila, la columna y el color elegido. La coordenada (1,1) es el LED superior izquierdo y los colores se numeran de izquierda a derecha del 1 al 8.

Programa led_editor_v1.ubp
Programa led_editor_v1.ubp
Descargar led_editor_v1.ubp

En la animación siguiente podemos observar el funcionamiento del ejemplo. Como se observa el programa está grabado en la placa sin el bloque que muestra los valores del mensaje recibido desplazándose.

Funcionamiento de led_editor_v1
Funcionamiento de led_editor_v1

Al final meter lo de la Extensión, descargandola y como obtenerla