Как создать библиотеку в ардуино
Перейти к содержимому

Как создать библиотеку в ардуино

  • автор:

Установка библиотек в Arduino IDE

Многие скетчи (программы) работают с библиотеками. Библиотека облегчает работу с определённым модулем или одним из типов модулей. Например, если Вы хотите вывести текст на LCD дисплей без подключения библиотеки, то Вам нужно передать ему несколько байт команд и данных, что займет несколько строк кода, а главное, что Вам нужно знать тип микроконтроллера под управлением которого работает LCD дисплей, назначение команд которыми он управляется, знать архитектуру его памяти, адреса и назначение регистров, для чего потребуется найти и перечитать его datasheet. В то время как при написании кода с использованием библиотеки (например LiquidCrystal_I2C.h) Вы сможете вывести текст на дисплей вызвав всего одну функцию библиотеки: lcd.print(«my text»);

Перед тем как начать пользоваться методами и функциями библиотеки, её нужно скачать (загрузить на Ваш компьютер), установить (разместить в нужной папке) и подключить (вставить текст «#include » в скетч).

Скачивание библиотеки:

Если в наших уроках, описаниях или примерах используется библиотека, то мы указываем ссылку на скачивание этой библиотеки. Все наши библиотеки находятся в zip архиве, но не спешите доставать файлы из архива, это может не понадобиться, т.к. Arduino IDE сама может распаковывать архивы и размещать библиотеки в нужных папках (см. дальше).

Если Вы скачали архив библиотеки с сайта не указывая путь для сохранения файла, то скаченный (загруженный) Вами файл скорее всего находится в папке: Этот компьютер > Загрузки.

Установка библиотеки:

После того как Вы скачали (загрузили) библиотеку на свой компьютер, её нужно установить. Установить библиотеку можно вручную или сделать это средствами Arduino IDE:

Установка библиотеки средствами Arduino IDE:

Войдите в меню: Скетч > Подключить библиотеку > Добавить .ZIP библиотеку. .

В появившемся окне нажмите на иконку «Этот компьютер» и выберите папку «Загрузки». Если при скачивании ZIP архива с сайта, Вы указывали путь для сохранения файла, то вместо папки «Загрузки» укажите путь к файлу.

Выберите ZIP файл библиотеки, который Вы скачали. Название файла может не соответствовать названию библиотеки. После чего нажмите на кнопку «Открыть» (Open).

На этом установка библиотеки завершена, можно приступить к её подключению в скетч.

Установка библиотеки вручную:

Распакуйте скаченный Вами ZIP архив и поместите папку (имя папки обычно совпадает с названием библиотеки) из данного архива в папку: Этот компьютер > Документы > Arduino > libraries.

Если во время копирования Arduino IDE была запущена (открыта), то нужно закрыть все окна этой программы, после чего запустить (открыть) Arduino IDE и можно приступать к подключению библиотеки в скетч.

Примечание: папка libraries есть не только по указанному выше пути, но и в папке программы Arduino IDE (где находится файл arduino .exe). Скопировав библиотеку в эту папку, она тоже установится, но Мы не рекомендуем это делать. Дело в том, что программа Arduino IDE постоянно развивается и количество её версий постоянно растёт. Если Вы захотите установить новую версию Arduino IDE, то библиотеки находящиеся в папке Этот компьютер > Документы > Arduino > libraries, будут доступны и в старой, и в новой (установленной) версии Arduino IDE, а библиотеки находящиеся в папке libraries программы Arduino IDE старой версии (которая была установлена ранее) будут доступны только в ней (пока Вы их не скопируете в новую).

Подключение библиотеки:

Для того чтобы подключить библиотеку, нужно написать всего одну строку в начале скетча: «#include «, например:

#include // Подключение библиотеки iarduino_4LED для работы с 4 сегментными LED индикаторами.

Некоторые библиотеки работают используя методы и функции других библиотек, тогда нужно подключать две библиотеки, сначала подключается та, методы и функции которой использует вторая, например:

#include // Подключение библиотеки Wire для работы с шиной I2C #include // Подключение библиотеки LiquidCrystal_I2C для работы с LCD дисплеем по шине I2C // Библиотека LiquidCrystal_I2C использует методы и функции библиотеки Wire

Для работы с большинством библиотек, нужно создать объект (экземпляр класса библиотеки), через который будут доступны их функции и методы, например:

LiquidCrystal_I2C lcd(0x27,20,4); // lcd это объект библиотеки LiquidCrystal_I2C // через объект обращаются к функциям и методам библиотеки

Вместо lcd можно написать любое слово или сочетание букв и цифр, это название объекта через который можно обращаться к методам и функциям библиотеки. Если Вместо lcd Вы написали myLCD, то и ко всем методам и функциям библиотеки LiquidCrystal_I2C, нужно обращаться через указанное Вами имя объекта, например: myLCD.print(«my text»);

Примеры из библиотек:

Большинство библиотек содержат примеры. Это небольшие скетчи (программы) которые раскрывают функционал библиотеки. Наиболее удобный способ просмотра примеров, с помощью средств Arduino IDE. Выберите пункт меню: Файл > Примеры, откроется список с названиями библиотек у которых есть примеры. Наведите курсор на название библиотеки и Вы увидите список примеров содержащихся в ней, клик на примере приведёт к появлению нового окна Arduino IDE со скетчем примера.

Альтернативный способ просмотра примеров заключается в запуске файлов скетчей из папки:
путь > libraries > название библиотеки > examples > название примера.

Поиск библиотек:

Библиотеки можно искать самостоятельно, а можно воспользоваться функционалом Arduino IDE.

Выберите пункт меню: Скетч > Подключить библиотеку > Управлять библиотеками. .

Откроется «Менеджер библиотек», в котором можно найти интересующую Вас библиотеку введя её название в строку поиска, дополнительно можно установить пункты «Тип» и «Тема».

Нажатие на описании библиотеки приведёт к появлению вкладки «Версия» и кнопки «Установка». После нажатия на кнопку «Установка» можно приступать к подключению библиотеки в скетч «#include «.

Создание собственной библиотеки для Arduino

Arduino использует C++, поэтому, библиотеку придётся писать на этом языке. Для новой библиотеки нужно создать дополнительный класс с кодом, который будет взаимодействовать с устройством.

Нам понадобится один заголовочный файл .h, в котором будет описан ваш класс с функциями, константами. А также второй файл .cpp, в котором все эти объявленные функции и константы реализуются.

Для начала создадим в папке ..\libraries собственную папку с именем библиотеки, например, Kitty.

Внутри папки Kitty создаём файлы kitty.h и kitty.cpp.

Библиотеки нужно писать на C++. Если внутри нашей библиотеки используем какие-нибудь функции или объекты из стандартной библиотеки Arduino, то следует подключать соответствующий заголовочный файл Arduino.h.

 #include "Arduino.h" 

Есть два используемых способа создания класса. Если экземпляр класса может быть только один, то объявляется экземпляр в этом же .h-файле. Примеры таких классов — HardwareSerial, Serial.

Заголовочный файл не содержит выполняемого кода, а лишь определяет имена классов и методов в библиотеке.

Полностью заголовочный файл будет следующего содержания.

 /* Kitty.h - Library for cats. Created by Alexander Klimov, December 12, 2018. Released into the public domain. */ #ifndef kitty_h #define kitty_h #include "Arduino.h" class Kitty < public: Kitty(); void init(); void meow(); private: int _counter; >; #endif 

Команда #ifndef предотвращает многократный импорт библиотеки.

Закрытый раздел private содержит переменную. В нашем примере она просто для демонстрации и не используется.

В общедоступном разделе public указаны конструкторы и методы.

Теперь реализуем созданные функции в файле kitty.cpp:

 #include "Arduino.h" #include "kitty.h" // конструктор вызывается всегда при создании экземпляра класса Kitty Kitty::Kitty() < >void Kitty::init() < Serial.begin(9600); >// просто говорим "Meow" void Kitty::meow()

Теперь нужно перезапустить Arduino IDE, если она у вас была запущена. Откройте меню Sketch | Include Library. Если всё было сделано правильно, то увидите собственную библиотеку.

Create Library

После создания библиотеки вы можете вносить изменения, которые будут учитываться автоматически.

Если выбрать свою библиотеку, то в скетче появится строка:

 #include

Это означает, что библиотека подключена и мы можем её использовать в скетче.

 #include Kitty kitty; // создаём экземпляр нашего класса void setup() < kitty.init(); >void loop() < kitty.meow(); // мяукаем в Serial Monitor delay(1000); >

Запускаем скетч, открываем Serial Monitor и наблюдаем за мяуканьем кота. Жрать просит!

Правилом хорошего тона считается создать дополнительный файл keywords.txt и папку examples.

Файл keywords.txt содержит объявления ключевых слов вашей библиотеки, имена типов, методов, функций, констант. Это поможет редактору раскрасить указанные слова соответствующими цветами. Синтаксис файла (в качестве разделителя используйте TAB):

 ####################################### # Syntax Coloring Map For Kitty ####################################### ####################################### # Datatypes (KEYWORD1) ####################################### Kitty KEYWORD1 ####################################### # Methods and Functions (KEYWORD2) ####################################### meow KEYWORD2 init KEYWORD2 ####################################### # Constants (LITERAL1) ####################################### 

Перезапустите Arduino IDE ещё раз. Теперь названия вашего класса и её функций будут подсвечены.

В папке examples создаются примеры использования в формате pde. Создайте необходимый скетч, переименуйте его в нужный формат и снова перезапустите IDE. Примеры станут доступны для использования.

О созданной библиотеке можно сообщить сообществу на сайте playground.arduino.cc/Main/LibraryList. Можно создать zip-архив или выложить на GitHub.

Как создать библиотеку в ардуино

Как только вы освоитесь с программным обеспечением Ардуино и в совершенстве овладеете стандартными функциями, вам наверняка захочется расширить возможности вашего Ардуино с помощью дополнительных библиотек.

Что такое библиотека?

Библиотека — это набор функций, предназначенных для того, чтобы максимально упростить работу с различными датчиками, ЖК-экранами, модулями и пр. Например, встроенная библиотека LiquidCrystal позволяет легко взаимодействовать с символьными LCD-экранами. Существуют сотни дополнительных библиотек, которые можно скачать в Интернете. Стандартные библиотеки Ардуино и ряд наиболее часто используемых дополнительных библиотек перечислены в справке. Но перед тем, как использовать дополнительные библиотеки, необходимо сперва установить их.

Как установить библиотеку

Чаще всего библиотеки выкладываются в виде ZIP-архива или просто папки. Название этой папки является названием библиотеки. Внутри папки будет файл с расширением .cpp, файл с расширением .h, а также текстовый файл keywords.txt, папка с примерами examples и другие файлы, требуемые библиотекой.

Автоматическая установка

Начиная с версии 1.0.5, устанавливать сторонние библиотеки можно прямо в среде разработки.

Не распаковывайте скачанный архив с библиотекой — оставьте его, как есть.

В среде разработки Ардуино выберите меню Sketch > Import Library. В самом верху выпадающего списка выберите пункт Add Library (Добавить библиотеку).

Появится диалоговое окно, предлагающее вам выбрать библиотеку, которую вы хотели бы добавить. Перейдите к скачанному zip-файлу и откройте его.

Снова откройте меню Sketch > Import Library. Вы должны увидеть новую библиотеку в самом низу выпадающего списка. Теперь библиотеку можно использовать в программах.

zip-файл будет уже распакован в директории libraries внутри вашей рабочей папки Ардуино.

Примечание: после выполнения указанных действий библиотеку можно будет полноценно использовать в своих программах, однако примеры из установленной библиотеки появятся в меню File > Examples только после перезапуска среды Ардуино.

Установка вручную

Перед установкой библиотеки закройте среду разработки Ардуино.

Затем распакуйте ZIP-архив с библиотекой. Допустим, вы устанавливаете библиотеку «ArduinoParty» — распакуйте файл ArduinoParty.zip. В нем должна быть папка ArduinoParty с файлами ArduinoParty.cpp и ArduinoParty.h. (Если файлы с расширением .cpp и .h лежат не в папке, то необходимо ее создать. В данном случае вам нужно создать папку с именем ArduinoParty и перенести в нее все файлы из ZIP-архива, например — ArduinoParty.cpp и ArduinoParty.h).

Перетащите папку ArduinoParty в директорию с библиотеками Ардуино. В Windows она будет лежать примерно здесь: «My Documents\Arduino\libraries», у пользователей Mac — здесь: «Documents/Arduino/libraries», а в Linux-системах директория «libraries» будет внутри рабочей папки со скетчами.

После перемещения ваша директория с библиотеками должна выглядеть примерно так (под Windows):

My Documents\Arduino\libraries\ArduinoParty\ArduinoParty.cpp My Documents\Arduino\libraries\ArduinoParty\ArduinoParty.h My Documents\Arduino\libraries\ArduinoParty\examples .
Documents/Arduino/libraries/ArduinoParty/ArduinoParty.cpp Documents/Arduino/libraries/ArduinoParty/ArduinoParty.h Documents/Arduino/libraries/ArduinoParty/examples .

и аналогично на Linux.

Помимо файлов .cpp и .h здесь могут быть и другие файлы — просто убедитесь, что все они теперь лежат здесь.

(Если файлы .cpp и .h расположены в корне папки «libraries» или вложены внутрь еще одной папки, то скачанная библиотека работать не будет. Например:

Documents\Arduino\libraries\ArduinoParty.cpp and Documents\Arduino\libraries\ArduinoParty\ArduinoParty\ArduinoParty.cpp

— не рабочий пример.)

Перезапустите среду Ардуино. Убедитесь, что новая библиотека появилась в меню Sketch->Import Library.

Вот и все! Вы установили библиотеку!

В основе этого урока лежит текст автора Limor Fried.

Текст данного руководства опубликован под лицензией Creative Commons Attribution-ShareAlike 3.0. Примеры кода, встречающиеся в руководстве, являются свободным контентом.

Как создать библиотеку в ардуино

Создание собственной библиотеки для Ардуино

Этот документ поможет разобраться, как создавать библиотеки для Ардуино. Сначала будет рассмотрена программа, генерирующая сигналы азбуки Морзе, а затем даны пояснения, как вынести ее функции в отдельную библиотеку. Использование библиотек позволяет другим людям использовать написанный вами код, а также легко обновлять его по мере выхода новых версий вашей библиотеки.

Начнем с программы, генерирующий простой сигнал азбуки Морзе:

int pin = 13; void setup() < pinMode(pin, OUTPUT); >void loop() < dot(); dot(); dot(); dash(); dash(); dash(); dot(); dot(); dot(); delay(3000); >void dot() < digitalWrite(pin, HIGH); delay(250); digitalWrite(pin, LOW); delay(250); >void dash()

Если запустить эту программу, то можно убедиться, что она подает сигнал SOS (сигнал бедствия) светодиодом, подключенным к 13 выводу.

В программе есть несколько участков, которые нам необходимо объединить в библиотеку. Во-первых, конечно же, это функции dot() и dash(), которые и формируют сигнал. Во-вторых, это переменная pin, которая используется функциями для того, чтобы знать, с каким именно выводом необходимо работать. И, наконец, в программе есть вызов функции pinMode(), которая заставляет работать указанный вывод в качестве выхода.

Пора бы сделать из нашей программы библиотеку!

Для этого вам понадобится, по меньшей мере, два файла: заголовочный файл (с расширением .h) и файл с исходным кодом (с расширением .cpp). Заголовочный файл представляет собой описание библиотеки: чаще всего, это просто список всего, что в ней есть. Файл-исходник содержит непосредственно программный код библиотеки. Назовем нашу библиотеку «Morse», соответственно, наш заголовочный файл будет «Morse.h». Давайте посмотрим, что внутри этого файла. Поначалу содержимое файла может показаться вам немного странным, однако все станет на свои места, как только вы увидите исходник, идущий «в комплекте».

Структура заголовочного файла представляет собой набор строк, каждая из которых соответствует одной функции библиотеки. Эти строки находятся внутри класса, который также может включать в себя все необходимые переменные:

class Morse < public: Morse(int pin); void dot(); void dash(); private: int _pin; >;

Класс — это просто набор функций и переменных, собранных в одном месте. Эти функции и переменные могут быть общедоступными (public) — т.е. могут вызываться людьми, работающими с вашей библиотекой, или внутренними (private) — которые видны только в пределах самого класса. У каждого класса есть специальная функция, называемая конструктором (constructor), которая предназначена для создания экземпляра (instance) класса. Конструктор имеет такое же имя, как и класс, и не возвращает никаких значений.

Помимо этого, есть еще несколько деталей, которые необходимо включить в заголовочный файл. Одна из них — это оператор #include, который позволяет подключить к нашей библиотеке стандартные типы и константы языка Ардуино (такой оператор добавляется автоматически в коде обычных программ, но в библиотеке его нужно дописать самому). Он выглядит примерно так (и располагается перед объявлением показанного выше класса):

#include "Arduino.h"

И последнее: общепринято заключать все содержимое заголовочного файла в странную конструкцию:

#ifndef Morse_h #define Morse_h // здесь располагается оператор #include и весь остальной код. #endif

По сути, это предотвращает возможные проблемы на случай, если кто-то подключит вашу библиотеку дважды.

В завершение, наверху библиотеки обычно располагают комментарий, содержащий название библиотеки, краткое описание того, что она делает, автора, дату создания и тип лицензии.

Давайте взглянем на заголовочный файл и посмотрим, что у нас получилось:

/* Morse.h - Library for flashing Morse code. Created by David A. Mellis, November 2, 2007. Released into the public domain. */ #ifndef Morse_h #define Morse_h #include "Arduino.h" class Morse < public: Morse(int pin); void dot(); void dash(); private: int _pin; >; #endif

А теперь давайте разберем содержимое исходного файла — Morse.cpp.

Вначале файла идет несколько операторов #include, которые предоставляют остальной программе доступ к стандартным функциям Ардуино и к объявлениям функций внутри заголовочного файла:

#include "Arduino.h" #include "Morse.h"

Затем идет конструктор, который описывает, что должно произойти, когда кто-то создаст экземпляр вашего класса. В данном случае пользователь указывает, какой именно вывод он хотел бы использовать. Мы конфигурируем этот вывод в качестве выхода и сохраняем его во внутреннюю переменную для последующего использования в других функциях:

Morse::Morse(int pin)

В этом коде есть непонятные моменты. Во-первых, конструкция Morse:: перед именем функции. Это значит, что функция является частью класса Morse. То же самое вы увидите при объявлении других функций этого класса. Второй момент — это знак подчеркивания в имени нашей внутренней private-переменной, _pin. Вообще-то эта переменная может иметь любой имя, главное, чтобы она соответствовала имени, объявленному в заголовочном файле. Добавление подчеркивания перед именем переменной — это общепринятая методика, применяющаяся для того, чтобы явно отличать private-переменные. Кроме того, подчеркивание позволяет программе отличить private-переменную от аргумента функции (pin в данном случае).

Далее идет сам код из первоначальной программы (ну наконец-то!). Он выглядит абсолютно точно так же, за исключением приставки Morse:: перед именами функций и переменной _pin вместо pin:

void Morse::dot() < digitalWrite(_pin, HIGH); delay(250); digitalWrite(_pin, LOW); delay(250); >void Morse::dash()

В завершение, хорошим тоном считается добавление комментария в начале исходного файла. Посмотрим что получилось:

/* Morse.cpp — Library for flashing Morse code. Created by David A. Mellis, November 2, 2007. Released into the public domain. */ #include «Arduino.h» #include «Morse.h» Morse::Morse(int pin) < pinMode(pin, OUTPUT); _pin = pin; >void Morse::dot() < digitalWrite(_pin, HIGH); delay(250); digitalWrite(_pin, LOW); delay(250); >void Morse::dash()

И это все, что необходимо сделать (есть еще некоторые возможности, но мы поговорим о них чуть позже). Теперь попробуем нашу библиотеку в действии.

Прежде всего, создайте папку Morse в директории libraries внутри вашей рабочей папки с проектами. Скопируйте или переместите файлы Morse.h и Morse.cpp в созданную папку. Теперь запустите среду разработки Ардуино — в меню Sketch > Import Library вы должны увидеть библиотеку Morse. Она будет автоматически компилироваться вместе с использующими ее программами. Если этого не произойдет — проверьте ее расширение и убедитесь, что файл действительно имеет формат .cpp или .h (без дополнительных расширений вроде .pde или .txt, например).

Попробуем переписать нашу старую программу «SOS» с использованием новой библиотеки:

#include Morse morse(13); void setup() < >void loop()

По сравнению с предыдущей версией в программе появилось несколько отличий (кроме того факта, что часть кода перенесена в библиотеку).

Во-первых, мы добавили оператор #include в начало программы, который включает библиотеку Morse в отправляемый плате код. Поэтому, если в программе библиотека больше не используется, желательно удалить #include для экономии памяти микроконтроллера.

Во-вторых, теперь мы создаем экземпляр класса Morse с именем morse:

Morse morse(13);

При выполнении этой строки (а фактически, это произойдет даже до функции setup()) будет вызван конструктор класса Morse, которому будет передан указанный здесь аргумент (в данном случае 13).

Обратите внимание, что теперь наша функция setup() пуста, поскольку вызов pinMode() в данном случае происходит внутри библиотеки (при создании экземпляра класса).

Ну и наконец, вызов функций dot() и dash() теперь необходимо предварять префиксом morse. — именем того экземпляра, который мы хотим использовать. Мы можем создать несколько экземпляров класса Morse, каждый со своим выводом, хранимым во внутренней переменной _pin только в пределах этого экземпляра. Указывая определенный экземпляр класса при вызове функции, мы тем самым задаем, переменными какого экземпляра должна оперировать та или иная функция. То есть, если у нас два экземпляра:

Morse morse(13); Morse morse2(12);

то внутри функции morse2.dot() переменная _pin будет равна 12.

При написании новой программы, вы, наверняка заметите, что среда разработки не распознает и не подсвечивает элементы созданной нами библиотеки. К сожалению, IDE Ардуино не умеет автоматически распознавать и интерпретировать то, что мы объявили внутри библиотеки (кстати, было бы хорошо добавить эту функцию), поэтому ей нужно немного помочь. Для этого создайте файл keywords.txt в директории Morse и запишите в него следующее:

Morse KEYWORD1 dash KEYWORD2 dot KEYWORD2

Каждая строка должна содержать ключевое слово, символ табуляции (не пробелы) и тип ключевого слова. Классы подсвечиваются оранжевым и должны иметь тип KEYWORD1; функции — коричневым и должны быть типа KEYWORD2. Для того, чтобы внесенные изменения вступили в силу, необходимо перезапустить среду Ардуино.

Также неплохо было бы снабдить библиотеку примером работы с ней. Для этого, создайте папку examples в директории Morse и переместите (либо скопируйте) в нее папку с нашей программой (назовем ее SOS). (Отыскать программу можно с помощью команды Sketch > Show Sketch Folder). Если вы перезапустите среду Ардуино (честно слово, это в последний раз) — то увидите пункт Library-Morse в меню File > Sketchbook > Examples с вашим примером. Можете добавить немного комментариев, объясняющих, как пользоваться вашей библиотекой.

Если вы захотите посмотреть готовую библиотеку (с примером и ключевыми словами) — можно сказать ее отсюда: Morse.zip.

На сегодня, пожалуй, это все, но в ближайшее время возможно появится расширенное руководство по созданию библиотек. А тем временем, если у вас возникнут проблемы или появятся предложения, пожалуйста, пишите их на форум.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *