Introducción

La librerías estándar vienen preinstaladas en el IDE de Arduino. La forma más fácil de saber cuales son consultar al sitio oficial de Arduino.

Estas librerías no se incluyen como opción por defecto en tus sketches, tienes que cargar las que vayas a utilizar de a una. De esta manera se utilizan los recursos de memoria del Arduino con mayor eficiencia al cargar únicamente aquellas librerías que van a ser utilizadas.

Para incluir un librería basta con añadir una declaración #include al comienzo del sketch.
Por ejemplo, si quieres incluir la librería de cristal líquido, que se utiliza para exhibir datos en una pantalla LCD, basta con incluir la siguiente declaración al principio de tu sketch:


#include <LiquidCrystal.h>

Observa que el nombre de la librería tiene que ir limitado por los corchetes menor/mayor: < y >. Además hay que notar que la línea no termina con un punto y coma (;) como es la norma en las demás líneas de código.

A continuación veremos las diferentes librerías estándar.

Te puede interesar

Librería Arduino Test Suite

La manera en que los programas y aplicaciones para Arduino se escriben está sujeta a una continua evolución y mejora.
La innovación más reciente consiste en un entorno de programación llamado TDD (Desarrollo Bajo Test).

En TDD, un proyecto de software se divide en pequeños módulos, y antes de escribir un módulo dado, estableces las pruebas (tests) que verifican el funcionamiento de cada función del módulo.

Cuando finalmente escribes el módulo, se ejecuta bajo un entorno de test que comprueba que los resultados obtenidos por el módulo son los descritos en el entorno de test que definiste previamente. Si no es así corriges los errores y vuelves a ejecutar el módulo en el entorno de test.

Cuando un módulo ha pasado los tests, desarrollas el siguiente módulo de la misma manera y así hasta que el proyecto haya sido completado.
Si más tarde tienes que modificar uno de los módulos lo ejecutas bajo el entorno de test hasta que funcione de acuerdo con las especificaciones.

La biblioteca ArduinoTestSuite es el primer paso para implantar esta metodología TDD en el Arduino. Se trata de una librería relativamente nueva, pero se considera como esencial para el futuro del desarrollo en Arduino.

La librería ArduinoTestSuite proporciona métodos estándar y funciones que se pueden utilizar para probar sus sketches antes de cargarlos en el Arduino. De esta manera nos aseguramos de que el sketch funcione según lo previsto antes de usarlo en el mundo real con costosos dispositivos que pueden ser dañados si se utilizan incorrectamente.

La librería está todavía en fase de desarrollo, pero tiene actualmente tests para los procesos listados en la tabla siguiente:

Test Descripción
ATS_begin Inicia el proceso de test
ATS_end Termina el proceso de test
ATS_Test_DigitalPin Testea un pin de entrada digital dado
ATS_Test_PWM Testea la salida PWM
ATS_Test_AnalogInput Testea la entrada analogical
ATS_Test_EEPROM Testea la EEPROM
ATS_TestSerialLoopBack Testea los pins RX y TX de un puerto de comunicación Serie
ATS_GetFreeMemory Devuelve el número de posiciones libres de memoria en el Arduino

La idea de incorporar un entorno de test como parte del Arduino IDE es nueva, pero se convertirá probablemente en una parte importante del IDE a medida que la funcionalidad de los Arduinos siga evolucionando.

Librería EEPROM

La memoria EEPROM es un tipo de memoria de sólo lectura que puede ser borrada y reescrita mediante la aplicación de una tensión eléctrica y al mismo tiempo conserva los datos almacenados incluso tras desconectar la alimentación de la placa del microprocesador.

La cantidad de EEPROM en un Arduino depende del microprocesador de base que lleve.
El cuadro siguiente muestra la cantidad (en octetos o bytes) de memoria EEPROM disponible en diversos Arduinos.

Microprocesador EEPROM memory (bytes)
ATMega8 and ATMega168 512
ATMega328 1,024
ATMega1280 and ATMega2560 4,096

La librería EEPROM proporciona sketches que permiten el acceso a la EEPROM del Arduino e incluye dos funciones, read y write, tal y como se muestra en cuadro de abajo.

Función Descripción
Read Lee el valor de un byte almacenado en una posición de la EEPROM
Write Escribe un valor en una posición de la EEPROM

Cualquier dato escrito en la EEPROM se conserva incluso cuando el Arduino se apaga.

