Arduino coding library

Libraries

The Arduino environment can be extended through the use of libraries, just like most programming platforms. Libraries provide extra functionality for use in sketches, e.g. working with hardware or manipulating data. To use a library in a sketch, select it from Sketch > Import Library.
A number of libraries come installed with the IDE, but you can also download or create your own. See these instructions for details on installing libraries. There is also a tutorial on writing your own libraries. See the API Style Guide for information on making a good Arduino-style API for your library.

Official Arduino Libraries

Robotics

Libraries for controlling servo and stepper motors.

  • Servo — for controlling servo motors.
  • Stepper — for controlling stepper motors.

    Communication

    Libraries for using the SPI, I2C and UART protocols.

    • SPI — for communicating with devices using the Serial Peripheral Interface (SPI) Bus.
    • Wire — Two Wire Interface (TWI/I2C) for sending and receiving data over a net of devices or sensors.
    • SoftwareSerial — for serial communication on any digital pins.

    Connectivity

    Libraries to access radio modules on different IoT boards (Wi-Fi, BluetoothВ®, LoRaВ®, GSM, NB-IoT, Sigfox).

    • ArduinoIoTCloud — This library allows to connect to the Arduino IoT Cloud service. .
    • ArduinoBLE — library to use the BluetoothВ® Low Energy on a selection of boards.
    • Ethernet — for connecting to the Internet via Ethernet.
    • GSM — for connecting to a GSM/GRPS network with the GSM shield.
    • MKRWAN — library for MKR WAN 1300/1310, for connecting to LoRaWANВ® networks.
    • MKRGSM — library for MKR GSM 1400, for connecting to GSM/GPRS networks.
    • MKRNB — library for MKR NB 1500, for connecting to NB-IoT / Cat M1 networks.
    • SigFox — library for MKR FOX 1200, for connecting to the Sigfox network.
    • WiFi — library for the WiFi shield, for Internet connections via Wi-Fi.
    • WiFi101 — library for the MKR 1000 WiFi and WiFi101 shield, for Internet connections via Wi-Fi.
    • WiFiNINA — library for boards with a Wi-Fi NINA module, for Internet connections via Wi-Fi.

    Nano Family Libraries

    Libraries designed for embedded sensors on various Nano boards.

    • ArduinoAPDS9960 — library to use the gesture sensor APDS9960; it senses gesture, color, ambience illumination and proximity.
    • Arduino_LSM6DS3 — library to use the LSM6DS3 6 axis IMU available on the Arduino Nano 33 IoT and the Arduino UNO WiFi Rev. 2.
    • Arduino_LSM9DS1 — library to use the LSM9DS1 9 axis IMU available on the Arduino Nano 33 BLE and the Arduino Nano 33 BLE Sense.
    • Arduino_LSM6DSOX — library to use LSM6DSOX 6 axis IMU available on the Arduino Nano RP2040 Connect.
    • ArduinoLPS22HB — library to use the barometer and temperature sensor LPS22; it is an ultra-compact sensor which functions as a digital output barometer.
    • ArduinoHTS221 — library to use the HTS221 relative humidity & temperature sensor.
    • PDM — library to use the digital microphone MP34DT05 (Nano BLE Sense and Nano RP2040 Connect).

    Memory

    Libraries for memory management and data storage.

    • EEPROM — reading and writing to «permanent» storage.
    • SD — for reading and writing SD cards.

    Display

    Libraries for controlling different displays.

    • LiquidCrystal — for controlling liquid crystal displays (LCDs).
    • TFT — for drawing text , images, and shapes on the Arduino TFT screen.

    MKR Family Libraries

    Libraries listed below are specifically designed to work with Arduino MKR Family products.

    • Scheduler — manage multiple non-blocking tasks (also works with the Arduino Due).
    • RTCZero — Real Time Clock to schedule events.
    • ArduinoMKRGPS — library to be used with the Arduino MKR GPS Shield.
    • ArduinoMKRRGB — library to be used with the Arduino MKR RGB Shield.
    • ArduinoGraphics — library with graphic primitives, works also with the Arduino MKR RGB Shield.
    • ArduinoRS485 — library that implements RS485 on the Arduino MKR RS485 shield.
    • ArduinoMKRENV — library to read all MKR ENV Shield sensors.
    • ArduinoMKRTHERM — library to read the sensors connected to the Arduino MKR THERM Shield.
    • MKRIMU — library to read the acceleration, gyroscope, magnetic field and euler angles from the IMU on your MKR IMU shield
    • ArduinoMotorCarrier — library for controlling the MKR / Nano Motor Carriers.
    • Arduino_MKRIoTCarrier — library for controlling the MKR IoT Carrier

    Audio

    Libraries for audio sampling and playback.

    • AudioFrequencyMeter — library to sample an audio signal and get its frequency back.
    • AudioZero — library to play audio files from a SD card.
    • ArduinoSound — simple way to play and analyze audio data.
    • Audio — allows playing audio files from an SD card. For Arduino DUE only.
    • I2S — library for using the I2S protocol on SAMD21 (included in SAMD platform).

    Libraries for using your Arduino as either a USB host or device.

    • USBHost — communicate with USB peripherals like mice and keyboards.
    • Keyboard — send keystrokes to an attached computer.
    • Mouse — control cursor movement on a connected computer.

    Other

    • Firmata — for communicating with applications on the computer using a standard serial protocol.

    Retired Libraries

    A list of archived libraries for retired products.

    • CurieBLE — interact with smartphones and tablets with BluetoothВ® Low Energy.
    • CurieIMU — manage the on-board accelerometer and gyro.
    • CurieTimerOne — allows to use Timer functions.
    • CurieTime — allows to control and use the internal RTC (Real Time Clock).
    • Esplora — this library enable you to easily access to various sensors and actuators mounted on the Esplora board.
    • Robot — this library enables easy access to the functions of the Arduino Robot.
    • Bridge — enables communication between the Linux processor and the microcontroller on the YГєn.
    • Ciao — aims to simplify interaction between microcontroller and Linino OS allowing a variety of connections with most common protocols.

    Источник

    Пишем свою библиотеку под Arduino

    Одна из довольно сильных сторон любого программного обеспечени — это возможность единожды написанной программы быть использованной многократно как в виде отдельных частей, так и целиком, что и привело к зарождению концепции «библиотеки».

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

    Итак, как вы уже поняли, в этом рассказе пойдёт речь о библиотеках. Если бы мы попытались охватить тему библиотек под разные платформы и языки, то это получился бы чудовищных размеров рассказ, поэтому ограничимся небольшой сферой — библиотеками для Arduino.

    Рано или поздно любой проект для Arduino сталкивается с тем, что необходимо снова и снова использовать отдельные компоненты кода, так как они не только отработаны и содержат в себе удачные решения, но и к тому же разработчику хорошо знакомы.

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

    Если вы до этого уже интересовались сутью библиотек и пытались разбирать существующие библиотеки Arduino, то наверняка успели заметить, что они состоят из двух отдельных файлов, один из которых имеет расширение .cpp — что означает «С Plus Plus». Так как язык Wiring для Arduino базируется, по сути, на языке C++, то и решили создавать файлы с таким расширением. Видимо, создатели подумали, что «а ещё это просто красиво» ©. Второй же компонент библиотеки имеет расширение .h ( «Headers»):

    • Файл .cpp — называется файлом реализации.
    • Файл .h — называется файлом заголовков.

    Теперь рассмотрим эту концепцию разделения на два файла на примере конкретного кода.

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

    В принципе, весь этот код мы можем поместить в файл реализации, то есть с расширением .cpp.

    Я специально в качестве кода для примера взял код для esp32 (чуть ниже поясню почему).

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

    Те, кто давно работает с esp32, знают, что у неё некоторые функции отличаются от стандартных Arduino, теоретически мы могли бы не помещать в этот код импорт стандартных функций Arduino (ведь железка-то отличается!), но это будет неверно, так как в любом случае для инициализации пинов мы используем стандартную функцию pinMode() , кроме того, используется стандартная digitalWrite() . Поэтому, хочешь не хочешь, нам придётся включить строку:

    Повторюсь, всё как и в обычном скетче: подключаем только те библиотеки, которые реально используются в вашем коде.

    Далее мы обратим внимание вот на какой момент. Дело в том, что любая работа с какой-либо периферией требует её подключения с использованием вышеназванной функции pinMode() как минимум, а есть ещё разнообразные настройки, как в нашем случае.

    На первый взгляд всё хорошо и в файле присутствует подключение периферии. Однако самые внимательные уже заметили, что обычно подключение периферии в скетче у нас происходит внутри блока setup () <> .

    Однако в данном случае мы работаем над созданием библиотеки, и здесь никакого блока setup () <> не существует, и если мы попытаемся оставить всё как есть, и функции подключения периферии останутся лежать «просто так, снаружи», то код с подключённой нашей самодельной библиотекой не сможет скомпилироваться, и компилятор выдаст ошибку, если мы используем вот такое содержимое файла реализации (.cpp):

    Я сейчас говорю вот об этом участке, который лежит как «не пришей кобыле хвост»:

    И что же делать в таком случае? А вот что: необходимо функции инициализации пинов обернуть в функцию! То есть они не должны лежать снаружи, их нужно поместить внутрь функции (setupMotors() ) :

    Такой код благополучно скомпилируется, после того как мы создадим библиотеку, подключим её, а после вызовем вот эту функцию, внутри блока setup :

    Есть общее правило: если требуется некий функционал, который должен быть вызван внутри блока setup (для инициализации чего-либо), то он обязательно должен быть обёрнут в функцию.

    По сути, ваш файл реализации готов, и мы перейдём к файлу заголовков — с расширением .h.

    Для создания файла заголовков вам всего лишь нужно перенести туда названия ваших функций из файла с расширением .cpp в виде простого списка, с точкой с запятой в конце каждой строки:

    Файл тоже готов.

    Кстати говоря, тут интересный момент: вы сами определяете, какие функции будут доступны «снаружи» для пользователей! То есть этот набор функций, перечисленных в файле с расширением .h — и есть Application Programming Interface (API), то есть набор способов, с помощью которых можно взаимодействовать с вашей программой. Причём, как я уже говорил, у вас в файле реализации могут внутри быть ещё и другие функции, которые вы просто не пожелали дать для использования. Имеете право, почему нет.

    А теперь посмотрим чуть более сложный пример, «объектно-ориентированное программирование» у нас или где :)

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

    На самом деле, даже в этой ситуации, код ненамного усложнится:

    • Принципиально подобная библиотека, содержащая класс, также будет состоять из двух отдельных файлов, сохранённых с расширениями .cpp и .h.
    • Вся реализация методов также будет собрана в файле .cpp.
    • Сами методы также будут перечислены в файле с расширением .h.

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

    Чтобы всё это было несколько интересней, мы можем даже немного усугубить ситуацию, добавить модификаторы доступа: public и protected .

    В результате всё это будет выглядеть примерно так. Файл реализации (.cpp):

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

    Таким образом, путь до вашего примера будет выглядеть следующим образом:

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

    • В первом случае вы можете подключить заархивированную библиотеку изнутри Arduino IDE, пройдя по пути: скетч-подключить библиотеку-добавить zip. библиотеку .
    • Во втором случае вы можете просто положить её стандартную папку библиотек Arduino: C:\Arduino\libraries
    • Или если вы используете portable-версию среды разработки (т.к. я, например, ношу её везде с собой на флешке, и она не требует установки), то положить сюда: C:\arduino-1.8.19\portable\sketchbook\libraries (в моём случае используется версия Arduino 1.8.19 – у вас может быть другая).

    Как «вишенку на торте», мы можем настроить подсветку ключевых слов, так как, к сожалению, для импортированных библиотек подсветка автоматом не срабатывает. Для этого необходимо создать .txt файл, который надо положить рядом с вашими двумя файлами .cpp и .h

    В этом файле мы пишем, разделяя с помощью TAB-клавиши клавиатуры, определённое понятие и цвет его подсветки.

    У нас есть 3 варианта подсветки:

    • KEYWORD1: толстый оранжевый шрифт (классы, типы данных).
    • KEYWORD2: оранжевый шрифт (методы, функции).
    • LITERAL1: голубой шрифт (константы).

    Например, содержимое этого .txt файла может выглядеть следующим образом:

    Вот таким нехитрым образом мы можем обеспечить как многократное использование удачного кода, так и лёгкое его «расшаривание» тем, кто работает в этом же направлении.

    НЛО прилетело и оставило здесь промокод для читателей нашего блога:

    — 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS .

    Источник

  • Adblock
    detector