Libraries for Arduino

A collection of contributed libraries. You can add your own libraries here. The standard library page is located here.

Navigation

Audio

  • SimpleSDAudio Play audio files with your Arduino in decent quality from SD card, only very few additional hardware required, easy to use library. Mono, stereo and even 16-bit.

  • toneAC library - Twice the volume of the standard tone library (AC push/pull). Also higher/lower frequencies, smaller compiled size, bug fixes, volume setting, and uses timer 1 which may free up conflicts.

  • Mozzi sound synthesis library with familiar audio and control rate synthesis units like oscillators, delays, filters and envelopes. Includes documentation and example sketches. Open source and extendable.

  • SID Emulator Library - MOS 6581 SID sound chip emulator library

  • SMARTWAV - Library for the SmartWAV Audio Processor board.

  • LPM11162 - Library for use of LPM11162 audio module.

  • VS1053 Audio Codec Chip- Ogg Vorbis/MP3/AAC/WMA/FLAC/MIDI

  • µSpeech libray - Speech recognition library for arduino. For people behind Chinese firewall use this link.

  • PCM/WAV Audio Library - Standards compliant WAV audio library for playback and recording of computer friendly audio files using only timer pins. Supports info tags, dual track playback, wireless streaming and more. Arduino Due not supported yet.

  • Wireless Audio Library - Audio library for wireless streaming/multicasting of live digital audio from a microphone or virtually any source, via NRF24L01 radio modules. Also supports wireless output from the TMRpcm WAV audio library.

  • Arduino DUE I2S Driver - Configures the Arduino DUE's SSC controller to operate in I2S mode for interfacing with external CODECs. Receive and playback are supported.

  • Arduino FFT - frequency analysis of audio or other analog signals.

  • Advanced Tone - produce square-wave of the specified frequency (and 50% duty cycle) on any Arduino pin.

  • PCM2705 Library - Library for controlling playback on a PCM2705 USB DAC .

Cloud

  • Exosite send and receive data to/from the cloud by using Exosite's Cloud Data Platform.

Menu

Libraries that simplify implementing a menu. The Arduino sends a (human-readable) list of option (typically to a 2-line text LCD or the serial monitor), and allowing a human to select one of those options (typically using buttons UP, DOWN, and SELECT near the LCD).

