Archivo de la etiqueta: IDE

Programación Básica en Python

Introducción a Python

Python es un lenguaje interpretado, es decir, no requiere del proceso de escribir / compilar / volcar. Simplemente escribir la instrucción y listo el ordenador la “interpreta” o sea ejecuta sobre la marcha sin más complicación.

Python también es:

Esto hace que los lenguajes interpretados sean más fáciles de aprender porque nos parecen más naturales, y aunque el programa corre más lento que en los compilados, pero con la potencia actual o es tan importante.

Python no es un lenguaje diseñado para ser fácil comprometiendo su potencia. Muy al contrario la potencia y capacidad de cálculo que muestra suelen sorprender a la gente acostumbrada a otros lenguajes.

Para quienes vengáis de Arduino, C++ es un lenguaje compilado, esto significa que el compilador lee lo escrito en una primera pasada y después compila, es decir traduce a un lenguaje propio del micro de Arduino qué es lo que se vuelca y ejecuta la placa que usemos.

Hay dos versiones de Python 2 y 3, pero la versión 2 ya no tienes soporte desde el 1 de enero de 2020, aunque en Raspbian disponemos de las dos versiones. El inconveniente es que hay librerías que aún se mantienen en Python 2.

Para iniciar python se puede hacer desde consola:

  • python
  • python3

O usar el entorno gráfico con IDLE. IDLE significa Integrated DeveLopment Environment, o Integrated Development and Learning Environment.

Para instalarlo ejecutar: sudo apt-get install idle3

Dentro de la consola ya es posible ejecutar comandos.

Otra opción es usar el Thonny Python IDE incluido en Raspbian: https://thonny.org/

Práctica: Ejecutar los comandos:

  • 3.8 + 7
  • 2 * (3+5) / 4
  • “Hola.”
  • x=3
  • H=”Buenos dias”
  • print(x)
  • print(h)
  • print(H)
  • print(x,H)
  • 123 ** 1234

Python puede con grandes números mientras le quede memoria RAM, pero tu Raspberry puede quedarse un tanto bloqueada mientras calcula.

El resumen es que Python tiene una precisión ilimitadamente grande en los enteros mientras tenga recursos disponibles, un detalle sorprendente para cualquiera que este acostumbrado a programar en otros lenguajes, y una de las razones por las que Python se ha convertido en lenguaje de facto para la ciencia y especialmente para la investigaciones numéricas.

Práctica: crear un fichero llamado hello.py que saque por pantalla el texto “Hola Mundo” desde consola conectado por ssh y ejecutarlo.

Más información: Introducción a Python.

Variables y Tipos de Datos en Python

Una variable es algo parecido a un contenedor o cajón con un nombre. Una cosa es el nombre del cajón y otra su contenido y conviene entender desde ya la diferencia.

Las variables pueden tomar distintos valores e ir cambiandolo en función del programa, de la misma manera que un cajón puede ir variando su contenido sin que se mueva de sitio.

En Python no es necesario definir las variables antes de usarlas, a diferencia de C y similares. Basta con que la declares asignándole un valor.

Por ejemplo escribe directamente:

  • base = 86
  • iva = base * 0.21
  • total = base + iva
  • print (total)
  • print(base, iva, total)
  • base = input (“Dame el precio del artículo, por favor : “)
  • print(base + base * 0.21)
  • type(base)
  • print (int(base) + int(base) * 0.21)
  • iva = float(base) * 0.21
  • print (int(base) +iva)

Práctica: Hacer un programa llamado iva.py y que pida el valor del articulo y devuelva el valor con iva.

Más información: Variables y tipos en Python.

En Python existen 4 tipos diferentes de variables numéricas:

  • int Número entero con precisión fija (ℤ).
  • long Número entero en caso de sobrepasar el tamaño de un int.
  • float Número en coma flotante de doble precisión (ℝ).
  • complex Número complejo (parte real + j parte imaginaria) (ℂ)

Una función muy útil, que sirve para conocer el tipo de una variable es: type()

El tipo booleano es un tipo de variable que sólo puede contener dos valores: True y False.

Se definen como caracteres entre comillas simples ‘ o dobles “.

Tipo listas

Se definen poniendo el contenido de la lista entre corchetes, separando cada uno de los elementos mediante una coma. Cada posición de la lista puede contener elementos de distinto tipo. Además, las listas son mutables, es decir, sus elementos pueden ser modificados. En Python los elementos de una lista se numeran desde 0 hasta longitud−1.Hay numerosas funciones que pueden aplicarse a una lista.

Para acceder al elemento de una lista se pone el nombre de la lista y a continuación el índice al que queremos acceder entre corchetes(si ponemos el índice con signo negativo empezará por el final de la lista). Para acceder a un rango dentro de una lista tenemos diferentes opciones:

  • Desde el inicio tomar a elementos (no incluye a):
    lista[:a]
  • Desde la posición a (incluida) tomar todos los elementos hasta el final
    lista[a:]
  • Tomar los elementos desde a hasta b (sin incluir b)
    lista[a:b]

Las listas tienen asociadas una serie de métodos que permiten una gran variedad de operaciones sobre ellas:

  • .append(), añade un elemento al final de la lista.
  • .insert(), se usa para insertar un elemento en el índice asignado.
  • .pop(), elimina y devuelve el valor en la posición del índice asignado.
  • .reverse(), reordena la lista de forma reversa.
  • .sort(), reordena la lista de forma ascendente.

Más en listas: https://docs.python.org/3/tutorial/datastructures.html#more-on-lists

Ejercicio: probar estos ejemplos de listas 

Tipo tuplas

Las tuplas son similares a las listas, se definen con paréntesis en vez de corchetes. Tienen la peculiaridad de ser inmutables.

Tipo diccionarios

Los diccionarios definen una relación uno a uno entre claves y valores y son mutables. Se definen colocando una lista separada por comas de pares clave:valor. Una vez definido, podemos acceder al valor asociado a una clave buscando por la clave. Además, podemos buscar si una determinada clave existe o no en nuestro diccionario.

Los diccionarios se definen con {}

  • .keys()
  • .values()
  • .items() – devuelve una lista de tuplas clave – valor del diccionario

