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