Un buen uso de la librería EEPROM puede ser el almacenamiento de aquellos datos que serán necesarios entre dos sesiones de uso del Arduino (contadores, constantes necesarias para el uso de ciertos dispositivos periféricos, como una pantalla LCD, etc.)./p>

Si el volumen de datos que quieres almacenar entre sesión y sesión es considerable, debes de usar una memoria SD.

Librería SD

Arduino no está dotado con memoria para almacenar datos en grandes cantidades.

En efecto, la memoria EEPROM integrada en el microprocesador sólo puede almacenar unos pocos cientos de octetos en el mejor de los casos. Para almacenar volúmenes considerables de datos (tal como demandan la mayor parte de las aplicaciones) tenemos que recurrir a tarjetas de memoria SD o SDHC.

La tabla de abajo muestra las diferencias entre las tarjetas SD y las SD de alta capacidad (SDHC).

SD SDHC
Capacidad 0–2 GB 4 GB–32 GB
Sistema de Almacenamiento de ficheros FAT16 o FAT32 FAT32

William Greiman escribió una librería para Arduino llamada SdFat basada en los sistemas de codificación de ficheros FAT16 y FAT 32. La librería SdFat proporciona una gama exhaustiva de funciones para el manejo de estas tarjetas de memoria: crear y suprimir ficheros y directorios, formateo, etc.

El equipo de desarrollo del Arduino se dió cuenta de que esta librería es relativamente difícil de utilizar, así que construyeron una envoltura alrededor de ella, haciéndola más sencilla de usar e incluyendo solamente un subconjunto de sus funciones.

La librería utiliza mucha memoria de programa, lo cual limita el tamaño de tus sketches, por lo tanto se recomienda el uso de esta librería solamente con un Arduino equipado de un procesador ATMega328P.

Cuando se incluye esta librería en un sketch, la librería SD proporciona una gama de funciones básicas (ver siguiente tabla) que permiten a tu Arduino interaccionar con las tarjetas SD:

Clase Función Descripción
SD begin Inicializa la librería y la tarjeta SD
exists Verifica la existencia de un fichero o directorio en la tarjeta
mkdir Crea un directorio en la tarjeta
rmdir Suprime un directorio en la tarjeta
remove Suprime un fichero de la tarjeta
open Abre un fichero en la tarjeta
File available Verifica que quedan bytes por leer en el fichero
close Cierra un fichero y se asegura que los datos escritos en él han sido salvaguardados en la tarjeta.
seek Busca una posición en un fichero
position Devuelve la posición actual dentro del fichero.
size Devuelve el tamaño del fichero.
print Escribe datos en un fichero abierto.
println Escribe datos en un fichero y añade un carácter "newline" al final.
write Escribe datos en un fichero
read Lee un octeto (byte) de un fichero abierto.

La librería SD usa solamente la nomenclatura 8,3 (8 caracteres para el nombre del fichero y 3 para la extensión). No se pueden usar nombres de fichero más largos o conteniendo espacios.

Antes de usar una tarjeta SD en el Arduino, debemos formatearla en formato FAT16 o FAT32 usando tu ordenador y el lector de tarjetas.

Librería Ethernet

Si quieres que tus aplicaciones Arduino sean accesibles a otras personas de nuestro entorno (o a través de internet) vas a necesitar la librería Ethernet que te simplificará el acceso a funciones TCP/IP y te permitirá comunicar tu Arduino con Internet o la red doméstica.

Esta librería está diseñada para interactuar con placas basadas en WIZnet W5100. La placa oficial más reciente de Arduino lleva incorporada también un conector microSDcard que resulta muy apropiado para el registro y almacenamiento continuo de datos.

De esta manera puedes, por ejemplo, utilizar el Arduino para tomar lecturas de datos en una ubicación remota y publicar estos datos en una página web básica mientras los almacena en un microSDcard que podría ser recuperado y analizado más adelante.

La biblioteca de Ethernet es muy extensa y permite configurar el Arduino como servidor recibiendo conexiones de clientes, o como cliente, que se va conectando con uno o varios servidores. La tabla siguiente muestra algunas de las funciones de la librería.