zip me permite coger dos listas y hacer un diccionario: diccionario = dict(zip(lista_claves,lista_valores))

del(diccionario[‘clave’]) – borra la entrada de un diccionario

Ojo, al copiar un diccionario con ciudades_2 = ciudades, no creo una copia sino dos variables que apuntan a un mismo objeto.

id(diccionario) – me devuelve el número del puntero al diccionario

ciudades_2 = ciudades.copy() -> así tengo una copia independiente de un diccionario

Ejercicio: ejecucar algunos ejemplos con diccionarios https://recursospython.com/guias-y-manuales/diccionarios/

Ver:

Operadores aritméticos

Las diferentes operaciones aritméticas en Python son los siguientes:

  • +
  • ∗∗  – elevado
  • / – división entera
  • // – división
  • %

Operadores de asignación

Los diferentes operadores de asignación en Python son los siguientes:

  • =: Asigna a la variable del lado derecho aquello que pongamos en el lado derecho.
  • +=: Suma a la variable del lado izquierdo la variable del lado derecho.
  • −=: Resta a la variable del lado izquierdo la variable del lado derecho.
  • ∗=: Multiplica la variable del lado izquierdo por la variable del lado derecho.
  • /=: Divide la variable del lado izquierdo por la variable del lado derecho.
  • ∗∗=: Eleva la variable de la izquierda a la potencia de la variable de la derecha.
  • //=: División entera de la variable de la izquierda entre la de la derecha.
  • %=: Resto de la división de la variable de la izquierda entre la de la derecha.

Operadores relacionales

Los operadores relacionales de Python son:

  • ==: Evalúa que los valores sean iguales.
  • !=: Evalúa que los valores sean distintos.
  • <: Evalúa que el valor de la izquierda sea menor que el de la derecha.
  • >: Evalúa que el valor de la izquierda sea mayor que el de la derecha.
  • <=: Evalúa que el valor de la izquierda sea menor o igual que el de la derecha.
  • >=: Evalúa que el valor de la izquierda sea mayor o igual que el de la derecha.
  • not: negación de una variable booleana

Librerías

Python es un lenguaje pensado para ser ampliado con lo necesario y hace tiempo que se ha convertido en el pilar de la investigación en numerosos campos de ciencia y tecnología

Disponemos de infinidad de librerías que podemos usar llamando a la clausula import

La librería estándar de python incluye muchos módulos: https://docs.python.org/dev/library/index.html