Communications

  • ArduinoJsonParser - An efficient JSON parser for Arduino

  • RestClient - RestClient makes RESTful HTTP requests simple from the arduino using the EthernetShield.

  • Lifegraph - Lifegraph connects your Arduino to Facebook or any other JSON API on the web, built on the WiFlyHQ library.

  • Arduino ICSC - Link multiple Arduino boards together with serial or RS-485. Simple packet messaging protocol between two nodes with RS-232 or hundreds of nodes with RS-485.

  • WebSerial - WebSerial makes it easy for web browsers to communicate with Arduino over Ethernet, just like with the built in Serial interface. WebSerial includes simple javascript and Arduino libraries.

  • arduiNode - arduinode is a protocol for a wireless sensor network (WSN). Communication is handled in the background, neighbor nodes find each others and span the net. Some of its core features are: multi hop packet routing, dynamic id allocation, collision avoidance and rebroadcasting of lost messages.

  • Conceptinetics DMX - Library which makes it easy to write DMX Master and Slave implementations

  • Streaming - C++-style Output with '<<'

  • SerialDebugger is a library that enhance code readability, and debug control.

  • NewSoftSerial: An interrupt-driven Software Serial library now used in the latest arduino releases.

  • EasyTransfer: Easy communications between Arduinos over Serial or I2C.

  • Buffered and non-blocking serial writes Serial manager that allows non-blocking serial writes along with a simple way of packetizing serial data by calculating checksums and appending packet headers in a transparent way for the user. Also provides packetized serial reception with a function callback when a full and checksum-correct packet has been received.

  • SerialIP provides Internet connectivity over the serial port (no shields required)

  • SerialUI allows you to create a user interface for your device through the serial channel (menus, sub-menus and command execution). It provides built-in support for navigation through the menu hierarchy and online help. As of version 1.4, using SerialUI gives you a graphical user interface (GUI) as well, with no additional coding, thanks to druid4arduino.

  • multiCamereIrControl Library, controlling Nikon, Canon, Sony, Minolta, Olympus and Pentax cameras just with an IR LED.

  • TwitterLibrary assists in posting your data to twitter

  • UComms [dead link 2013-12-29] A library that facilitates packetizing of data. This library is very flexible and allows you to define and implement your own protocol on top of the packetization. Comes fully commented/documented and with an example.

  • TinyREST is a library that implements a REST-like server on top of the Asynclabs WiShield library. It provides ability to read and write to pins and EEPROM, but also ability to receive REST callbacks on changes.

  • ModbusMaster: Arduino class library for communicating with Modbus slaves over RS232/485 (supports Arduino 1.0)

  • RF24 - Stable, mature library for driving Nordic nRF24L01+ wireless RF radios. Includes tutorials and plentiful examples.

  • RF24 Fork - A new fork of the original RF24 library for driving nRF24L01 RF radios. Combines improvements and device support from many of the existing library forks with a round of major updates which includes many improvements, extended hardware support, and updated documentation.

  • GNTP - Arduino library for sending Growl notifications to your Mac, Linux or Windows PC over the network, using GNTP.

  • Tx433_Proove - A simple lib to use remote controlled power outlet switches of the brand Proove.

  • Oscuino - A full-featured implementation of the OSC 1.0 communication protocol for Arduino.

  • XMODEM - An XMODEM transfer library that's Arduino compatible, and POSIX compatible, so you may be able to use it for both the Arduino and your client application. Requires SD library for file access via the Arduino with a micro-SD card.

  • XModem - Simple xmodem protocol implementation in C++. The code is very compact and portable so it can be used not only on Arduino, but on a PC as well.

  • pfod Parsers Library - Three pfod parsers are provided. A very simple cmd parser, a full msg parse and a parser with per message SipHash for use over the internet with 128bit security. See also SipHash in Cryptography below.

  • NetEEPROM A library to easily store Ethernet settings in EEPROM. Additional documentation a blog post.

  • CmdMessenger - uses the serial port as transport layer.

  • sserial2mobile - send text messages or emails using a cell phone (via AT commands over software serial).

  • Webduino - extensible web server library for use with Wiznet-based Ethernet shields.

  • xbee-arduino - communicating with XBees in API mode, with support for both Series 1 (802.15.4) and Series 2 (ZB Pro/ZNet).

  • SerialControl - control Arduinos over a serial connection.

  • See also SketchList#Communication_code and TutorialList#Communication

Cryptography

  • Arduino MD5:An easy-to-use MD5 library for the Arduino, for all your hashing needs.

  • Entropy: is an Arduino library that provides tested mechanism of producing cryptographically sound truly random numbers.

  • SipHash:SipHash implementation for Arduino. Small and fast. Avoids the deficiencies and failings of MD5 hashing. See https://131002.net/siphash/ for the details of the algorithm.

  • OATH TOTP:An Arduino library to generate TOTP (Time-based One Time Password) codes following the OpenAuthentication RFC 6238.

Data Structures and Algorithms

Home Automation and IoT

  • Souliss - Arduino Home Automation with Android User Interface - Home Automation and Internet of Things framework to use your Arduino as domotic system, based on distributed structure, you can use more nodes in your home, either wireless and wired. User interaction via Android application or Modbus interfaces.

Input / Output

Buttons & Debouncing

  • Button is a customizable library for handling button press, it has the ability of detecting a bounced press, as well as differentiating a long press from a short one.

  • TButton - Toggle a pin using a momentary button

  • MomentaryButton - track short taps and long presses on a momentary button

  • Button (carlynorama) Another button abstraction library. Event based, also allows for being used with shift registers, debounce, holdDelay (like keyboards) etc. Lots of examples.

  • EasyButton - EasyButton provides various features for handling buttons easily and without complications.

  • Switch - Very small and simple debounce class for switches and buttons with a straightforward interface. External pull-up resistors are not required. Supports also long press and double clicks.

  • AnalogDebounce Voltage Divided Analog Keypad Input debounce library. Official Discussion Thread

  • Bounce - debounces digital inputs and more.

  • eRCaGuy_ButtonReader - This code is an elaboration of, and library form of, the main Arduino-sponsored "Debounce" example found here. It allows you to debounce and read a button or switch in such a way that you can easily implement toggled actions and momentary actions, know the true, debounced state of a button or switch at any given time, and specify whether you want an action to take place when the button is *pressed* or *released.*

Other Input / Output

  • Shift595 - Easily control 74HC595 Shift Register pins much like you would any other Arduino digital output pin.

  • PS2Keyboard - Get input form a PS2 Keyboard.

  • PS2uart Keyboard - Combine TVout and PS2Keyboard, so you can make a TV typewriter, or some kind of interactive computer.

  • Simple Voltmeter Class - uses the internal reference voltage (1.1V) to get an absolute voltage reading; can even be used to read own power source voltage value

  • OneWire Interface (Atmel QTouch)

  • GetOneWireTemp

  • OneWire - Dallas Semiconductor's 1-Wire Protocol

  • H48C - Library for use of Parallax H48C module

  • PIDLibrary - Provides basic feedback control

  • PIDAutotuneLibrary - Provides tuning parameters for the PID Library.

  • Ping - Simplify the usage of Ping))) Ultrasonic Sensors

  • DigitalToggle - register based pin toggle library

  • Morse - sends without blocking (no delay()) and which uses String instead of char*

  • Morse endecoder - Another non-blocking Morse code library, both encoding (sending) and decoding (audio or digital/keyer), asynchronously.

  • FancyLED - Another simple hardware abstraction library that enables blinking "N" times at custom rates, toggling, has a "fuse" example that allows for blinking to start after some lead time.

  • N64Controller Library Supports N64 controllers on various pins. Based on this work.

  • (Serial) Dbg A Serial Debugger class that supports printf syntax.

  • DisplayValueOnLed A library class for displaying an integer value on a single LED as a set of light pulses, fully configurable.

  • SyncLED An LED class for blinking patterns and numbers asynchronously. Includes PWM support for smooth fade blinking.

  • RGBlink RGB-LED class with support for HSB-colors and non-blocking blinking and fading

  • AtTouch A library for the Atmel AT42QT1070 7-channel Touch Capacitance Sensor IC via i2c

  • SerialLCD A library for easy hardware serial interface with SparkFun 20x4 Serial Ready LCD screen. Based on SfLCD2

  • shiftOutX A library to easily add up to 64 or more digital outputs to an Arduino by using 74HC595 shift Registers.

  • MCP23S17 A Class for the MCP23S17 SPI I/O Expander.

  • MCP4822 A simple interface to the MCP4822 and similar DAC chips.

  • triColorLEDs A class for easy manipulation of triColorLEDs; requires 3 PWM outputs.

  • ArduinoRCLib A library for reading/writing PPM and Servo signals as well as various functions for creating a helicopter or fixed wing oriented transmitter/flight controller.

  • SoftTimer is a time sharing solution for Arduino. It has build in software implementation for PWM, Debouncer, Blinker, etc.

  • SimpleSoftwareServo drives servos on any number of pins at once, like SoftwareServo, except with cleaner inter-pulse timing.

  • digitalInput A class to easily handle a digital input pin with '==' operator, checking toggle state ecc..

  • SNESpaduino - Use a Super Nintendo gamepad as input for an Arduino. NES pad compability and Gamepad emulators to be added!

  • VaRGB - RGB illumination programming library, works with Arduino (or any platform that supports C++) and any RGB lighting (simple LEDs, ShiftBrite/MegaBrite, LED strips, etc). VaRGB allows you to setup simple or complex behaviour using schedules of transition curves.

  • TEA5767Radio - Library for the TEA5767 FM Radio chip

  • TEA5767N - TEA5767 FM Philips chip

  • Arduino DUE Parallel Bus - Configures Arduino DUE's external memory bus for interfacing with memory devices/LCDs with an Address/Data Bus.

  • CY8C95X0 - Class for handling CY8C9560, CY8C9540 and CY8C9520 i2c I/O Expander chips with internal adjustable PWM controllers.

  • ShiftEasier - ShiftEasier provides various features for handling shiftregisters like 74HC595 easily and without complications.

  • Arduino/Wiring SoftPWM Library - produce PWM signals on any arbitrary pin, up to 20 channels, fade function, inverted action option.

  • arduino-softpwm - Software PWM library for Arduino. Features include: PWM frequency change, brightness levels, inverted action, and interrupt load test. In the latest version each channel is delayed by 1 PWM clock cycle to prevent large in-rush currents. If you don't need this feature then use this version.

  • CapacitiveSensor - turns two or more Arduino pins into a capacitive sensor.

  • AnalogScanner - A library for reading the analog inputs using the ADC Conversion Complete Interrupt rather than busy-waiting as in analogRead(). The caller can specify an arbitrary order for reading the inputs. Once scanning is started, the analog values are read as fast as possible. Callers can periodically get the latest values or set up callback functions to process the values as they are read.

  • eRCaGuy_analogReadXXbit - A library which does oversampling, as described in AVR121 Application Note, in order to increase the 10-bit precision of the Arduino ADC (Analog to Digital Converter) up to 21-bits. The core function in this library allows you to set the ADC precision anywhere from 10-bit to 21-bit. A detailed table at the link above shows the trade-offs and speed capabilities of each resolution setting, from 10-21 bits. This function also allows averaging of samples, by inputting the # of readings, at a given precision, that you would like to take, average, & return.

  • ADCTouch - Create capacitive sensors that only use a single pin and have superior accuracy to the other CapSense library.

multiple LED control

  • Charlieplex - simplifies the coding of charlieplexed networks.

  • Chaplex - another solution for controlling a structure of charlieplexed leds.

  • TLS3008 is a library that eases the control of RGB LEDs strings using the TLS3008 LED driver.

  • GEColorEffects A library for controlling GE Color Effects RGB LED holiday light strings via a one-wire protocol

  • LED matrix multi-displays - Control multiple 32x8 LED matrix display boards with simple printf like functions. Supporting accented fonts, Left, Center, Right justification, Blinking, Intensity control. Can combine multiple displays boards into single text line (up to 8 display boards, 256x8) or separate them into multiline.

Interrupts

  • PcInt - simple pin change interrupts

  • PinChangeInt - Preformance and size improved revision to PCInt

  • PciManager is an other implementation for helping developers to use PCI. You can register more listeners on more pins that should be launched on pin change.

LCDs (Textual)

  • serLCD - Sparkfun serLCD Library

  • LiquidCrystal use SPI and A 74HC595 shift register with Arduino's LiquidCrystal library.

  • AXE133Y Software library for picaxe AXE133Y OLED 16x2 module

  • LCDBitmap - Display graphics on a normally text-only LCD display

  • Parallax LCD - Updated library to work with Parallax LCDs

  • LCD_I2C Software library for LCD with I2C back pack.

  • BigCrystal - Print double height characters on an LCD. Also BigCrystalTWI for displays connected with an I2C backpack.

LCDs (Graphical)

  • ArdGrafix6100 - A fast, full-featured graphics driver for Nokia 6100 LCDs

  • NokiaLCD - Library for Philips based controller for Nokia 6100 Breakout Board

  • Serial_LCD library suite for 4D Systems µLCD, µOLED and µVGA screens. It manages text, graphics, touch, read and write on SD-card, sound, through a single serial interface, either hardware, software or I²C. High-level commands offer GUI, graphics, power-saving and even a picture frame!

  • LCDBitmap - Display graphics on a normally text-only LCD display

  • SmartGPU 2 Library for SmartGPU 2 intelligent embedded graphics processor.

  • GFX - Adafruit GFX graphics core library.

  • GLCDks0108 - supports Graphic LCDs (GLCD) that use the KS0108 (or equivalent) chip.

  • openGLCD - open source glcd library for use in open source projects.

Math

Motion Control

Motor Drivers

Robotics

  • Stepper Robot a library for controlling a robot powered by two stepper motors in differential configuration.

Signal Processing

  • Microsmooth is a lightweight and fast signal smoothing library for the Arduino platform.

  • eRCaGuy_analogReadXXbit - A library which does oversampling, as described in AVR121 Application Note, in order to increase the 10-bit precision of the Arduino ADC (Analog to Digital Converter) up to 21-bits. The core function in this library allows you to set the ADC precision anywhere from 10-bit to 21-bit. A detailed table at the link above shows the trade-offs and speed capabilities of each resolution setting, from 10-21 bits. This function also allows averaging of samples, by inputting the # of readings, at a given precision, that you would like to take, average, & return.

Schedulers and Pseudo Operating Systems

  • os_wrap - OS wrapper: Tasks using cooperative multitasking, Semaphores, Message Queues, Timers, Odometer, EEPROM logging.

  • EventFuse - Recurring events via a software count-down

  • Aiko - A small modular, event-driven framework for structuring Arduino sketches

  • Event System - includes events, an event queue class and a dispatcher class

  • Finite State Machine Library for organizing complicated sketches.

  • QP - The QP state machine framework for Arduino, which is like a modern event-driven RTOS specifically designed for executing state machines.

  • Scheduler - Simple scheduling of function calls.

  • SCoop - A Simple Cooperative Scheduler for both ARM and AVR with Task, timers, event and fifo handling. All in one SCoop.h library compatible with "Android Scheduler"

  • ArduOS - a small preemptive multitasking-system for AVR, that allows to add schedulers - revised

  • SMlib - a novel and relaxed approach to state finite state machines

Sensors

easy-to-use ultrasonic driver.

Storage

  • The EEPROMex library extends the standard EEPROM library with reading, writing bytes, longs, ints, floats and doubles, single bits, structs, arrays and more.

  • A function for seeing how much memory (RAM) is available

  • DB A simple database library for reading and writing to tables stored in EEPROM

  • A set of functions to dynamically allocate arrays

  • EDB An extended database library based on DB allowing for more records, larger records size, and external EEPROM storage

  • Mikal Hart's Flash library - allows you to easily store strings, arrays, and tables in read-only memory without the hassle and complexity of learning PROGMEM programming.

  • SCLib can be used to communicate to all kinds of smartcards (synchron and asynchron). Also a specialized support class for SLE4432 / SLE4442 compatible smartcards exists.

  • Hackscribble Ferro - Library to interface with Fujitsu MB85RS FRAM chips. Add up to 32KB per chip of fast, non-volatile memory through SPI bus.

Strings

  • PString: A very lightweight string class that enables printing to buffer using the same code as Serial.print().

Testing, Utilities and Power Saving

  • ArduinoUnit - Test suite

  • Enerlib: easy-to-use wrapper for AVR's Sleep library.

  • Sleep_n0m1: A Library to sleep for a specific length of time or until interrupt.

  • Logging: easy-to-use logging library like log4j.

Timing

  • Timer simple to use timed pin control and callbacks.

  • Timer Object - The Timer Object class provides repetitive and single-shot timers callback for Arduino.

  • swRTC - A software RTC (Real-Time Clock) based on timers available for Arduino and several microcontrollers

  • Timer1 - Pwm, interrupt and stopwatch utilities for 16bit timer1.

  • eRCaGuy_Timer2_Counter - [Update: 17 May 2014 - Timer2_Counter has been turned into a true Arduino Library. New example added.] A generic Arduino micros()-equivalent timing function with 0.5us precision (rather than the 4us precision of the built-in micros() function). --This allows, as one example, a very precise reading of Radio-Control (RC) PPM and PWM signals, from an RC transmitter and receiver, respectively, using external interrupts, with*out* using the Atmega Timer1 which would disable use of the Servo library. Tested only on Arduinos with an Atmega328 microcontroller.

  • Frequency Counter - using Timer1

  • MsTimer2 - library to use Timer2 on milliseconds.

  • FlexiTimer2 - library to use Timer2 with a configurable interval.

  • elapsedMillis - a library that makes it easy to check if a certain time has elapsed (without blocking other code from running in the mean time) and handles millis() rollover

  • Frequency generation using a hardware timer to drive a pin accurately or generate a periodic interrupt calling a function you supply.

  • Metro - Implementation of recurring timed events like blinking LEDs or servo motor control

  • TimedAction - a resource-friendly library for Timed Actions that occur every x millisecond.

  • SimpleTimer simple library to launch timed actions.

  • StopWatchClass - measure elapsed time with this elementary StopWatch Class based upon millis()

  • Time - Software real time clock

  • Tween Class - for ramps (PWM fades, for instance)

  • millis() Rollover Handling - a function for detecting and handling rollover of the millis()

  • Prescaler - easy get/set of the prescaler and alternative functions to millis() / delay()

  • DCF77 - library to use DCF77 radio signal to set internal clock to atomic time

  • dcf77 - noise resilent DCF77 library

  • SoftTimer in an easy to use, but very effective time sharing solution with some useful tools included. Like PWM, Debouncer, TonePlayer, Blinker.

  • TaskAction - a library for task actions over the time very easy.

  • ArduinoTimer - set of libraries which adds configurable and asynchronous timer support for Arduino (one library for each of the following: Timer1, Timer3, Timer4 and Timer5)

  • FreqPeriodCounter – Versatile frequency counter which measures frequency, period, pulse width etc. Can be used interrupt triggered or polled.

  • Stopwatch – Small and easy to use library for measuring interval times. Can also be used to measure the execution time of a piece of code

  • https://github.com/Byron-Watkins/Timer - Powerful interrupt-driven software timer library; timer timeout calls user function and passes a pointer to a user object. User can write his callback to manipulate the object and the object can control hardware and/or software states.

Graphing Data

Share