Class Funcion Descripción
Ethernet begin Inicializa la librería y configura los parámetros de red
localIP Devuelve la dirección IP local
dnsServerIP Devuelve la dirección DNS del servidor
Server server Crea un servidor
begin Comienza a escuchar posibles peticiones de conexión
available Localiza un cliente para el que tiene datos disponibles para su lectura
write Escribe datos a clientes; tipo: byte o char
print Escribe datos a clientes; tipo puede ser: byte, char, int, long, o string
println Escribe datos a clientes, seguidos por un carácter "newline"
Client client Crea un cliente
connected Devuelve TRUE si el cliente está conectado al servidor
Connect Conecta a la dirección IP y al puerta especificado
write Escribe datos a un servidor conectado.
print Escribe datos a un servidor, tipo puede ser: byte, char, int, long, o string
println Escribe datos a un servidor seguido por un carácter "newline"
available Devuelve el número de bytes que están listos para su lectura en el servidor
read Lee el siguiente octeto (byte) desde el servidor
flush Desestima los bytes que están en espera de ser leídos por el cliente
stop Se desconecta del servidor

Librería Firmata

Firmata es un protocolo de comunicaciones que permite al ordenador (tu PC o laptop) comunicar con uno o varios Arduinos y controlar sus microprocesadores desde el ordenador.

La librería Firmata proporciona los protocolos de comunicación serie (métodos) que permitirán comunicar al PC con el Arduino. Usando Firmata podrás controlar servos, motores, pantallas, LEDs, etc desde tu PC a través de uno o varios Arduinos.

La tabla siguiente muestra los protocolos o métodos más usuales de Firmata:

Método Descripción
Común begin Inicializa la librería Firmata
printVersion Envía versión del protocolo al PC
setFirmwareVersion Establece la versión del firmware
Enviar mensajes sendAnalog Envía un mensaje analógico
sendDigitalPortPair Envía el valor de un pin digital
sendsysex Envía un comando con un array de bytes
sendString Envía un string al PC
Recibir mensajes available Comprueba que hay mensajes en el buffer de entrada
processInput Procesa los mensajes entrantes
attach Asocia una función a un cierto tipo de mensaje de entrada
detach Disocia una función de un cierto tipo de mensaje de entrada

El protocolo Firmata esta evolucionado constantemente; visita firmata.org para obtener las actualizaciones más recientes e informarte sobre el protocolo.

Librería LiquidCrystal

Muy frecuentemente queremos visualizar la información generada no en la pantalla del PC, sino en una pequeña pantalla LCD de 2 filas de 6 caracteres para mostrar la información a los usuarios de la aplicación (sin necesidad de disponer de un PC).

La mayor parte de estas pequeñas pantallas LCD se basan en el Hitachi HD44780 u otro microprocesador compatible. La pantalla LCD puede servirnos para mostrar datos del GPS, mensajes de situación del sistema, y cualquier otra información útil para el usuario o el programador.

La herramienta que necesitamos para poder usar estas pantallas desde nuestro sketch es la librería LiquidCrystal. La siguiente tabla enumera algunas de las funciones disponibles en la librería.

Función Descripción
begin Establece las dimensiones en filas y columnas de la pantalla LCD
LiquidCrystal Inicializa la librería y determina los pins usados para comunicar con la pantalla LCD
print Visualiza datos en la pantalla LCD
clear Borra los contenidos de la pantalla LCD
setCursor Posiciona el cursor sobre la pantalla

Librería Servo

Los motores servo se usan generalmente para controlar con precisión movimientos dentro de nuestros modelos (por ejemplo en radio-control, las aletas de un aeroplano, o la dirección de un volante o timón, etc.).

Son ideales para los proyectos que necesitan el movimiento exacto, como por ejemplo evitar obstáculos o colocar una pieza en un ángulo pre-determinado en aplicaciones robóticas, etc.

La librería Servo permite al Arduino controlar hasta 12 motores servos con un Arduino estándar, y 48 con un Mega. La siguiente tabla muestra las principales funciones proporcionadas por la biblioteca Servo.

Función Descripción
attach Asigna el servo a un pin.
attached Verifica que el servo está conectado al pin
detach Desconecta el servo del pin.
read Lee el ángulo del servo.
write Hace girar el eje del servo al ángulo especificado. Entre 0 y 180 en un servo clásico. En un servo de rotación continua establece la velocidad de rotación.
writeMicroseconds Gira el eje del servo un arco expresado en microsegundos.

El uso de la librería Servo en un Arduino estándar deshabilita la función analogWrite en los pines 9 y 10 del PWM. En el Mega, se deshabilita analogWrite en los pins 11 y 12 si estamos controlando más de 12 servos.

Librería Stepper

