0.00(0 items )

No products in the cart.

Crea tus propias librerías de Arduino by Opiron

Las librerías (de library en inglés), son un conjunto de archivos utilizados para el desarrollo de programas. Las librerías contienen funciones y variables. Para Arduino, podemos encontrar librerías para sensores determinados, para hacer música, para programar motores, etc. Es como ir a una biblioteca y buscar libros de diferentes temáticas para hacer un trabajo (el sketch). En este tutorial explicaremos paso por paso cómo crear librerías de Arduino.

Hay muchos lugares dónde podemos ir a buscar librerías, como github o arduino playground, pero a veces ninguna se ajustará exactamente a lo que buscamos. En ese momento tendremos que crear nuestra propia librería. Vamos a ver qué software y qué hardware necesitamos antes de empezar.

Hardware necesario

Cualquiera de las placas Arduino:

Software necesario

Necesitaremos:

¿Por qué crear librerías?

En principio no es necesario que creemos librerías cuando creamos nuevos sketches, ya que podemos simplemente hacer un sketch más largo y transferirlo a Arduino. Sin embargo, las librerías nos ayudarán a crear sketches más elegantes y sobre todo reusar funciones que hayamos creado. Seguro que si habéis desarrollado varios programas os habréis dado cuenta que programáis una y otra vez la misma función. ¿Por qué no sistematizar esa función y tenerla en forma de librería? Además, las librerías ayudan a compartir trabajo con la comunidad de Arduino, ya que no sólo tú, sino también otro usuario puede usar tus funciones para su código.

Por ejemplo, imaginemos que hemos desarrollado algunas funciones para poder interactuar con nuevos sensores y que vuestro sketch funciona perfectamente. Es una buena idea reescribir tu sketch en alguna librería para después, cuando se vuelva a usar ese mismo sensor, hacer uso de la librería ya creada.

Resumiendo, crear librerías tiene las siguientes ventajas:

  • Reutilización de código.
  • Compartir código con la comunidad.
  • Hace más versátil el código.

¿Qué archivos necesitamos?

Necesitaremos crear dos archivos: el header con extensión .h, y el código fuente con extensión .cpp. Opcionalmente, podemos crear una carpeta con ejemplos.

librería,  cabecera, cpp, arduino

Contenido de una librería.

Como ejemplo, la librería DHT22 contiene los archivos DHT.cpp, DHT.h y una carpeta llamada “examples” con programas de ejemplo.

¿Y qué contiene cada archivo?

El archivo de cabecera .h es un listado de lo que va a necesitar el programa que luego desarrollemos. El archivo con código fuente .cpp contiene el código que escribiríamos en el programa. Por ejemplo, si en el archivo de cabecera hemos listado una función, en el archivo .cpp habrá el código de la función. Luego veremos con más detalle qué contiene cada archivo. Ahora vamos a ver unos ejemplos. Un archivo .h tiene la pinta siguiente:

/* NombreLibreria.h – Descripción de la librería
Creada por Autor, Fecha
Lanzada bajo licencia…*/
#ifndef NombreLibreria_h
#define NombreLibreria_h
#include "arduino.h"
class NombreLibreria{
nombre constructor
public:
Funcion(int pin);
private:
int pin;
}:
#endif

Vamos a desgranar un poco el archivo “.h” y el archivo “.cpp” para comprender qué contiene cada uno de ellos. El archivo “.h” está formado por clases. Una clase contiene atributos (variables), y operaciones (funciones). Un ejemplo sería esto:

class NombreLibreria{
nombre constructor
Funcion(int variable);
int variable;
}:

Además, los atributos / operadores de una clase pueden ser públicos o privados. Los miembros public son visibles fuera de la clase y los miembros prívate son ocultos fuera de la clase. Un ejemplo sería así:

class NombreLibreria{
public:
nombre constructor;
Funcion(int variable);
private:
int variable;
}:

A las clases además se le añade al principio un comentario con el nombre de la librería, el autor, la fecha en la que fue creada, la licencia (si tiene), y el siguiente código:

/* NombreLibreria.h – Descripción de la librería
Creada por Autor, Fecha
Lanzada bajo licencia…*/
#ifndef NombreLibreria_h
#define NombreLibreria_h
#include "arduino.h"

El archivo “arduino.h” se añade porque da acceso a los tipos estándar y las constantes del lenguaje Arduino. Al final del archivo ponemos:

#endif

Siguiendo la línea del archivo “.h”, un archivo “.cpp” tiene un aspecto parecido a esto:

/*
  Libreria.cpp - Descripción libreria
Creada por Autor, Fecha
Lanzado bajo licencia...
*/
#include "arduino.h"
#include "Libreria.h"
Nombreclase:Nombreclase(int pin)
{
//código
}

void Nombreclase::Nombrefuncion()
{
  //código
 }

Ahora veremos un ejemplo para que creemos una librería a  partir de un código paso a paso.

Ejemplo

Para entender mejor todo, ahora vamos a hacer un ejemplo. Nos basaremos en un código simple  y conocido por todos: el ejemplo de Blink de Arduino, cuyo código es:

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  This example code is in the public domain.
 */
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

