Archivo de la categoría: IDE

Programación Arduino

Enlaces a seguir para aprender una programación básica de Arduino:

Instalación IDE Arduino

Antes de empezar a usar el hardware de Arduino, vamos a conocer el software de Arduino, dejarlo instalado y configurado para poder empezar a trabajar.

Desinstalación del Software Arduino y Configuraciones

IMPORTANTE: la desinstalación es para el buen desarrollo del curso Arduino, si haces esto en tu ordenador de casa perderás los sketches que tengas en el espacio de trabajo de Arduino, las librerías instaladas y las configuraciones personalizadas del IDE. NO HAGAS ESTAS OPERACIONES DE DESINSTALACIÓN SI NO ESTAS SEGURO y sigue con la instalación del software de Arduino en el siguiente apartado “Instalación Software Arduino”.

Para tener una instalación limpia y que no haya problemas en la realización de las prácticas del curso de Arduino hacer los siguientes pasos:

  • Ver los directorios de configuración del software de Arduino, para ello entrar en el menú Archivo → preferencias
  • Desinstala (si está instalado) el software de Arduino desde el Panel de Control de Windows. Asegurate que dentro del directorio “C:\Program Files (x86)\Arduino\” no queda nada dentro o sino borralo.
  • Borra (si existe) la carpeta y todo su contenido de Localización de Proyecto que estaba en propiedades. Generalmente será: “C:\Users\ThinkTIC\Documents\Arduino”. Esto borra los sketches guardados y las librerías instaladas.
  • Borra (si existe) la carpeta y su contenido de preferencias que estaba en propiedades. Generalmente será: “C:\Users\ThinkTIC\AppData\Local\Arduino15”. Esto borra las preferencias del software de Arduino y el soporte a placas instalado.

Ahora ya tenemos limpio de datos de la anterior instalación del software de Arduino y podemos empezar con una instalación limpia desde cero.

Instalación Software Arduino

Vamos a instalar la última versión del IDE de Arduino, conocer el entorno de programación y hacer las principales configuraciones en el entorno para poder trabajar de forma más eficiente.

Descargar la última versión del IDE de Arduino desde: https://www.arduino.cc/en/software 

La versión Actual es la 2.0.3

Elegir la opción de Windows Installer, aunque también es posible descargar la versión comprimida en zip, que es una versión portable o para aquellos que no tengan privilegios suficientes para instalar aplicaciones o simplemente quien quiera hacer una instalación manual. En caso de descargar la versión comprimida en zip, simplemente descomprimirlo en la carpeta deseada y ya podemos usarlo.

Una vez descargado, ejecuta el instalador. Si existe una versión anterior el instalador nos avisa y nos desinstala la versión actual. En el caso que hayamos hecho modificaciones en el directorio de instalación las perderemos.

Ya en la instalación aceptamos el acuerdo de licencia.

Permitir instalar los drivers si lo solicita:

Y ya está instalado. En este momento ya tenemos instalado el IDE en nuestro ordenador.

Ejecutar la aplicación. Este es el aspecto del IDE:

Cambios incluidos en cada versión: https://www.arduino.cc/en/Main/ReleaseNotes 

El IDE de Arduino es multiplataforma y en caso de instalar el IDE Arduino en otros sistemas operativos estas son las instrucciones:

NOTA: para usuarios de linux/debian, el IDE Arduino está en los repositorios oficiales, pero instalará una versión antigua del IDE. Por lo tanto aunque funcione “apt-get install arduino “, es recomendable hacer la instalación según https://www.arduino.cc/en/Guide/Linux. Para ver qué versión se instalará desde el repositorio oficial usar el comando “apt-cache showpkg arduino”

Actualizar el IDE de Arduino

Para actualizar una versión anterior del IDE de Arduino, el procedimiento es el mismo que el de una instalación inicial, puesto que el instalador detecta una versión anterior y la desinstala manteniendo todas nuestras configuraciones, librerías y sketches anteriores.