Ejecutar:

  • from fractions import *
  • F1 = Fraction(2,3)
  • F2 = Fraction(3,4
  • print(F1, F2)
  • print (F1 + F2)
  • print (F1 * F2)
  • print (F1 / F2)
  • import math
  • math.factorial(4)
  • math.factorial(432)
  • import numpy
  • a = numpy.array(([1,2,3],[4,5,6],[7,8,9]))
  • print (a)
  • print (a * a)
  • from matplotlib import pyplot
  • pip install matplot lib
  • x = numpy.linspace(0, 2 * numpy.pi, 100)
  • y = numpy.sin(x)
  • pyplot.plot(x, y)
  • pyplot.show()

NumPy es una extensión de Python, que le agrega mayor soporte para vectores y matrices, constituyendo una biblioteca de funciones matemáticas de alto nivel para operar con esos vectores o matrices.

Estos módulos externos que podemos descargar e importar a nuestros programas reciben en Python el nombre de packages. Existen packages que podemos importar, más o menos estándar para lo que se te ocurra.

Python Package Index: https://pypi.org/

Más información: Imports en Python

Módulos en Python: http://research.iac.es/sieinvens/python-course/source/modulos.html

Módulos y paquetes: https://www.learnpython.org/en/Modules_and_Packages 

Diferencia entre módulos, Paquetes y librerías

Standar Library: https://docs.python.org/3/library/ 

Métodos de instalación de Paquetes:

Como instalar y usar pip: https://pip.pypa.io/en/latest/installing.html

Por defecto estos gestores de paquetes buscan en https://pypi.org/

El Python Package Index o PyPI es el repositorio de software oficial para aplicaciones de terceros en el lenguaje de programación Python. Los desarrolladores de Python pretenden que sea un catálogo exhaustivo de todos los paquetes de Python escritos en código abierto. https://es.wikipedia.org/wiki/%C3%8Dndice_de_paquetes_de_Python

Para ver la ruta de los paquetes:

  • import sys
  •  print (‘\n’.join(sys.path))

Para ver los módulos instalados: pip freeze o pip list

Para actualizar ejecutar: pip install –upgrade pip

Instalar paquetes de Python: https://www.raspberrypi.org/documentation/linux/software/python.md

Sentencias condicionales

Imaginemos que queremos crear un sistema automático de riego en nuestra casa, de forma que cuando la lectura de un sensor de humedad sea menor que un cierto valor, encienda el sistema y que si la lectura es mayor que un cierto valor, lo apague. Con las herramientas que tenemos hasta ahora, esto no sería posible, para esto utilizamos la sentencia if/elif/else, que tiene la siguiente estructura:

if <expresion_booleana>:   # Solo si la condicion booleana es True, 

    bloque codigo          # el bloque de código se ejecuta

    …

elif <expresion_booleana>: # No es necesario, añade condiciones extra al conjunto.

    bloque codigo          # Se puede poner tantas como se necesiten.

    …

else:                      # No se necesario. Se ejecuta solo si

    bloque codigo          # todas las condiciones anteriores son falsas.         

    …

Nota: Es importante saber la importancia de la indentación en Python. Cuando usemos sentencias que acaben en “:” (if, for…) las líneas que estén dentro de esta sentencia irán después de un tabulador o 4 espacio, como se muestra en los ejemplos.

Ejemplo:

num = float(input(“Enter a number: “))

if num >= 0:

    if num == 0:

        print(“Zero”)

    else:

        print(“Positive number”)

else:

    print(“Negative number”)

Más información: El tipo Bool y sus operaciones.

Sentencias bucle

Anteriormente hemos visto el tipo de variable lista. Estas contenían una cierta cantidad de elementos. Imaginemos que tenemos una lista de enteros y queremos mostrar por pantalla los elementos que contiene que sean mayores que 5. Para esto, entre otras cosas, tenemos sentencias bucle.

En Python existen dos tipos estructuras de bucles:

  • Bucles for
  • Bucles while

La sintaxis de un bucle for es:

for <variable_sin_definir> in <Iterable>: # El bloque se ejecuta tantas veces 

    bloque codigo                         # como elementos tiene el iterable

    …

El blucle ejecuta un bloque de código tantas veces como esté definido. El número de veces que se recorre el bucle es equivalente al número de elementos en el iterable que se usa. La variable que se usa toma como valores los elementos del iterable de forma secuencial, un valor por cada iteración.

Los bucles for son una gran herramienta para recorrer todos los elementos de una colección.

Ejemplo:

fruits = [“apple”, “banana”, “cherry”]

for x in fruits:

  print(x)

Ejemplo:

for x in range(6):

  print(x)

else:

  print(“Finally finished!”)

La sintaxis de los bucles while es:

while <condicion_boolena>:   # El bloque se ejecuta hasta que la condición es falsa.

    bloque codigo            # Antes de ejecutar asegurarse que se va a salir.

    …

El bucle while se ejecuta de forma indefinida hasta que la condición después del while sea falsa. Por lo tanto es necesario realizar un cambio dentro del bucle que finalmente hará que se vuelva la condición False.

Adicionalmente existen un par de comandos dentro de Python que sirven para tener más control sobre los bucles:

  • continue. El intérprete cuando lo lee termina de ejecutar la presente iteración y pasa a la siguiente iteración.
  • break . El intérprete cuando lo lee termina la ejecución del bucle, continuando la ejecución de las siguientes líneas.

Ejemplo:

i = 1

while i < 6:

  print(i)

  if i == 3:

    break

  i += 1

Más información: Mas sobre Python for y While.

Iteradores

En Python existen diferentes estructuras que son conjuntos de elementos, son las llamadas colecciones. Este tipo de estructuras son iterables, es decir, se pueden recorrer elemento por elemento. Como veíamos antes, el bucle for itera sobre un iterable, por lo que utilizamos esta sentencia para recorrerlos. Algunos tipos de variable que son iterables son:

  • Cadena de caracteres (str)
  • Lista (list)
  • Tupla (tuple)
  • Diccionario (dict)

Además, muchas veces queremos repetir un bucle un número determinado de veces. Para esto puede ser útil la función range(n). Esta función genera un iterable que va desde 0 hasta n-1.

Más información:Iteraciones for en Python 3.

Funciones

Es muy posible que a lo largo de un programa necesitemos calcular el factorial de un número. Podemos escribir el código necesario para calcularlo en cada punto que lo necesitamos, o crear una función que podamos llamar desde cualquier punto y nos calcule el factorial de un número. 

La sintaxis para definir una función en Python es la siguiente:

def nombre_funcion(<parametro1>, <parametro2>, …): # Los parametros son opcionales

    Bloque codigo

    …

    return <valor_a_devolver> # El comando es opcional (puede devolver varios valores)

Los parámetros son las variables que se definen dentro del paréntesis, separados por comas. Son opcionales y sirven para pasarle valores a la función. Son opcionales una vez definimos la función, pero si la función está definida con n argumentos, tendremos que informarlos.

Adicionalmente puede introducirse una sentencia return que termina la ejecución de la función y devuelve el valor/objeto que está colocado justo después.

Los nombres de las funciones sigue el mismo convenio que el de las variables.

Para llamar a una función, como hemos visto antes, tenemos que escribir el nombre de la función y añadir entre paréntesis los argumentos que la funció necesita. Aunque la función no necesite argumentos, tenemos que escribir los paréntesis.

Ejemplo:

def escribe_media(x, y):

    media = (x + y) / 2

    print(f”La media de {x} y {y} es: {media}”)

    return

a = 3

b = 5

escribe_media(a, b)

print(“Programa terminado”)

Código de python (ejemplos y snippets):

Ejemplos de Python aplicados a la Industria

Ejemplos:

Ejercicio: Recoger datos meteorológicos de aemet

Aemet Open data: http://www.aemet.es/es/datos_abiertos/AEMET_OpenData

Obtener Api Key: https://opendata.aemet.es/centrodedescargas/inicio

Documentación de la API: https://opendata.aemet.es/dist/index.html?

Ejemplo programa Python: https://opendata.aemet.es/centrodedescargas/ejemProgramas?

Crear un ejemplo usando la librería requests: https://pypi.org/project/requests/ y ejecutar para logroño.

Código: https://github.com/jecrespo/Aprendiendo-RaspberryPi/blob/master/Ejercicio03-Aemet/aemet.py

Librería: https://pypi.org/project/python-aemet/

No hay librería de AEMET en Node-RED, pero podemos hacer las peticiones a la web como se ha hecho en python.

IDE Arduino y Configuración

Entorno de programación

El entorno de desarrollo integrado también llamado IDE (sigla en inglés de Integrated Development Environment), es un programa informático compuesto por un conjunto de herramientas de programación. Puede dedicarse en exclusiva a un solo lenguaje de programación o bien puede utilizarse para varios lenguajes.

Un IDE es un entorno de programación que ha sido empaquetado como un programa de aplicación; es decir, que consiste en un editor de código, un compilador, un depurador y un constructor de interfaz gráfica (GUI). Además en el caso de Arduino incorpora las herramientas para cargar el programa ya compilado en la memoria flash del hardware.

El IDE de Arduino va a ser la herramienta de trabajo durante el curso y habrá que conocer su funcionamiento.

Los programas de arduino están compuestos por un solo fichero con extensión “ino”, aunque es posible organizarlo en varios ficheros. El fichero principal siempre debe estar en una carpeta con el mismo nombre que el fichero.

Anteriormente a la versión 1.x de Arduino se usaba la extensión “pde”. Cuando se pasó a la versión 1.x hubo grandes cambios, que deben tenerse en cuenta si se usa el código antiguo. Guía de como migrar de versiones anteriores a la 1.0: http://www.engblaze.com/changes-in-the-arduino-1-0-release/

La última versión del IDE de Arduino es la 1.8.9. Los grandes cambios en el IDE Arduino se han producido desde la actualización de la versión 0.22 a la 1.0 y posteriormente la actualización de la versión 1.0.6 a la 1.6.0 que han supuesto importantes mejoras en el IDE de Arduino.

También está disponible la versión 1.9.0 en beta para probar las novedades del IDE.

Es destacable desde la aparición de la versión 1.6.2 la incorporación de la gestión de librerías y la gestión de placas muy mejoradas respecto a la versión anterior y los avisos de actualización de versiones de librerías y cores.

Todos los cambios en la versiones pueden verse en: https://www.arduino.cc/en/Main/ReleaseNotes

Código fuente del IDE de Arduino está disponible en: https://github.com/arduino/Arduino/  y las instrucciones para construir el IDE desde código fuente pueden verse en: https://github.com/arduino/Arduino/wiki/Building-Arduino

Podemos también ver los problemas/bugs detectados de la versión actual y hacer un seguimiento de ellos: https://github.com/arduino/Arduino/issues y en http://forum.arduino.cc/index.php?board=2.0

Conozcamos el IDE, nuestro entorno de trabajo:

IMPORTANTE: Para conocer el entorno de programación a fondo ver: http://arduino.cc/en/Guide/Environment

Es importante conocer cada uno de los menús y opciones que tiene, pero los más importantes por ahora son:

  • Botones de Verificar y Subir
  • Botón Monitor Serie
  • Consola de Error
  • Menú herramientas Placa y Puerto
  • Menú de pestañas
  • Puerto y placa seleccionada
  • Menú preferencias
  • Proyecto/Sketch

Configuración inicial del IDE

Después de la instalación, lo primero es configurar el IDE para facilitar la edición de nuestros programas, que nos muestre toda la información de compilación y subida de programas a Arduino y que nos muestre por pantalla todos los warnings del compilador. Cuanta más información tengamos, más fácil será localizar un problema.

Para ello, entrar en el menú Archivo → preferencias y activar:

  • Números de Línea
  • Mostrar salida detallada en la compilación y al subir un sketch
  • Configurar la ruta de nuestro workspace
  • Advertencia del compilador: Todos
  • Asociar extensión .ino a nuestro IDE
  • Habilitar plegado de código
  • Verificar el código después de subir

Desde esta pantalla configuramos donde se guardan las preferencias, sketches y librerías, de forma que al instalar una actualización mantenemos todos los datos o si instalamos varios IDEs van a compartir estos datos.

  • Los sketches y librerías se guardan en C:\Users\nombre_usuario\Documentos\Arduino
  • Las preferencias se guardan en el directorio: C:\Users\nombre_usuario\AppData\Local\Arduino15\, aquí también está el listado de librerías y placas disponibles desde el gestor de librerías y tarjetas.

NOTA: Guardar en el directorio de “Localización de Proyecto” la carpeta con las prácticas, de esta manera estarán disponibles directamente desde el IDE de Arduino.

Cargar un Programa en Arduino

El IDE de Arduino contiene un editor de texto para escribir nuestro sketch, una consola de error y un área con los menús y los botones que realizan las funciones más comunes como son abrir sketch, guardar sketch, compilar y cargar programa.

A la hora de cargar un programa en Arduino, debemos seleccionar siempre el modelo de la placa conectada y el puerto al que está conectado.

Una vez seleccionada la placa y el puerto ya podemos pulsar sobre el botón subir y comenzará el proceso de compilación y carga del programa a la placa Arduino.

Cuando cargamos un programa en Arduino, estamos usando el bootloader de Arduino, que es un pequeño programa cargado en el microcontrolador que permite subir el código sin usar hardware adicional. El bootloader está activo unos segundos cuando se resetea la placa, después comienza el programa que tenga cargado el Arduino en su memoria Flash. El led integrado en la placa (pin 13) parpadea cuando el bootloader se ejecuta.

Práctica: Probar a cargar el programa blink en Arduino y comprobar que parpadea el led integrado en la placa. De esta forma comprobamos que hemos instalado todo correctamente.

Gestor de Tarjetas

El gestor de tarjetas está disponible desde el menú herramientas → Placa → Gestor de tarjetas, nos muestra el soporte a qué tipo de placas tenemos y permite instalar otro tipo de placas. Estas placas se refieren a la familia de tarjetas no a los modelos de Arduino soportados, eso se debe configurar desde otro fichero.

Por defecto tenemos instalado el soporte a las placas Arduino AVR que son la mayoría, pero nos permite instalar el soporte para los Arduino con MCU ARM de 32 bits como el Arduino MKR1000 o las Intel como el Arduino 101.

En este enlace explica como instalar nuevos cores: https://www.arduino.cc/en/Guide/Cores

Cuando tengamos algún problema, la primera opción es recurrir a la guía de Troubleshooting: http://arduino.cc/en/Guide/Troubleshooting

Gestor de Librerías

El gestor de librerías accesible desde menú > Programa > Incluir Librería > Gestionar Librerías

Este gestor nos permite instalar, desinstalar y actualizar las librerías que tenemos disponibles en el IDE.

Monitor serie

El monitor serie es una de las partes más importantes del IDE de Arduino porque es nuestra ventana para la comunicación entre Arduino y el ordenador, que se hace a través del cable USB.

Para realizar la conexión mediante puerto serie únicamente es necesario conectar nuestra placa Arduino empleando el mismo puerto que empleamos para programarlo. A continuación abrimos el IDE Standard de Arduino y hacemos click en el “Monitor Serial” como se indica en la imagen.

El monitor serie muestra los datos enviados por el Arduino a través del puerto serie también nos permite mandar datos al Arduino mediante el puerto serie.

El monitor de puerto serie es una pequeña utilidad integrada dentro de IDE Standard que nos permite enviar y recibir fácilmente información a través del puerto serie. Su uso es muy sencillo, y dispone de dos zonas, una que muestra los datos recibidos, y otra para enviarlos. Estas zonas se muestran en la siguiente imagen.

Hay disponibles alternativas al monitor serie que en algunas circunstancias podemos necesitar puesto que el incluido en el IDE de Arduino es bastante sencillo, pero generalmente suficiente.

Una buena alternativa muy completa es el btaru terminal: https://sites.google.com/site/terminalbpp/

Arduino Serial Plotter. Desde la versión 1.6.6 del IDE de Arduino disponemos de la herramienta Arduino Serial Plotter que nos permite hacer gráficas de los datos mandados por puerto serie.

Práctica: Cargar el programa “AnalogReadSerial” dentro de los ejemplos, apartado 01.Basics y ver lo que saca por el monitor serie y por el Serial Plotter.

Beta IDE Arduino

Está disponible la versión Beta 1.9 del IDE de Arduino para su descarga en https://www.arduino.cc/en/Main/Software en la zona de Beta Builds.

Alguna de las novedades de la versión beta pueden verse en: https://blog.arduino.cc/2017/10/11/be-among-the-first-to-try-arduino-ide-1-9-beta/

Algunas de las novedades interesantes son:

Novedades en el IDE Arduino

Software Release Notes: https://www.arduino.cc/en/Main/ReleaseNotes

Arduino Command Line Interface: https://blog.arduino.cc/2018/08/24/announcing-the-arduino-command-line-interface-cli/, interfaz de comandos en linea que permite usar las herramientas de Arduino en Makefiles. Permitiría de una forma sencilla instalar dependencias de un proyecto con: arduino-cli lib install “WiFi101” “WiFi101OTA”

Esto también permitirá integrar el soporte de Arduino a otros IDEs.

Getting started guide de Arduino-cli: https://github.com/arduino/arduino-cli#getting-started

Arduino Device Manager: https://create.arduino.cc/devices/  

Arduino Cloud

Arduino IoT Cloud permite conectar dispositivos a Internet y a otros dispositivos. Esta herramienta hace que la creación de objetos conectados sea rápida, sencilla y segura.

Aun es una versión beta y solo se puede usar con unos pocos modelos de Arduino, pero puede ser interesante en el futuro.

Actualmente, las tarjetas MKR1000, MKR WiFi 1010 y MKR GSM 1400 son compatibles. En el futuro, el MKR Vidor 4000 y Arduino Uno WiFi Rev2 también serán soportados.

Arduino IoT Cloud es una plataforma de aplicación de Internet of Things fácil de usar. Hace que sea muy sencillo para cualquiera desarrollar y gestionar aplicaciones de IoT, lo que les permite centrarse en la resolución de problemas reales en su negocio o en la vida cotidiana.

Web: https://create.arduino.cc/iot/things

Más información sobre Arduino IoT Cloud: https://www.arduino.cc/en/IoT/HomePage

Presentación del Arduino IoT Cloud:

Getting started con Arduino Cloud:

Proyectos con IoT cloud: https://create.arduino.cc/projecthub/products/arduino-cloud

Mejoras en Arduino IoT Cloud:

Librería Arduino IoT Cloud: https://github.com/arduino-libraries/ArduinoIoTCloud

FAQ: https://www.arduino.cc/en/Create/FAQ

IDE Online

Arduino.cc ha sacado un IDE on-line llamado Arduino Web Editor que puede usarse en lugar del IDE que acabamos de ver. Este IDE on-line está dentro del proyecto Arduino Create accesible desde https://create.arduino.cc/ y incluye varios apartados.

Para usar este IDE es necesario instalar un plugin y mediante este wizard online es posible instalarlo: https://create.arduino.cc/getting-started/plugin

También es importante señalar que es necesario crearse una cuenta de arduino.cc para poder usar este IDE on-line.

Getting started con Arduino Web Editor: https://create.arduino.cc/projecthub/Arduino_Genuino/getting-started-with-the-arduino-web-editor-4b3e4a

FAQ: https://www.arduino.cc/en/Create/FAQ

En estas publicaciones del blog de arduino.cc habla de Arduino Create:

Con Arduino Web Editor es posible escribir y cargar sketchs a cualquier placa Arduino directamente desde el navegador, guardar todos los sketches en el Arduino Cloud y acceder a ellos desde cualquier dispositivo.

El nuevo IDE de Arduino Web está siempre actualizado, incluyendo las últimas librerías y cores de las placas sin tener que instalar nada. Las placas conectadas al ordenador aparecen automáticamente en un desplegable.

Los ejemplos están disponible con los esquemáticos de conexión y también permite subir tus sketches con el esquemático y diagrama eléctrico, de forma que está todo en un mismo lugar.

Para poder usarlo es necesario descargar un plug-in en función del sistema operativo (Windows/Linux/Mac OS).  El código fuente y los binarios de este plugin están en: https://github.com/arduino/arduino-create-agent

Este plugin (agente) detecta automáticamente los puertos USB de nuestro ordenador y detecta cualquier placa Arduino conectada, si estamos cargando un sketch o si estamos usando el monitor serie.

Este plugin está basado en el serial-port-json-server de johnlauer: https://github.com/johnlauer/serial-port-json-server que permite comunicarte con el puerto serie de un ordenador desde un navegador. Esto permite hacer aplicaciones web que se pueden comunicar con el puerto serie local. Más información y ejemplo en: http://chilipeppr.com/

Esto no es una sustitución del IDE tradicional, sino un complemento para quien no quiera instalarse el IDE. Arduino.cc ha mostrado su intención de dar siempre a la comunidad un IDE off-line, aunque actualmente están fomentado el uso del IDE online.

Novedades Arduino

Desde el año 2015 ha habido varios cambios en la organización de Arduino como empresa que es interesante conocer por las consecuencias que puede tener en el desarrollo de las placas Arduino y en el software.

Arduino LLC fue la compañía creada por Massimo Banzi, David Cuartielles, David Mellis, Tom Igoe and Gianluca Martino en 2009 y era la propietaria de la marca Arduino. Las placas Arduino eran fabricadas por una spinoff llamada Smart Projects Srl creada por Gianluca Martino. En noviembre de 2014 cambiaron el nombre de la empresa que manufactura las placas Arduino de Smart Projects Srl a Arduino Srl y registraron el dominio arduino.org, esto fue el inicio de la división que se produjo poco después.

A principios de 2015 se produjo una división dentro de Arduino y desde entonces han aparecido bastante cambios para los usuarios de Arduino, la primera es que ha aparecido una nueva marca llamada “Genuino” asociada a arduino.cc y una nueva web oficial de Arduino www.arduino.org.

El 1 de octubre de 2016 durante el World Maker Faire de New York, Massimo Banzi and Federico Musto anunciaron las empresas Arduino LLC (arduino.cc) y ArduinoSRL (arduino.org) han firmado un acuerdo, cerrando las disputas iniciadas a principio de 2015. Anunciaron que el recién creado “Arduino Holding” será el punto único para la distribución de los productos Arduino actuales y futuros y continuará sacando al mercado nuevas innovaciones. Además, anunciaron la futura formación de la “Fundación Arduino” sin ánimo de lucro, que será la responsable de mantener el IDE Arduino open source y continuará fomentando el movimiento open source, pero que no se ha hecho realidad.

En el verano de 2017 donde se comunicó que BCMI, la empresa fundada por  Massimo Banzi, David Cuartielles, David Mellis and Tom Igoe, co-fundadores de Arduino ha adquirido el 100% de Arduino AG, la corporación que tenía todas las marcas registradas de Arduino. En el Comunicado Massimo Banzi dice que de esta forma se renueva el compromiso con el HW y SW open source con un crecimiento sostenible de la empresa. Su visión es permitir a cualquier innovar con la electrónica durante mucho tiempo y democratizar el IoT para los individuos, educadores, profesionales y negocios.

Enlaces con las noticias por orden cronológico:

A partir de la Nueva era Arduino

Adquisión de Arduino AG (empresa que tenía la marca Arduino en propiedad): https://blog.arduino.cc/2017/07/28/a-new-era-for-arduino-begins-today/

Nuevas placas Arduino IoT MKR WAN 1300 y MKR GSM 1400 en la Maker Faire New York 2017: https://blog.arduino.cc/2017/09/25/introducing-the-arduino-mkr-wan-1300-and-mkr-gsm-1400/

Asociación entre Arduino y ARM: https://blog.arduino.cc/2017/10/05/arduino-announces-arm-partnership/

Beta Arduino IDE: https://blog.arduino.cc/2017/10/11/be-among-the-first-to-try-arduino-ide-1-9-beta/

Soporte placas linux desde Arduino Create: https://blog.arduino.cc/2017/11/03/linux-support-comes-to-arduino-create/. Esto permite programar placas linux como si se trataran de Arduinos y que múltiples programas Arduino puedan ejecutarse en una placa y comunicarse entre ellos. Y pueden programarse remotamente,

De momento solo para placas Intel como ntel® NUC, Dell Wyse®, Gigabyte™ GB-BXT y las placas UP2 http://www.up-board.org/upsquared/

Nueva Arduino Reference: https://blog.arduino.cc/2017/12/14/new-search-engine-arduino-reference/. Cambio de aspecto https://www.arduino.cc/reference/en/, más rápida y ahora se puede colaborar en la documentación a través de https://github.com/arduino/reference-en y con un reference en español https://github.com/arduino/reference-es

Usar Arduino para programar dispositivos IoT Linux: https://blog.arduino.cc/2018/03/13/you-can-now-use-arduino-to-program-linux-iot-devices/. Se amplían los dispositivos soportados por Arduino Create para el desarrollo de IoT. Desde https://create.arduino.cc/getting-started es posible gestionar y programar muchas de las placas más populares basadas en Linux, incluyendo Raspberry Pi y BeagleBone

Arduino Yun rev 2, completamente open source y resolviendo algunos problemas de seguridad de la versión 1: https://blog.arduino.cc/2018/03/29/arduino-yun-rev-2-is-here/

Placa: https://store.arduino.cc/arduino-yun-rev-2

Nuevas placas en Arduino Day 2018: https://blog.arduino.cc/2018/05/12/the-mkr-family-gets-bigger-with-two-new-iot-boards/

MKR Wifi 1010 https://store.arduino.cc/arduino-mkr-wifi-1010, es una evolución de la placa MKR Wifi 1000 con menor consumo, equipada con un ESP32 y in firmware Wifi open source.

MKR NB 1500 https://store.arduino.cc/arduino-mkr-nb-1500, con conectividad de bajo consumo NB-IoT (narrowband IoT) que trabaja sobre redes LTE que usen NB-IoT, para España Vodafone.

Arduino engineering kit: https://blog.arduino.cc/2018/05/12/arduino-goes-to-college-with-the-new-arduino-engineering-kit/

Placas presentadas en el Maker Faire Bay Area 2018: https://blog.arduino.cc/2018/05/17/say-hello-to-the-next-generation-of-arduino-boards/

MKR Vidor 4000 https://store.arduino.cc/arduino-vidor-4000, primer Arduino basado en un chip FPGA, con WiFi y crypto chip para conexiones seguras.  

Arduino UNO Wifi Rev2 https://store.arduino.cc/arduino-uno-wiFi-rev2 con un nuevo microcontrolador ATmega4809 https://www.microchip.com/wwwproducts/en/ATMEGA4809, un módulo WiFi  u-blox Nina W102 y IMU integrada.

En la novedades sobre Arduinos no oficiales se han añadido nuevas placas al soporte del IDE Arduino: https://github.com/arduino/arduino/wiki/unofficial-list-of-3rd-party-boards-support-urls

Aunque los reyes de los procesadores no oficiales soportados por Arduino son el ESP8266 y el ESP32:

Primeros Pasos Programación Arduino

Aunque se hable de que hay un lenguaje propio de programación de Arduino, no es cierto, la programación se hace en C++ pero Arduino ofrece unas librerías o core que facilitan la programación de los pines de entrada y salida y de los puertos de comunicación, así como otras librerías para operaciones específicas. El propio IDE ya incluye estas librerías de forma automática y no es necesario declararlas expresamente.

Toda la información para programar Arduino se encuentra en el reference de la web de Arduino: https://www.arduino.cc/en/Reference/HomePage. Este es el core o API de Arduino.

Un manual sencillo de entender para la programación es el “arduino programming notebook” de brian w. Evans. Puedes consultarlo o descargarlo desde:

Cuando compilamos y cargamos el programa en Arduino esto es lo que ocurre:

Además de la programación tradicional de Arduino, existen varios proyectos para programar Arduino de forma visual añadiendo bloques al estilo de scratch, blockly o similar.

Vamos a introducir la programación y electrónica con Arduino utilizando los lenguajes de programación por bloques y lenguajes de programación en modo texto:

Proyectos de programación visual:

Plataformas para que los niños aprendan a programar en Arduino y Scratch: http://www.ticbeat.com/educacion/plataformas-para-que-los-ninos-aprendan-a-programar-en-arduino-y-scratch/

Papers sobre la enseñanza de programación con bloques:

Independientemente del sistema operativo que utilicemos y del método de programación, la primera vez que conectamos una tarjeta de Arduino a nuestro equipo, observaremos que será necesario instalar los drivers de la misma. Para instalar el IDE de Arduino seguir las instrucciones de https://aprendiendoarduino.wordpress.com/2018/04/03/instalacion-software-arduino-2/

Primer Sketch con Arduino

Para comprobar su correcto funcionamiento conectamos la tarjeta al ordenador a través del cable USB y automáticamente el ordenador la reconocerá. Además, al instalar Arduino IDE, los drivers de la tarjeta quedan instalados en el PC.

Para comprobar que todo funciona correctamente ejecutar el ejemplo blink en el IDE Arduino que consiste en hacer parpadear el led integrado que lleva Arduino u otro led conectado a un pin digital a través de una resistencia.

NOTA: en caso de usar un led, no olvidar poner una resistencia con un valor entre 220 ohms y 1K ohms

Este es el esquema a usar:

Conexiones internas de la protoboard son así:

Cómo usar una protoboard o breadboard:

Pasos a seguir:

  • Abrir la aplicación Arduino
  • Abrir el ejemplo blink

  • Leer el programar y entender lo que está haciendo
  • Seleccionar la placa y el puerto adecuado

  • Cargar el programa pulsando el botón “subir”. El programa se compila y luego se verá parpadeando los leds Tx y Rx de Arduino, indicando que se está cargando el fichero binario (.hex) en la flash del Arduino. Cuando aparezca el mensaje “subido” habremos acabado.
  • Unos segundos después veremos el LED parpadeando.

Más información:

Entender Arduino

Arduino no solo es una placa azul muy popular con la que hacer semáforos, encender leds o usado en las impresoras 3D. Arduino va mucho más allá y vamos a verlo en este capítulo.

Primer Arduino:

Ya hemos visto anteriormente qué es Arduino: https://aprendiendoarduino.wordpress.com/2018/04/02/que-es-arduino-7/

A modo de resumen los tres componentes de Arduino son:

Arduino = HW + SW + Comunidad

Arduino simplifica el trabajo con microcontroladores y ofrece las siguientes ventajas: barato, multiplataforma, entorno de programación sencillo, software libre y extensible mediante librerías en C++, hardware libre y extensible.

Al trabajar con Arduino, se manejan conceptos de diferentes tecnologías que a priori no tienen nada que ver entre ellos pero que los unifica: electronica digital y analogica, electricidad, programación, microcontroladores, tratamiento de señales, protocolos de comunicación, arquitectura de procesadores, mecánica, motores, diseño de placas electrónicas etc…

Diez razones para usar Arduino: http://www.modulo0tutoriales.com/10-razones-para-usar-arduino/

Mitos sobre Arduino que todo el mundo cree y no son verdad: https://www.baldengineer.com/5-arduino-myths.html

HW Arduino

El HW de Arduino es básicamente una placa con un microcontrolador. Un microcontrolador (abreviado µC, UC o MCU) es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales cumplen una tarea específica. Un microcontrolador incluye en su interior las tres principales unidades funcionales de una computadora: unidad central de procesamiento, memoria y periféricos de entrada/salida.

Características de un Microcontrolador:

  • Velocidad del reloj u oscilador
  • Tamaño de palabra
  • Memoria: SRAM, Flash, EEPROM, ROM, etc..
  • I/O Digitales
  • Entradas Analógicas
  • Salidas analógicas (PWM)
  • DAC (Digital to Analog Converter)
  • ADC (Analog to Digital Converter)
  • Buses
  • UART
  • Otras comunicaciones.

El hardware de Arduino usa microcontroladores generalmente Atmel AVR. Los microcontroladores más usados en las plataformas Arduino son el Atmega168, Atmega328, Atmega1280, ATmega8 por su sencillez, pero se está ampliando a microcontroladores Atmel con arquitectura ARM como el Atmel SAMD21 o los ST STM32, y también Intel.

Arduino dispone de una amplia variedad de placas y shields para usar dependiendo de nuestras necesidades.

Placas Arduino: https://aprendiendoarduino.wordpress.com/2017/06/19/placas-arduino-2/

Un shield es una placa compatible que se puede colocar en la parte superior de los arduinos y permite extender las capacidades del arduino.

Shields Arduino: https://aprendiendoarduino.wordpress.com/2017/06/20/shields-arduino-3/

HW Compatible Arduino

Además del HW oficial de Arduino tenemos infinidad de placas compatibles con Arduino.

Dentro del HW compatible con Arduino podemos distinguir tres tipos:

Listados de placas Arduino y compatibles:

Dentro del entorno Arduino, podemos encontrar placas basadas en el microcontrolador ESP8266 con wifi integrado y pila de protocolos TCP/IP que no sigue el factor de forma de Arduino. De este microcontrolador han salido muchas placas como las wemos https://www.wemos.cc/

Resultado de imagen de wemos.jpg

Placas de otros fabricantes de microcontroladores como Microchip o Mediatek con sus modelos ChipKit o LinkIt.

Documentación de la placa linkit one:

SW Arduino

El software de Arduino es un IDE, entorno de desarrollo integrado (siglas en inglés de Integrated Development Environment). Es un programa informático compuesto por un conjunto de herramientas de programación.

El IDE de Arduino es un entorno de programación que ha sido empaquetado como un programa de aplicación; es decir, consiste en un editor de código, un compilador, un depurador y un constructor de interfaz gráfica (GUI). Además incorpora las herramientas para cargar el programa ya compilado en la memoria flash del hardware.

Es destacable desde la aparición de la versión 1.6.2 la incorporación de la gestión de librerías y la gestión de placas muy mejoradas respecto a la versión anterior y los avisos de actualización de versiones de librerías y cores.

Todos lo cambios en la versiones pueden verse en: https://www.arduino.cc/en/Main/ReleaseNotes

Código fuente del IDE de Arduino está disponible en: https://github.com/arduino/Arduino/  y las instrucciones para construir el IDE desde código fuente pueden verse en: https://github.com/arduino/Arduino/wiki/Building-Arduino

Podemos también ver los problemas/bugs detectados de la versión actual y hacer un seguimiento de ellos: https://github.com/arduino/Arduino/issues y en http://forum.arduino.cc/index.php?board=2.0

En principio el IDE de arduino solo tenía soporte para las placas Arduino y los clones o forks con los mismos microcontroladores que los Arduinos oficiales. Desde la versión 1.6.2 del IDE de arduino.cc y gracias al gestor de placas, podemos añadir soporte a otros microcontroladores y placas al IDE de Arduino, como al ESP8266.

Listado de URLs para soporte de tarjetas no oficiales: https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls

Arduino.cc tiene disponible un IDE on-line dentro del entorno Arduino Create https://create.arduino.cc/ que es una plataforma on-line integrada que permite escribir código, acceder a contenido, configurar placas y compartir proyectos, muy enfocado al Internet de las Cosas (IoT).

También existen otros IDEs alternativos como Atmel Studio http://www.atmel.com/Microsite/atmel-studio/ para microntroladores Atmel.

El software hecho para Arduino con el IDE es portable, es decir, el mismo firmware que hemos hecho para un Arduino/Microcontrolador, sirve para otras placas Arduino u otras placas compatibles Arduino como el ESP8266.

Comunidad Arduino

Un factor del éxito de Arduino ha sido la comunidad que está apoyando este proyecto y que día a día publica nuevo contenido, divulga y responde a las dudas.

En Internet hay disponible todo tipo de cursos, tutoriales, herramientas de consulta, proyectos, etc… que ayudan a que se pueda usar Arduino con facilidad.

El primer sitio donde empezar para trabajar con Arduino es http://www.arduino.cc/ y el segundo sitio el playground de Arduino http://playground.arduino.cc/

Arduino playground es un wiki donde todos los usuarios de Arduino pueden contribuir. Es el lugar donde publicar y compartir código, diagrama de circuitos, tutoriales, trucos, cursos, etc.. y sobretodo el lugar donde buscar cuando tengamos dudas, un problema, una librería adecuada para nuestro proyecto, etc… Esa la base de datos de conocimiento por excelencia de Arduino.

Arduino playground: http://playground.arduino.cc/

Algunos apartados importantes en playground.

Otro lugar donde la comunidad colabora, se puede buscar información y preguntar las dudas que tengamos, es el foro Arduino: http://forum.arduino.cc/.

También existen lugares no oficiales de Arduino donde resolver nuestras dudas:

Arduino en las redes sociales:

Otro lugar de encuentro de la comunidad son diversos portales donde se publican proyectos con Arduino:

Por último, también hay espacios locales para la comunidad, son los llamados hacklabs hackerspace, makerspace, etc.. que aunque hay ciertas diferencias entre unos y otros, se trata de un sitio físico donde gente con intereses en ciencia, nuevas tecnologías, y artes digitales o electrónicas se puede conocer, socializar y colaborar. Puede ser visto como un laboratorio de comunidad abierta, un espacio donde gente de diversos trasfondos puede unirse. Pone al alcance de aficionados y estudiantes de diferentes niveles la infraestructura y ambiente necesarios para desarrollar sus proyectos tecnológicos.

Hacklab: https://es.wikipedia.org/wiki/Hacklab

Mejores prácticas Hackerspaces: https://elplatt.com/new-hackerspace-design-patterns

Listado de Hackerspaces: https://hackerspaces.org/wiki/List_of_ALL_Hacker_Spaces

También hay otro espacio local algo diferente que son los fablabs: es un espacio de producción de objetos físicos a escala personal o local que agrupa máquinas controladas por ordenadores.

Fablab: https://es.wikipedia.org/wiki/Fab_lab

Qué es un fablab: http://fab.cba.mit.edu/about/charter/

Este podcast explica las diferencias entre estos espacios: http://make.cesargarciasaez.com/2016/02/01/la-hora-maker-010-fablabs-makespaces-hackerspaces-y-hacklabs/

Movimiento maker: https://en.wikipedia.org/wiki/Maker_culture

Más información sobre la comunidad, makerspaces y fablabs, ver los artículos:

Filosofía Arduino

Por último para entender bien lo que es Arduino, es recomendable ver el documental de Arduino de unos 30 minutos de duración. Arduino the Documentary: http://blog.arduino.cc/2011/01/07/arduino-the-documentary-now-online/

IoT Manifesto: https://create.arduino.cc/iot/manifesto/

We believe that the best way to grow this environment is to develop open source platforms and protocols to propose as an alternative to the myriad of proprietary hardware and software platforms each one of the big players are developing.
We believe in creating tools that make these technologies understandable to the most diverse set of people as possible, this is the only way to make sure innovation benefits most of humanity.
We propose that connected devices should be: Open, Sustainable and Fair.

We foresee a world with billions of connected smart objects. These smart objects will be composed and orchestrated, thus making the Internet of Things a reality. The IoT will be the eyes, noses, arms, legs, hands of a new, extended, cyber body. The nervous system of such a body will be the Internet, allowing the interaction with a distributed intelligence made of hardware processors and human minds, behaviors, software procedures, and services, shared in the Cloud.