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.
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:
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.
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.
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.
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.
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.
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
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
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 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.
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.
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)
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
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
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.
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.