Arduino a knihovny

Knihovny pro Arduino jsou, zjednodušene řečeno, balíčky obsahující nové funkce, které lze využívat ve vašich programech. Vývojové prostředí Arduina (Arduino IDE) obsahuje několik základních knihoven připravených k okamžitému použití. Například EEPROM pro čtení a zápis interní non-volatilní paměti, Wire pro sériovou komunikaci, Stepper pro ovládání krokových motorů a několik dalších.

Přehled dostupných knihoven v Arduino IDE.
Přehled dostupných knihoven v Arduino IDE.

Tyto základní knihovny však nemusí vždy stačit, a proto existuje jednoduchý způsob, jak nové knihovny přidat a využít ve vlastních projektech.

Co to jsou knihovny?

Programovací jazyk Arduina je syntakticky podobný jazyku C a C++. Obsahuje podobné datové typy, klíčová slova, dokonce i preprocesor. Z jazyka C++ si pak bere třídy.

Knihovna není nic jiného, než dvojice souborů s koncovkou .c, nebo .cpp a .h. Je to stejný princip jako u jazyka C. Soubory c nebo cpp obsahují vlastní kód knihovny a soubory h pak předpisy jednotlivých tříd a funkcí.

Jestli nechcete psát vlastní knihovny, nemusíte se tímto zabývat. Tyto informace ale využijete při psaní vlastních knihoven, nebo při optimalizaci vašeho kódu (například pokud budete psát velký projekt, který se již nevleze to paměti).

Jak používat knihovny?

Pokud chceme v našem programu využít nějakou knihovnu, která je součástí vývojového prostředí (viz obrázek nahoře), stačí na začátek zdrojového kód připsat tento řádek:

#include <jmeno_knihovny.h>

například

#include <EEPROM.h>

Tím se nám automaticky načte knihovna pro čtení interní EEPROM a my tak můžeme používat její funkce:

hodnota = EEPROM.read(adresa);
EEPROM.write(adresa, hodnota);

V jednom programu lze načíst libovolné množství knihoven. Jelikož ale každá knihovna zvětší výsledný program, jsme omezeni vnitřní pamětí Arduina.

Ostříleným programátorům můžu prozradit jak to přesně funguje — hlavičkový soubor knihovny obsahuje předpis třídy a všechny dostupné metody, při překladu programu pak Arduino IDE automaticky linkuje všechny potřebné knihovny do jedné výsledné binárky.

Kde získat další knihovny?

Pokud se stane, že základní knihovny neobsahují funkce, které potřebujete, máte dvě možnosti — najít knihovnu na internetu, nebo si napsat vlastní.

Vzhledem k tomu, že Arduino je open-source a open-hardware projekt, spousta uživatelů ve stejném duchu sdílí své knihovny s Arduino komunitou. Nejlepší místo, kde lze nalézt zajímavé knihovny je oficiální Arduino wikipedie. Jsou zde knihovny zaměřené na matematické operace, práci s datem a časem, implementaci obecných algoritmů a datových struktur a další. Pokud potřebujete nějakou neobvyklou funkci, rozhodně se sem podívejte.

Pokud potřebujete něco hodně specifického a nemůžete žádnou vhodnou knihovnu nalézt, můžete si ji napsat sami.

Pojďme se teď podívat, jak přidávat do Arduino IDE vlastní knihovny a jak psát knihovny vlastní.

Stažení již existující knihovny

Od verze Arduino IDE 0017 lze uživatelské knihovny ukládat do adresáře s vašimi programy (v Arduino světě se jim říká sketch). Cestu k tomuto adresáři lze zjistit například v nastavení.

Nastavení defaultního adresáře pro programy a knihovny.
Nastavení defaultního adresáře pro programy a knihovny.

Na operačním systému Mac OS je většinou tento adresář v ~/Documents/Arduino/libraries/, na MS Windows pak My Documents\Arduino\libraries\. Všechny stažené soubory knihovny se tak ukládají do adresáře libraries.

Dejme tomu, že chceme používat knihovnu pro datum a čas. Stažený ZIP archiv rozbalíme do výše zmíněného adresáře, kde vzniknou tyto podadresáře:

libraries/Time
libraries/TimeAlarms
libraries/DS1307RTC

Pokud máme Arduino IDE spuštěné, restartujeme ho. Teď již bychom měli v seznamu dostupných knihoven vidět nově přidané soubory.

Nově přidané knihovny pro práci s datem a časem.
Nově přidané knihovny pro práci s datem a časem.

Od tohoto okamžiku je lze normálně používat:

#include <Time.h>

Tvorba vlastní knihovny

Otázky & Odpovědi
Pokud si chcete napsat vlastní knihovnu pro Arduino a nejste si jistí jak začít, nebo jste narazili na problém, který se vám nedaří vyřešit, zeptejte se nás na našem webu Otázky & Odpovědi.

Toto je téma pro zdatné programátory a pokročilé uživatele Arduina. Napsat knihovnu, která obsahuje pár funkcí není nijak obtížné, ale napsat ji dobře a přenositelně, aby ji bylo možné používat na různých verzích Arduina (Uno, Mega, Nano, …) vyžaduje velké znalosti.

Podrobný tutoriál jak vytvořit jednoduchou knihovnu lze nalézt na Arduino wikipedii — Writing a Library for Arduino. Tento návod podrobně popisuje tvorbu knihovny pro vysílání Morseova kódu.

Informace o tom, co by měly obsahovat soubory .c a .h obsahuje vynikající učebnice jazyka C od Pavla Herouta (ISBN 80-7232-220-6, kapitola 9.4 Oddělený překlad souborů — II.). Ačkoliv tato kniha nemá s Arduinem nic společného, popisuje jazyk C a zmiňovaná kapitola pak obsahuje obecně použitelné rady.

Velmi dobrý zdroj informací jsou pak zdrojové kódy cizích knihoven. Ty je vhodné projít i v případě, že chcete knihovnu pouze používat. Ne vždy je totiž v dokumentaci řečeno vše potřebné.

Články v sérii