Primero, para facilitarnos el trabajo, nos bajaremos un .zip que contiene plantillas con todo lo necesario para poder crear nuestra propia librería. Hemos creado una librería plantilla para que os sea más fácil llevar a cabo vuestras librerías. Vamos al siguiente enlace:

Luego lo descomprimimos en el directorio de librerías de nuestro Arduino (si tenéis dudas, el directorio lo podéis ver en el IDE de Arduino en Archivo/Preferencias/Ubicación del Sketchbook). Renombramos la carpeta con el nombre de Blink, que será el nombre que le daremos a la librería. Luego, abrimos el archivo “Test.h” y renombramos donde ponga Test por Blink. También tenemos que añadir a continuación de “Blink_h” un include del “arduino.h” y borramos la línea donde pone “WConstants.h”.

A fin de cuentas, el archivo Blink.h nos queda así:

/*
Blink.h - Librería alternativa al código Blink
Creada por Opiron Electronics, Anton Girod, Mayo'2013
Lanzado bajo licencia Creative Commons Share Alike 3.0 
*/
#ifndef Blink_h
#define Blink_h
#include "arduino.h"

class Blink {  
  public:
   Blink(int pin);
   void parpadeo();   
  private:
   int _pin;
};
#endif

En cuanto al archivo “.cpp”, seguiremos una mecánica parecida a lo que hemos hecho con el archivo “.h”:

/*
  Blink.cpp - Librería alternativa al código Blink
Creada por Opiron Electronics,  A.Girod Mayo'2013
Lanzado bajo licencia Creative Commons Share Alike 3.0 
*/
#include "arduino.h"
#include "Blink.h"

Blink::Blink(int pin)
{
  pinMode(pin, OUTPUT);
  _pin = pin;
}

void Blink::parpadeo()
{
  digitalWrite(_pin, HIGH);   //enciende
  delay(1000);                   //1s
  digitalWrite(_pin, LOW);    //apaga
  delay(1000);                   //1s
 }

Fijaros que en la función llamada “parpadeo” está el código que poníamos en el loop() antes, y que el constructor “Blink” hace lo que hacía setup() antes. A fin de cuentas, eso quiere decir que los objetos tipo Blink harán lo que el setup() antes.Una vez comprendido esto, el código a subir a Arduino es el siguiente:

#include <Blink.h>
Blink blinke(13); // Creo un objeto que llamo blinke de tipo Blink referenciado al pin 13
void setup() {}
void loop(){
  blinke.parpadeo(); //blinke llama a parpadeo
}

Como habréis comprobado, el código al final hace exactamente lo mismo que el ejemplo de “blink” de Arduino, pero ocupa mucho menos y no tengo que preocuparme de escribir instucción por instrucción todo lo de antes, ya que ahora me alcanza con llamar a la función “parpadeo”.

Otras opciones interesantes

Keywords

Otra opción interesante es colorear las “palabras clave” de la librería, como nombres de funciones o variables. Para conseguirlo, tenemos que crear un archivo llamado “keywords.txt”. El directorio sería en la misma carpeta que los archivos .h y .cpp. Por ejemplo, la librería ultrasonic del sensor HC-SR04 contiene los siguientes archivos:

keywords, arduino, libreria

Para colorear las palabras clave de la librería tenemos que añadir un fichero .txt llamado “keywords”.

Si abrimos el archivo keywords veremos las palabras clave que luego serán coloreadas en el IDE de Arduino:

keywords, arduino, libreria

Cada línea tiene el nombre de la palabra clave, seguido de un tabulador.

Es decir, que el IDE de Arduino va a colorear las palabras Ultra, Time y Range. Cada línea tiene el nombre de la palabra clave, seguido de un tabulador-

Plantilla

Una buena opción para empezar es descargarnos un .zip tipo plantilla qué contiene los diferentes archivos preparados para que podamos empezar a trabajar:

La librería la hemos desarrollado nosotros mismos, pero es de dominio público, por lo que animamos a cualquiera a modificarla según sus necesidades, y además agradeceremos que aportéis sugerencias de mejora.

Agradecemos tu feedback

Agradecemos tu feedback cuando has leído un tutorial, y puedes hacerlo de diferentes maneras:

  • Si te ha gustado el tutorial te agradecemos que lo compartas con la comunidad de usuarios.
  • Si tienes dudas respecto al tutorial, contacta con nosotros mediante el foro.
  • Si te gustaría recibir formación relacionada con Programación, Arduino, etc, podemos ayudarte, contacta con nosotros mandando un correo a info@opiron.com.
  • Si tienes alguna sugerencia de mejora, o simplemente te gustaría subir un tutorial a nuestra web, será bueno para nosotros. Contacta con nosotros en info@opiron.com.
  • ¿Te gustaría participar en nuestro chat en vivo? Todos los viernes estamos en Google Plus. Podrás exponer tus proyectos y conocernos. También te invitamos a seguirnos en Facebook twitter.
  • Si necesitas un componente y te gusta lo que hacemos, visita nuestra tienda.

El tutorial y su contenido – texto, imágenes y código-  están bajo licencia Creative Commons Attribution-ShareAlike 3.0 License.

Entradas relacionadas

.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de sus datos para estos propósitos. Ver
Privacidad