Qué es eBlock

eBlock es una aplicación Open Source basada en Scratch que permite programar por bloques un gran número de dispositivos (no sólo Arduino). 
Está desarrollado a partir del código fuente de mBlock al que se le han aplicado varias mejoras importantes.

https://github.com/distintiva/eBlock

Por qué eBlock

El fabricante de robótica chino Makeblock Co. Ltd  ha descontinuado el soporte de la versión 3 de mBlock y la siguiente versión de su software ya no es Open Source

A su vez hay una  gran cantidad de usuarios que todavía preferían seguir usando mBlock v3 y se sienten más cómodos con el programa dado que prefieren seguir viendo su código convertido a C++ (el que usa Arduino) en lugar de pasarse a Python

Por ello  hemos decidido seguir con el soporte de este gran software, aplicando mejoras propuestas por los usuario  y sobre todo que continúe siendo Open Source.

Más dispositivos

eBlock ya no es dependiente de ninguna marca de robots, ya que permite programar cualquier tipo de dispositivo aunque no esté basado en Arduino como por ejemplo ( BBC micro:bit,  SAMD51, ESP8266, ESP32, STM32 ...) y otros nuevos que cualquier usuario puede configurar.

Descargar

eBlock no necesita instalación y ocupa 27Mb ,  sólo tienes que descargarlo desde el siguiente enlace y descomprimirlo en tu PC

eBlock-win.zip

Listado de nuevas características

Interfaz rediseñada

Apariencia mejorada y más atractiva


Con colores más actuales, reubicación de componentes y accesos directos a funciones comunes como el acceso a la visualización del código.

Cambio en el color de los bloques

Hacen el código más legible y estéticamente más bonito.

Nueva ventana de código fuente

Se ha rediseñado la venta del código fuente con un tema oscuro y resaltado de sintaxis más moderno, que a también te permite editar el código C++ antes de subirlo a la placa

Se ha cambiado la posición de la ventana de consola para que se pueda ver más código fuente

Editar el código C++ in-situ

El nuevo visor de código fuente también es un editor ya que permite hacer pequeños cambios en el código generado en C++ antes de subirlo a la placa.
Creemos que es una buena forma de que nuestros futuros programadores quiten el miedo a programar en código, y de esta forma podrán hacer modificaciones al mismo y ver qué pasa.

Nuevo bloque de matriz de leds


Permite usar matrices de led de otros tamaños ( el siguiente ejemplo muestra el editor de 5x5 para usarlo con la placa micro:bit)


Y también se ha ampliado la previsualización del bloque de matriz y se han separado sus píxeles mejorando su comprensión.

Bloques de extensiones categorizados

Ya no verás todos los bloques de tu robot dentro de la categoría “Robots” que dificultaba mucho la localización del los mismos. Ahora cada bloque reside en su categoría correspondiente ( por ejemplo los relativos a los motores en categoría de movimiento)

Ésto ayuda al usuario encontrar los bloques de cada extensión dentro de las categorías principales de Scratch

Portable

Todos los archivos de la aplicación residen en el mismo directorio por lo que puedes almacenarla en un pendrive y transportarla con tu configuración preferida

Menor tamaño

eBlock ocupa menos de 30 Mb  comprimido  ( frente a los 125 Mb de su antecesor )

Carga más rápida y correción de bugs

Se ha optimizado mucho código fuente para que su carga inicial se más rápida, más estable y se han eliminado muchos bugs.

Exportar los bloques a imagen

Permite exportar los bloques de tu programa de scratch a imagen PNG, por si quieres compartir tu programa o por si quieres adjuntarlo a alguna documentación o página web.

Variables tipo Texto

Permite usar variables de tipo texto y éstas son traducidas a su código correspondiente en c++,  

Listas (arrays)

Permite usar listas de datos tanto numéricos como de tipo texto y también son traducidas a c++ para que puedas ampliar las posibilidades de tus robots

Melodías en formato RTTTL

RTTTL es un formato de interpretación de melodías en modo texto que permite crear música más variada y de forma sencilla.  

Seguro que todo el mundo se acuerda de las melodías que se podían descargar en los antiguos teléfonos Nokia.

Si buscas en internet podrás encontrar casi cualquier melodía en formato RTTTL que son del siguiente estilo.

Imperial:d=4, o=5, b=100:e, e, e, 8c, 16p, 16g, e, 8c, 16p, 16g, e, p, b, b, b, 8c6, 16p, 16g, d#, 8c, 16p, 16g, e, 8p

Ahora podrás usar este tipo de melodías usando un único bloque  copiando y pegando cualquier melodía RTTTL que encuentres en internet.

En segundo plano


Pudiendo ejecutar cualquier otro código mientras suena la melodía de fondo

Modo espera

Con tan sólo añadir un bloque más, nuestro código se ejecutará una vez haya sonado la música por completo

Traducción directa de eventos a código fuente