En caso que queramos mantener varias versiones del IDE en el mismo ordenador, simplemente hacemos la instalación manual en directorios diferentes y las configuraciones, librerías y sketches son compartidas por las diferentes versiones del IDE instaladas.

A la hora de actualizar, el instalador de Arduino lo que hace es borrar toda la ruta completa donde hemos instalado Arduino e instalar la nueva versión. Por lo tanto cualquier modificación o librería instalada en el directorio de instalación se perderá en la actualización.

Es importante que cualquier sketch que hagamos y cualquier librería que instalemos se haga en la ruta indicada en las propiedades, de esta forma mantendremos nuestra configuración al actualizar el 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.

Arduino en IoT

Arduino se ha convertido una figura destacada e incluso uno de los impulsores del IoT y no por casualidad, sino que  por sus características es un HW con gran capacidad para usar en proyectos de IoT.

Características de Arduino para IoT

  • Barato y rápido prototipado.
  • HW libre y por lo tanto es modificable para que consuma menos y para hacer un HW final de características industriales.
  • Disponibilidad de HW de comunicaciones de todo tipo para conectar con Arduino. Nuevas tecnologías de comunicación llegan antes que para elementos comerciales
  • Librerías y SW público para su reutilización o adaptación.
  • Flexibilidad en la programación.
  • Apoyo de la comunidad.

No en vano cuando se busca IoT (Internet de las cosas) enseguida aparece Arduino.

Arduino sirve para recoger datos no solo del entorno sino de máquinas o elementos externos y comunicarnos con Internet, mediante su consumo eléctrico, contactos de alertas externas, su temperatura, su posición, etc…

Arduino nos permite de una forma sencilla y barata poder conectar entre sí elementos cotidianos para manejarlos y añadir sensores a cualquier elemento y en cualquier ubicación.

Qué es Arduino: https://aprendiendoarduino.wordpress.com/2018/04/02/que-es-arduino-7/

Hardware Arduino:

Hardware Arduino IoT

La familia de Arduino MKR son una serie de placas con un factor de forma diferente al de Arduino mucho más pequeño y basados todos en el microcontrolador de 32 bits de Atmel SAMD21. Estas placas están pensadas principalmente para IoT.

MKR Family: https://store.arduino.cc/arduino-genuino/arduino-genuino-mkr-family

Arduino MKRZero

Producto: https://store.arduino.cc/arduino-mkrzero

Primero modelo de la familia MKR y heredero del Arduino Zero.

Arduino MKR1000 WIFI

Producto: https://store.arduino.cc/arduino-mkr1000

Versión para IoT con procesador Atmel ARM Cortex M0+ de 32bits ATSAMW25 que es el mismo procesador que Genuino Zero pero con wifi integrado, chip de cifrado y antena integrada.

El ATSAMW25 está compuesto por tres principales bloques:

  • SAMD21 Cortex-M0+ 32bit low power ARM MCU
  • WINC1500 low power 2.4GHz IEEE® 802.11 b/g/n Wi-Fi (mismo que el wifi 101 shield)
  • ECC508 CryptoAuthentication

Arduino MKR WiFi 1010

Producto: https://store.arduino.cc/arduino-mkr-wifi-1010

El MKR WIFI 1010 es una mejora significativa del MKR 1000 WIFI. Está equipado con un módulo ESP32 fabricado por U-BLOX. Esta placa tiene como objetivo acelerar y simplificar la creación de prototipos de aplicaciones de IO basadas en WiFi gracias a la flexibilidad del módulo ESP32 y su bajo consumo de energía.

La placa tienes estos 3 bloques principales:

  • SAMD21 Cortex-M0+ 32bit Low Power ARM MCU;
  • U-BLOX NINA-W10 Series Low Power 2.4GHz IEEE® 802.11 b/g/n Wi-Fi; and Bluetooth
  • ECC508 Crypto Authentication.

Arduino MKR FOX 1200

Producto: https://store.arduino.cc/arduino-mkrfox1200