Un motor de pasos gira su eje en pasos. La especificación de un motor de pasos viene dada generalmente en pasos, así que un motor con una especificación de 200 pasos necesitaría 200 pequeños giros angulares para completar una revolución.

La especificación se da a veces grados que se pueden convertir fácilmente en pasos dividiendo una revolución (360 grados), por el número de grados dados para cada paso en la especificación. Para un motor de pasos con una especificación de 1,5 grados calculamos el número de pasos por la revolución como sigue:

360 grados/1,5 grados por paso = 240 pasos

Los motores de pasos nos proporcionan una manera muy precisa para controlar dispositivos. La librería Stepper nos proporciona la manera de controlar motores de pasos unipolares y bipolares con un Arduino.

Usando la librería podemos establecer la velocidad de la rotación del motor el número de pasos que queremos dar y la dirección de estos pasos. La siguiente tabla muestra las principales funciones de la librería Stepper:

Función Descripción
Stepper Inicializa la librería Stepper y establece el número de pasos por revolución.
setSpeed Establece la velocidad de rotación del motor en revoluciones por minute (RPM)
step Gira el motor el número de pasos indicado. Un número positivo gira en un sentido y uno negativo en el contrario.

Librería SPI

El Bus Serie para Periféricos (denominado con las siglas SPI en inglés), también llamado el bus de 4 hilos (four-wire bus) es un protocolo de comunicaciones síncrono usado para comunicar en distancias cortas con periféricos externos como sensores, incluyendo los sensores de temperatura, sensores de presión, convertidores analógico- digital, pantallas táctiles, controladores de videojuegos, y pantallas de visualización. Arduino usa también el bus SPI para comunicar con tarjetas de memoria SD.

Este protocolo tiene un solo master, el Arduino, y uno o más dispositivos esclavos. Debido a la falta de un estándar formal, han surgido diferentes implementaciones del protocolo SPI según los diversos fabricantes de dispositivos periféricos, es decir, que probablemente tendrás que recurrir a las especificaciones del periférico en cuestión para manejarlo desde el Arduino.

El protocolo utiliza cuatro hilos, de los cuales tres son comunes a cada dispositivo y el cuarto que es específico (no compartido) para cada periférico. Sus designaciones se muestran en la siguiente tabla:

Designación Descripción Pin Arduino Pin Mega
MISO Master In Slave Out, envio datos al master 12 50
MOSI Master Out Slave In, envio datos al esclavo 11 51
SCK Reloj Serie 13 52
SS Selección de esclavo Normalmente10 53

Cada esclavo tiene un hilo “selectwire” específico para él, pero comparte los otros tres hilos del bus con los otros periféricos. El pin 10 (53 en el Mega) se usa generalmente como línea de selección de esclavo (“slave select”), pero los otros tres pueden ser elegidos durante la configuración.

El shield Ethernet del Arduino utiliza el pin 4 para conectar con el conector SD integrado y el pin 10 para el controlador Ethernet.

La librería SPI proporciona las funciones que nos permitirán actuar sobre los periféricos SPI tal y como se muestra a continuación:

Función Descripción
Begin Inicializa el bus SPI y pone los pins MOSI y SCK en baja y el SS en alta
End Desactiva el bus SPI
setBitOrder Establece el orden en el cual se cargan los bits en el bus
setClockDivider Establece el divisor de reloj SPI como una fracción del reloj del sistema
setDataMode Establece el modo de datos en el bus SPI
Transfer Transfiere un byte al bus

Librería Wire - I2C

Este interface comúnmente llamado interface de dos hilos (TWI, two wire interface) se usa para comunicar a baja velocidad con una amplia gama de dispositivos y componentes (incluyendo relojes de tiempo real).

Es muy indicado para aplicaciones de registro de datos (logging applications), pantallas LCD, sensores ultrasónicos para medir distancias y potenciómetros digitales cuya resistencia pueda ser leída o regulada por control remoto.

I2C se usa en los mandos Nintendo, el Wii Motion Plus, y Wii Nunchuks.

Solo se necesitan dos pins para el interface con el bus i2C (ver tabla).

Arduino Estándar Mega
SDA data line Analog input pin 4 Digital pin 20
SCL clock line Analog input pin 5 Digital pin 21

Con la librería Wire el Arduino puede actuar como master o esclavo. Lo más frecuente es que Arduino haga de master e interactúe con uno o varios esclavos en el bus I2C; cada esclavo tiene una dirección única que lo distingue en la red del bus. Se pueden concatenar hasta un máximo de 112 dispositivos en el bus. El Arduino puede también operar como dispositivo esclavo interaccionado con un master.