Permite usar bloques como “cuando el botón del mBot es pulsado” y que se traduzca a su código correspondiente en C++

También conseguimos que nuestro código sea más fácil de desarrollar, y ya NO es imprescindible usar el bloque “Arduino program” para que nuestro código sea traducido a c++,  como ejemplo tenemos el siguiente código para la placa Echidna Shield

Personalizar eBlock

eBlock trata de ser lo más abierto y customizable posible pudiendo modificar ( añadir/ o eliminar) casi cada aspecto de la aplicación para que puedas configurarlo a tu gusto.

A demás de poder añadir extensiones, también podrás añadir o modificar la lista de dispositivos que quieres que se muestre.

Con eBlock puedes programar casi cualquier dispositivo existente,  no sólo Arduino también podrás programar placas BBC micro:bit,  ESP8266, ESP32, STM32, SAMD51, etc ...

Y por cada dispositivo podrás personalizar:

  • Uno o más firmware para cargar
  • El driver que el usuario podrá instalar
  • Ayuda integrada en la aplicación
  • Plantillas de código fuente en C/C++ donde se traducirán los bloques
  • Definición de los pines digitales y analógicos 

Modificar la lista de dispositivos a mostrar

Los dispositivos se encuentran dentro del directorio eBlock/resources/devices   


Si sólo quisiéramos que eBlock nos mostrara los diferentes tipos de placas Arduino  bastaría con eliminar el resto de dispositivos y eBlock cargaría sólo los existentes.

Crear nuevos dispositivos

Como se ve en la sección anterior,  cada dispositivo consta de una carpeta donde reside su configuración básica,  el archivo mínimo que se necesita para crear un nuevo dispositivo es  device.json

Dentro del directorio eBlock/resources/devices  creamos una carpeta con el nombre del nuevo dispositivo/robot que queramos añadir

Crear un archivo device.json

Este archivo tiene la siguiente estructura y lo emplazaremos dentro de la carpeta que hemos creado para este dispositivo:

{
 "label": "Makeblock - mBot Basic [mCore]", 
"version" : "1.0" ,
"fqbn": "arduino:avr:uno",
"hex":["mbot_reset_default_program.hex", "mbot_firmware.hex" ],
"driver": {"windows":"driver_ch340_arduino.exe", "mac":"", "linux":""},

"digital_pins":[0,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
"analog_pins": ["A0","A1", "A2", "A3", "A4", "A5"]
}
  • label: es el nombre que aparecerá en el menú de dispositivos
  • version: la versión de la configuración del dispositivo
  • fqbn: Fully Qualified Board Name, le dice al compilador integrado  arduino-cli  de qué plataforma y placa se trata
  • hex: proporciona un listado de firmwares o programas por defecto que el usuario puede cargar en su placa
  • driver: Si este dispositivo requiere de un driver para que el usuario pueda instalarlo desde el propio eBlock
  • digital_pins: Se usarán este listado como parámetros de ciertos bloques que necesiten acceder a los pines digitales
  • analog_pins: Se usarán este listado como parámetros de ciertos bloques que necesiten acceder a los pines analógicos

Bloques personalizados

Cada dispositivo puede tener sus propios bloques, funciona como el sistema de extensiones de mBlock pero son bloques únicos de este dispositivo.

Para ello podemos crear los archivos  (opcionales) :

blocks.json: Donde se define cada uno de los bloques y su correspondiente traducción a código C++
blocks.js:   Donde están las funciones en javascript para tratar la comunicación con el firmware del dispositivo ( en caso de que lo tuviera)

Plantilla de código

Todos los bloques son traducidos a código C++ creando un archivo compilable por el compilador de Arduino-cli,  pero si queremos que el código fuente de nuestro dispositivo se genere con otros includes, o queremos insertar alguna función específica entonces tendremos que crear un archivo llamado  template.c dentro del directorio de configuración.

Un ejemplo de template.c del dispositivo Echidna Shield

#include "eblock.h"
//include

//define
//serialParser
void setup(){
  Serial.begin(9600);
  //setup
}

void loop(){
//serialParserCall
//loop
   _loop();
}

void _loop(){
//_loop
}

//function

void echidna_led(uint8_t pin, uint8_t state ){
    if(pin==0){ //ALL pins
        e_pin_set(11,state);
        e_pin_set(12,state);
        e_pin_set(13,state);
     }else{
        e_pin_set(pin,state);
    };
}

void register_callback( uint8_t event,   void (*in_main_func)()  ){
}

void _delay(float seconds){
long endTime = millis() + seconds * 1000;
while(millis() < endTime)_loop();
}

as

Archivo de ayuda

eBlock permite mostrar una ventana de ayuda de cada dispositivo,  para ello basta con crear un archivo  README.md dentro del directorio de configuración ( en formato markdown )  y eBlock mostrará un icono al lado del dispositivo para poder abrir una ventana con el texto de ayuda que especifiquemos en este archivo