Arduino anunciado en abril de 2017. En una placa de desarrollo pensada para el IoT con conectividad Sigfox. Comparte muchas características con otras placas de la familia MKR como em microcontrolador SAM D21 32-bit Cortex-M0+.

Incluye un módulo ATA8520 con conectividad sigfox de amplia cobertura y bajo consumo capaz de funcionar durante 6 meses con dos pilas AA. También incluye una suscripción por dos años a la red Sigfox: http://www.sigfox.com/en

Web: https://blog.arduino.cc/2017/04/18/introducing-the-arduino-mkrfox1200/

Más información sobre el Arduino MKRFOX1200 en el artículo: https://www.aprendiendoarduino.com/2018/03/05/arduino-mkrfox1200/

Arduino MKR WAN 1300

Producto: https://store.arduino.cc/mkr-wan-1300

Presentado el 25 de septiembre de 2017 en la maker faire de NY: https://blog.arduino.cc/2017/09/25/introducing-the-arduino-mkr-wan-1300-and-mkr-gsm-1400/

Arduino + LoRa:

Arduino MKR GSM 1400

Producto: https://store.arduino.cc/mkr-gsm-1400

Presentado el 25 de septiembre de 2017 en la maker faire de NY: https://blog.arduino.cc/2017/09/25/introducing-the-arduino-mkr-wan-1300-and-mkr-gsm-1400/

Arduino + GSM:

Arduino MKR NB 1500

Producto: https://store.arduino.cc/arduino-mkr-nb-1500

El nuevo estándar Narrow Band IoT, con el ecosistema Arduino fácil de usar. Totalmente compatible con las clases Narrow Band IoT NB y las redes LTE CAT M1.

Arduino MKR Vidor 4000

Producto: https://store.arduino.cc/arduino-vidor-4000 :

El MKR VIDOR 4000 es altamente configurable y potente, y puede realizar procesamiento digital de audio y video de alta velocidad.

El MKR VIDOR 4000 puede configurarlo de la manera que desee; esencialmente puede crear su propia tarjeta controladora.

Viene cargado de hardware y potencial:

  • un SRAM de 8 MB
  • un chip Flash QSPI de 2 MB – 1 MB asignado para aplicaciones de usuario
  • un conector Micro HDMI
  • un conector para cámara MIPI
  • Wifi & BLE alimentado por U-BLOX NINA Serie W10.

También incluye la clásica interfaz MKR en la que todos los pines son accionados tanto por SAMD21 como por FPGA.

Además, tiene un conector Mini PCI Express con hasta 25 pines programables por el usuario.

La FPGA contiene 16K Logic Elements, 504 KB de RAM embebida y 56 multiplicadores de 18×18 bit HW para DSP de alta velocidad. Cada pin puede conmutar a más de 150 MHz y puede ser configurado para funciones tales como UARTs, (Q)SPI, PWM de alta resolución/alta frecuencia, codificador de cuadratura, I2C, I2S, Sigma Delta DAC, etc.

La FPGA integrada también se puede utilizar para operaciones DSP de alta velocidad para el procesamiento de audio y vídeo. Esta tarjeta también incluye un Microchip SAMD21. La comunicación entre la FPGA y el SAMD21 es directa.

Accesorios para Arduinos MKR

Y los IoT Bundles:

Configuración Arduino

Puesta en marcha y comprobación del entorno de programación de Arduino para utilizar en el curso.

Instalación del IDE y blink para comprobar que funciona:

Programación Arduino

Librerías

Mandar Datos a un Servidor con Arduino

Vamos a conectar Arduino a un servidor y mandar datos para que los muestre en una gráfica. Mandar datos a https://www.aprendiendoarduino.com/servicios/datos/graficas.html

Conexión:

Poner este código en Arduino: https://github.com/jecrespo/aprendiendoarduino-servicios/blob/master/arduino_code/data_logger_temperatura_DHCP/data_logger_temperatura_DHCP.ino

Ver los datos en: