# Software

Las placas electrónicas educativas (Echidna, Micro:bit, Arduino, ESP32 ...) se programan mediante **varias opciones** :

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="569" src="https://docs.google.com/presentation/d/e/2PACX-1vQb1Dv9wN9QK-F6V7yvwDoyzquqwWlGvIyVJr83Yk56kAoYD7bXLnYDm_tCQkeAgg/pubembed?start=false&loop=false&delayms=3000" width="960"></iframe>

#### <span style="color: #169179;">**OPCIÓN LENGUAJE GRÁFICO POR BLOQUES**</span>

Recomendado para primaria. Tenemos muchas posibilidades de lenguajes gráficos. Destacamos dos:

- **ECHIDNASCRATCH**
    - **Específico para Echidna e integra la IA [CURSO DE ECHIDNA](https://libros.catedu.es/books/echidna)**
- **MBLOCK**  Basado en Scratch. Aunque es un programa especializado en el robot comercial mBot, (basado en Arduino), el mismo programa está adaptado para programar Arduino. 
    - **[CURSO ARDUINO CON MBLOCK](https://libros.catedu.es/books/programa-arduino-con-mblock-scratch)** se utiliza Arduino y placa Protoboard
    - **[CURSO DE ECHIDNA](https://libros.catedu.es/books/echidna)** se utiliza la Shield Echidnam y EchidnaBlack
    - [**CURSO DE MBOT** ](https://libros.catedu.es/books/robotica-educativa-con-mbot)se utiliza el robot mBot
- **STEAMAKERBLOCKS (antes ARDUINOBLOCKS)** se trabaja online, muy visual y muy amigable. Está adaptado tanto para trabajar tanto Arduino como muchas placas controladoras y en el aula. Podemos verlo en los siguientes cursos:  
    
    - **[CURSO ROVER CON ARDUINO ](https://libros.catedu.es/books/rover-marciano-con-arduinoblocks-e-internet-de-las-cosas-iot)**aunque no se utiliza un Arduino, sino un NodeMCU pero la programación es exactamente igual
    - **[CURSO DE ARDUINO CON ARDUINOBLOCKS](https://libros.catedu.es/books/arduino-con-arduinoblocks)** donde se utiliza el Arduino con una placa protoboard
    - [CURSO ARDUINOBLOCKS EN EL AULA ](https://libros.catedu.es/books/arduino-en-el-aula) donde se utiliza la Shield TDR-STEAM
    - [**CURSO ESP32 EN EL AULA**](https://libros.catedu.es/books/esp32-en-el-aula) donde también utiliza la Shiedl TDR Steam pero la placa no es un Arduino, sino ESP32, la programación es exactamente igual.
- **Microbloks** [https://microblocks.fun/](https://microblocks.fun/) placas: Arduino, Microbit, ESP32, RaspberryPico, .... [ver minitutorial](https://fgcoca.github.io/Guia-de-trabajo-para-microbit/guias/mblocks/)

Otros softwares para programar con bloques

- **Snap4Arduino** [https://snap4arduino.rocks/run/](https://snap4arduino.rocks/run/) Online, libre... ver [compartiva vs mBlock](https://libros.catedu.es/books/echidna/page/que-lenguaje-grafico-es-mejor-para-echidna)
- **S4A** [https://s4a.cat/](https://s4a.cat/)

<p class="callout success"><span style="text-decoration: underline;">**EN VIVO ¿Qué es eso?** </span>  
Existe una posibilidad de utilizar la placa "en vivo" frente a "cargar" el programa en la placa.  
Es decir, interactuando con el ordenador. El programa está en el PC. En la placa hay un **firmware** que le dice que este a las órdenes del PC. De esta manera podemos por ejemplo:  
 - <span style="text-decoration: underline;">Enviar órdenes desde el ordenador a la placa.</span>  
 Por ejemplo que al pulsar la tecla espacio que se encienda el led D13   
 - <span style="text-decoration: underline;">Enviar información desde la placa al ordenador</span>  
 Por ejemplo que muestre por pantalla nos muestre la cantidad de luz, que registra el sensor LDR, etc...  
Que nosotros sepamos, estos programas permiten la programación en vivo :  
 - **mBlock** placas: Arduino, Microbit, Raspberry Pi, ... robots de Makeblock: mBot, Cyberpi...  
 -**EchidnaScratch** [CURSO DE ECHIDNA](https://libros.catedu.es/books/echidna)  
 -**Microblocks**   
**VENTAJAS** LA PROGRAMACIÓN EN VIVO PERMITE MUCHO JUEGO Y POSIBILIDADES A LA HORA DE ELABORAR PROYECTOS  
**INCONVENIENTES**: Necesitas el ordenador encendido y conectado al robot.</p>

<p class="callout success"><span style="text-decoration: underline;">**TAMBIÉN ES EN VIVO PERO ....**</span>  
Hay otros softwares que técnicamente trabajan en vivo, es decir, que el programa se ejecuta desde el ordenador, no se ejecuta en la placa, son :  
**- Snap4Arduino** para placas Arduino  
- **Picobriks** blocks para Picobrick board  
**Pero no permiten trabajar utilizando los elementos del ordenador** (teclado, webcam, pantalla, sprite o objetos,,,)</p>

<p class="callout warning"><span style="color: rgb(0, 0, 0);">Es **importante** que entiendas que para trabajar en vivo, la placa tiene que tener cargado un "**firmware**" para que interactúe con el ordenador.</span></p>

<p class="callout info"><span style="color: rgb(0, 0, 0);">**P: ¿Qué es eso de "firmware"?**  
R: No es más que un software que se graba en los chips de la placa.  
**P ¿Y por qué se llama así, y no se llama software o programa y en paz?**  
R: Digamos que como se graba en los chips, es un medio camino entre software y hardware, para diferenciarlo del software habitual.</span></p>

<p class="callout success"><span style="color: rgb(0, 0, 0);"><span style="text-decoration: underline;">**EN CARGA ¿Qué es eso?** </span>  
Simplemente el programa que estas haciendo **se carga** en la placa  
VENTAJAS: Eres independiente del ordenador, tu robot funciona independiente  
DESVENTAJAS Pierdes todas las posibilidades de utilizar los recursos de un ordenador, teclado, pantalla, webcam, altavoces...  
</span></p>

<p class="callout warning"><span style="color: rgb(0, 0, 0);">Es **importante** que si **cargas** tu programa en la placa, **pierdes** lo que había antes  
Es decir, si quieres volver a trabajar EN VIVO tienes que cargar el firmware correspondiente.</span></p>

#### <span style="color: #169179;">**OPCIÓN LENGUAJE POR CÓDIGO**</span>

Recomendable a partir de secundaria.

##### <span style="text-decoration: underline;">LENGUAJE POR CÓDIGO ARDUINO IDE</span>

Es un lenguaje basado en Wiring y permite la programación del Arduino en un entorno de desarrollo (basado en Processing). El programa se llama **ARDUINO IDE** y se puede descargar desde la página oficial de Arduino: [https://www.arduino.cc/en/software](https://www.arduino.cc/en/software).

<p class="callout info">Hay otra posibilidad que es utilizarlo online, con la ventaja de tener tus proyectos "en la nube" y no depender del equipo. OJO, TIENES QUE TENER INSTALADO EL SOFTWARE **CREATE AGENT**   
[https://create.arduino.cc/getting-started/plugin/welcome](https://create.arduino.cc/getting-started/plugin/welcome)</p>

[![arduinoide.png](https://libros.catedu.es/uploads/images/gallery/2022-07/scaled-1680-/arduinoide.png)](https://libros.catedu.es/uploads/images/gallery/2022-07/arduinoide.png)

En los cursos de CATEDU se ha utilizado el lenguaje por código empezando desde cero en:

- **[CURSO ARDUINO CON CÓDIGO](https://libros.catedu.es/books/programa-arduino-mediante-codigo)** donde se trabaja con el Arduino y con diferentes sensores y actuadores, con o sin placa Shield Edubásica.
- **[CURSO DE DOMOTICA CON ARDUINO](https://libros.catedu.es/books/domotica-con-arduino)**[ ](https://libros.catedu.es/books/domotica-con-arduino)donde se realiza una maqueta de una casa controlada con domótica. También el curso ofrece la versión de hacer la misma maqueta utilizando lenguaje gráfico por bloques.

Recomendamos estas hojas resumen si vas a trabajar con código:

- En Español: [enlaceDrive](https://drive.google.com/file/d/10XNk_plAfEbR2kl8ug_1onh93qLhzcP2/view?usp=share_link), [enlaceGithub](https://github.com/MicroCodeSV/Acordeon-arduino)
- En Inglés: [enlaceDrive](https://drive.google.com/file/d/10XHpM4U7I_h76vtV0qnivep-cCkEFg1y/view?usp=share_link), [enlaceGithub, ](https://github.com/liffiton/Arduino-Cheat-Sheet)[enlaceSpakrfun](https://dlnmh9ip6v2uc.cloudfront.net/learn/materials/8/Arduino_Cheat_Sheet.pdf)

##### <span style="text-decoration: underline;">LENGUAJE POR CÓDIGO PYTHON</span>

Es un lenguaje más amigable que ArduinoIDE y tiene muchos campos de aplicación aparte de la robótica

- Arduino tiene su propia versión para trabajar con sus placas compatibles: **Arduino Lab for Micropython**
    - [Ver curso Arduino ALVIK](https://libros.catedu.es/books/arduino-alvik/page/instalar-micropython)
- Un compilador universal **Thonny**
    - [Ver curso Pico-briks](https://libros.catedu.es/books/pico-bricks/page/instalacion-de-micropython)

#### <span style="color: #169179;">**VENTAJAS E INCONVENIENTES   
LENGUAJE GRÁFICO POR BLOQUES vs CÓDIGO**</span>

El lenguaje gráfico por bloques es un lenguaje **sencillo de utilizar**, nos evita tener en cuenta muchas **librerías** y **cálculos.**

<p class="callout success">Otra ventaja, es que el lenguaje por bloques es el único que permite programación "en vivo"</p>

Por ejemplo, la instrucción leer valor distancia el sensor ultrasonidos, mediante programación por bloques es

[![leer-us.jpg](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/leer-us.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-10/leer-us.jpg)

mientras que en código es

```
double distancia;

double fnc_ultrasonic_distance(int _t, int _e){
	unsigned long dur=0;
	digitalWrite(_t, LOW);
	delayMicroseconds(5);
	digitalWrite(_t, HIGH);
	delayMicroseconds(10);
	digitalWrite(_t, LOW);
	dur = pulseIn(_e, HIGH, 18000);  
    // devuelve cuanto tarda el pulso alto en microseg; 18000 es el tiempo a esperar limite
	if(dur==0)return 999.0;
	return (dur/57);
    // la velocidad del sonido es 344m/s = 34400 cm/seg = 0,0344 cm/microseg
   // como v=e/t luego e = v*t y como cuenta la ida y la vuelta distancia = v*t/2
   // luego distancia = 0,0344/2 * dur = dur/57 
}

void setup()
{
  	pinMode(6, OUTPUT);
	pinMode(5, INPUT);

}


void loop()
{

  	distancia = fnc_ultrasonic_distance(6,5);

}
```

Como se puede ver en **código**, tiene que calcular la distancia haciendo cálculos del tiempo de rebote del eco, mientras que el **gráfico** es sumamente sencillo y se centra en el objetivo del algoritmo a crear, no en lo accesorio. Esto hace que un lenguaje gráfico por bloques se puede aplicar **desde los 8 años**.

Por otra parte, el lenguaje **código tiene todo el potencial,** es decir, no todo está en los lenguajes gráficos. Si se quiere cosas más avanzadas, hay que recurrir al código.

<p class="callout warning">Un lenguaje **gráfico** se convierte en lenguaje **código**, pero **al revés no se puede,** debido a que el código es más depurado y no tiene la información necesaria para volver a su origen en bloques, ya lo has visto con el anterior ejemplo, el código tiene más información.</p>

<p class="callout info">**¿No te lo crees?** Haz la prueba, métete en [https://www.tinkercad.com/](https://www.tinkercad.com/) crea un programa con bloques, dale a la pestaña de código y te aparecerá una advertencia que perderás el programa con bloques ! **no puedes volver atrás**!  
  
Curiosamente, tiene una opción *bloques+código* que traduce cada bloque con un código, es decir, traduce cada bloque sin perder información, sólo de esa manera se puede pasar de bloques a código y viceversa.  
  
[![2024-09-23 10_51_49-Circuit design PIN0-CORE-CREW - Tinkercad.png](https://libros.catedu.es/uploads/images/gallery/2024-09/scaled-1680-/2024-09-23-10-51-49-circuit-design-pin0-core-crew-tinkercad.png)](https://libros.catedu.es/uploads/images/gallery/2024-09/2024-09-23-10-51-49-circuit-design-pin0-core-crew-tinkercad.png)  
  
Hay [herramientas para pasar de bloques a código](https://code.intef.es/prop_didacticas/edublocks-de-bloques-a-python/) pero no al revés</p>

**[![bloques-codigo.png](https://libros.catedu.es/uploads/images/gallery/2022-12/scaled-1680-/bloques-codigo.png)](https://libros.catedu.es/uploads/images/gallery/2022-12/bloques-codigo.png)** *Imagen Federico Coca [Notas sobre ESP32 STEAMakers](https://fgcoca.github.io/ESP32-STEAMakers/) CC-BY-SA*

<p class="callout warning">El lenguaje **código** se traduce en lenguaje **máquina** (ceros y unos) entendible para el microprocesador, **pero al revés no se puede**.</p>

En[ este vídeo](https://www.youtube.com/watch?v=kVt8U6twfGI), en mi opinión se olvida de mBlock, Snap4Arduino, S4A pero puedes ver un vistazo de los diferentes editores

#### **<span style="color: #169179;">OPCIÓN SIMULACIÓN </span>**

Incluimos dentro del apartado de Software los diferentes programas que hay para simular placas electrónicas como Arduino, ESP32, Micro:bit etc...

##### **Tinkercad**

Esta herramienta [https://www.tinkercad.com](https://www.tinkercad.com/) aparece en el **[Curso Arduino con código](https://libros.catedu.es/books/programa-arduino-mediante-codigo)**  en la práctica [Comunicación entre dos Arduinos](https://libros.catedu.es/books/programa-arduino-mediante-codigo/page/42-arduino-arduino), pero también es una plataforma que sirve para hacer los diseños de elementos 3D, ver curso [**Impresión 3D con Tinkercad**](https://libros.catedu.es/books/impresion-basica-en-3d-con-tinkercad-y-cura)

Tiene la ventaja que es aplicación **online**, muy **visual** y buscan un reflejo de la práctica **real,** además de estar la herramienta **adaptada al aula** (gestión de alumnos y proyectos). Como desventajas podemos decir que no tiene mucha variedad de componentes electrónicos y la simulación es algo lenta.

<iframe allowfullscreen="allowfullscreen" data-ruffle-polyfilled="" height="314" id="bkmrk--9" src="https://www.youtube.com/embed/pXEv0wxW9Jo?rel=0" width="560"></iframe>

Además permite embeber, **pruébalo !!!** 😍😍😍 Pulsa **Iniciar simulación** y luego pulsa el **botón A** de cualquiera de los dos micro:bits

<iframe frameborder="0" height="453" marginheight="0" marginwidth="0" scrolling="no" src="https://www.tinkercad.com/embed/8vBL2E8wWDx?editbtn=1" width="725"></iframe>

##### **Wokwi**

Si Tinkercad se queda corto, puedes probar esta plataforma [https://wokwi.com/](https://wokwi.com/) con muchas posibilidades. Es **online** y puede trabajar con **multitud de placas**: ArduinoUno, ESP32, Raspberry,,,,  
Como única desventaja que encontramos, es que echamos de menos la realidad de Tinkercad, por ejemplo no puedes poner una placa protoboard para realizar las conexiones, pero a cambio se gana simplicidad de cableado.

[![2022-12-05 10_14_42-Knob.ino - Wokwi Arduino and ESP32 Simulator.png](https://libros.catedu.es/uploads/images/gallery/2022-12/scaled-1680-/2022-12-05-10-14-42-knob-ino-wokwi-arduino-and-esp32-simulator.png)](https://libros.catedu.es/uploads/images/gallery/2022-12/2022-12-05-10-14-42-knob-ino-wokwi-arduino-and-esp32-simulator.png)

##### **UnoArduSim**

Es una **aplicación local.** [**UnoArduSim** ](https://www.sites.google.com/site/unoardusim/)además es una aplicación portable fácil de instalar y con los elementos de leds, motores servos ya preparados, ideal para ejemplos sencillos y para examinar señales y no depender de Internet, pero no es tan versátil.

<iframe allowfullscreen="allowfullscreen" data-ruffle-polyfilled="" height="314" id="bkmrk--10" src="https://www.youtube.com/embed/WLJ_l4uGjXg?rel=0" width="560"></iframe>

##### <span style="color: rgb(0, 0, 0);">**SIMULIDE**</span>

En [https://simulide.com/](https://simulide.com/) podemos encontrar un programa local de software libre genérico para electrónica, incluido Arduino. En esta captura se puede ver uno de los ejemplos que incorpora el programa:  
[![2025-02-07 16_09_42-DesktopWindowXamlSource.png](https://libros.catedu.es/uploads/images/gallery/2025-02/scaled-1680-/2025-02-07-16-09-42-desktopwindowxamlsource.png)](https://libros.catedu.es/uploads/images/gallery/2025-02/2025-02-07-16-09-42-desktopwindowxamlsource.png)

##### <span style="color: rgb(22, 145, 121);">**OPCIÓN SÓLO DIBUJAR**</span>

- **[TinkerCad ](https://www.tinkercad.com)**es un buen programa para dibujar los planos 
    - ➕permite también la simulación
    - ➕ permite embeber y compartir
    - ➖ no tiene muchos componentes
- [**SimulIDE** ](https://simulide.com/)es software libre. Es un programa portable. 
    - ➕ Tiene muchos componentes
    - ➕permite también la simulación
    - ➖ le faltan algunos sensores, pero van incorporando
- [**Fritzing** ](https://fritzing.org/)es un clásico. Es un programa portable. 
    - ➕ Tiene muchos componentes
    - ➖ no es gratis, hay que pagar 8€
- [**Circuit canvas**](https://circuitcanvas.com/)
    - ➕ puede compartir [por ejemplo](https://circuitcanvas.com/p/pfph7cgti43vx2badqo?canvas=schematic)
    - ➕ tiene buenos tutoriales sobre electrónica
    - ➖ todo en inglés