La siguiente tabla lista las funciones más importantes de la librería Wire:

Función Descripción
begin Inicializa la librería Wire y conecta el Arduino al bus I2C como master o esclavo.
requestFrom Pide datos del esclavo al master.
beginTransmission Prepara la transmisión de datos.
send Envía datos del esclavo al master o pone en cola bytes para la transmisión de master a esclavo.
endTransmission Finaliza la transmisión (comenzada con beginTransmission) de datos a un esclavo y envía los datos puestos en cola de envío por send.
available Devuelve el número de bytes disponible para su recepción con receive. Debe de ser usado en el dispositivo master tras una llamada requestFrom de un esclavo dentro de la función activada por onReceive.
receive requestFrom o desde el master a un esclavo.
onReceive Determina la función que se ha de activar cuando el esclavo recibe una transmisión desde el master.
onRequest Determina la función que se ha de activar cuando el master pide datos al dispositivo esclavo.

Librería SoftwareSerial

Muchos de los proyectos que podemos realizar con el Arduino requieren al menos un puerto de comunicación serie. Los dispositivos GPS, las pantallas LCD y otros dispositivos necesitan conectarse a un puerto de comunicación serie. Esta puerta consiste en dos conexiones: una RX para recibir mensajes y una TX para enviarlos.

La utilidad de esta puerta radica en su simplicidad. En el pasado todos los ordenadores tenían una o varias puertas serie. De hecho, el Arduino original usaba un puerto de comunicación serie para conectarse al ordenador y, aunque actualmente la conexión se realiza a través de un USB, lo hace a través de una emulación de puerta serie (que vista desde el ordenador es una conexión serie).

Los Arduino Uno y Duemilanove tienen un puerto de comunicación serie conectado a los pines digitales 0 y 1, pero si tu proyecto necesita conectarse a más dispositivos serie (por ejemplo un GPS y un display LCD) puedes hacer dos cosas: comprarte el Arduino Mega (o compatible) que tiene 4 puertas serie o usar la librería SoftwareSerial que se distribuye con el entorno de desarrollo del Arduino (IDE).

La librería original solo proporcionaba una puerta software adicional además de la puerta hardware de serie y su velocidad estaba limitada a 9600 baudios. Estas limitaciones fueron superadas por la nueva librería NewSoftSerial escrita por Mikal Hart que fue incorporada por el equipo de desarrollo del Arduino a medidos de 2011 como la nueva SoftwareSerial. La siguiente tabla muestra las funciones incluidas en esta librería:

Función Descripción
begin Activa la puerta y establece la velocidad de transmisión en baudios
available Comienza a usar la puerta
isListening Devuelve la puerta active en este momento
listen Escucha a ese puerta y lo activa
end Termina el uso de ese puerta
read Lee datos de la puerta
write Escribe datos en la puerta

Esta nueva librería puede crear varias puertas serie software que pueden comunicar a velocidades de hasta 115,000 baudios. Pero toda esta funcionalidad adicional tiene un precio: el Arduino sólo puede escuchar o recibir datos de una puerta serie software a la vez (sin embargo, sí que puede transmitir por varias simultáneamente).

Cuando uses la librería con más de una puerta serie software tienes que planificar cuidadosamente tu sketch y el orden en el que recibirás los datos.

Consideremos un ejemplo: quieres conectar un GPS y un termómetro usando puertas serie software. Los dispositivos GPS suelen enviar sus datos en paquetes espaciados un segundo entre sí, de manera que tu sketch puede comenzar escuchando la puerta serie software y una vez ha recibido el primer paquete de datos pasar a escuchar la otra puerta software, procesar sus datos y devolver la escucha al GPS.

Este sketch muestra cómo funciona esto en la práctica:


  #include <SoftwareSerial.h>
  SoftwareSerial gpsPort(2, 3);
  SoftwareSerial thermPort(4, 5);
  void setup(){  gpsPort.begin(9600);
    thermPort.begin(9600);
  }
  void loop(){
    gpsPort.listen();
    while (gpsPort.available() > 0){
      char inByte = gpsPort.read();
    }
    thermPort.listen();
    while (thermPort.available() > 0){
      char inByte = thermPort.read();
    }
  }
  

Como puedes ver la librería SoftwareSerial es una contribución fantástica a tu entorno de desarrollo, pero tienes que tener cuidado al usarla con más de una puerta software.