Arduino Playground is read-only starting December 31st, 2018. For more info please look at this Forum Post

Libraries for Arduino

This page includes a list of community contributed libraries for Arduino. Check out the Official Arduino Libraries or Interfacing With Hardware pages to find more libraries, or find examples in Code Snippets and Sketches.

Installing a library

See the official Library Installation Instructions.

Writing your own library

Start with this Tutorial for Writing an Arduino Library, then check out the Library Manager FAQ to see how to add your library to the Arduino IDE Library Manager. Sign up for an arduino.cc account and log in to edit this page and add your library to the list below.


Navigation


Other Library Lists

Audio

  • Rtttl Library - Library that plays Rtttl melodies asynchronously uses PROGMEM and no timer .

  • MusicWithoutDelay Library Similar to the RTTL library, but has more functionality. It allows more than one note to be played at the same time and doesn't use the delay(). You can pause/play, play songs backward and even skip to a specific time in the song.

  • 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.

  • MediaPlayerMediaPlayer library for the Wave Shield.

  • 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 library - 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 .

  • WM8741 Library - Library for controlling WM8741 High Performance Stereo DAC chip from Wolfson Micro (now Cirrus Logic) .

  • DABDUINO Library - Library for DAB+ (digital radio) module.

Cloud

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

  • Yaler - access your Arduino from everywhere via the Yaler.net relay service.

  • OSPOM - free, open source, cloud service for any Arduino. Like Facebook for your Arduino. *No-WiFi/Ethernet sheild required; connects via any GNU/Linux computer. No router setup.

Communications

  • ArduinoJson - A simple and efficient JSON library for embedded systems.

  • I2CtunnelW - for Arduino Yùn, adds new REST commands, enabling tunnelling for I2C messages. It allows to execute some tasks on linux side (using python, php, javascript ...). Examples using Arduino YUN and DS1307, AT24C32: set the linux clock from RTC, adjust the RTC clock from a WEB page, or put and get a string in EEPROM.

  • https://github.com/gioblu/PJON - is a multi-master, single wire, addressed and checked communication protocol and it is designed to be an alternative to i2c, 1Wire, Serial and the other Arduino compatible protocols.

  • RBD::SerialManager - Quickly define and consume a cmd,param; based serial protocol.

  • MySQL Connector/Arduino - allows you to connect your Arduino project directly to a MySQL server without using an intermediate computer or a web-based service.

    • MySQL Connector/Arduino Fork - with support for Arduino AVR, SAM (Due), SAMD (Zero), and ESP8266 (ESP8266-12, ESP8266-12E, Sparkfun ESP8266 Thing, NodeMCU 0.9 & 1.0, Adafruit HUZZAH, etc.)

  • https://github.com/gioblu/PJON_ASK - allows you to leverage all the power of simple ASK 433mhz transceivers and have long range multimaster digital data communication channel with a simple and user friendly set of functions to manage data transmission.

  • ESP8266wifi - is an easy way to use the cheap WiFi module ESP8266 in your sketches. The library has built in re-connect support.

  • Packetizer is a Library to analyze data for a start and/or end condition. If both, start- and end-condition is met the data between start and end is returned via a callback function as raw bytes. Examples show the use with incoming serial data.

  • ToothFairy is a Library and matching android app for controlling your devices over Bluetooth. A custom GUI is created without programming or any setup on the android device. App available on play store: ToothFairy

  • IRremote - A Multi-Protocol Infrared Remote Library for the Arduino, started by Ken Shirriff. This is an absolutely fantastic IR library capable of receiving and sending a whole slew of infrared remote protocols, as well as reading or writing raw (undefined/unknown) protocols. Very extensive and functional. This library uses one of the microcontroller's hardware timers to function. You can choose which timer you'd like it to use by editing the compiler directives (#define statements) in "IRremoteInt.h." It can receive on any pin but send on only one pin. NB: per my experience, the new Arduino IDE comes with a library called "RobotIRremote." You may have to navigate to the Arduino IDE folder and remove this folder in order to prevent it from conflicting with IRremote.

  • uHTTP - uHTTP is a tiny library that provide a very comfortable way to parse and access HTTP request data and build something amazing such as REST API interface for your project.
  • SIM90X - SIM90X is a library based on Adafruit FONA that provide a simple way to manage GSM modules based on SIM90X chipset.

  • 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.

  • Paho MQTT - MQTT library from the Eclipse Paho Project.

  • Arduino ICSC - Link multiple Arduino boards together with serial or RS-485. Simple packet messaging protocol between two nodes with RS- 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

  • DMXSerial - Library for robust DMX implementation using a Hardware Serial Interface.

  • DMXSerial2 - Library for robust DMX+RDM implementation using a Hardware Serial Interface.

  • 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.

  • TXOnlySerial: The TX-part of the SoftwareSerial library; very useful when you want to output debug messages on ATtiny processors, much smaller than SoftwareSerial, and no use of PCINT interrupts.

  • 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.

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

  • TwitterLibrary assists in posting your data to twitter

  • 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

  • modbus-arduino, A library that allows your Arduino to communicate via Modbus protocol, acting as a slave (master in development). Supports Modbus Serial (RS-, RS-485) and everything that uses IP (Modbus IP).

  • RF24 - Stable, mature library for driving Nordic nRF24L01+ wireless RF radios. Includes tutorials and plentiful examples. GitHub source code here. As of 7 March 2015, this library has not been actively developed in over a year.

    • 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. GitHub source code here. As of 7 March 2015, this library is currently being actively developed.

  • RFM69 library for RFM69W, RFM69HW, RFM69CW, RFM69HCW (Semtech SX1231, SX1231H)

  • 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.

  • arduino-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.

  • RPCTransport - provides easy way to organize two - way communication between Arduino and Node.js, 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.

  • Woopsa - Remotely change the value of variables in your code and call functions through a web page.

  • ICMP Ping ICMP Ping library

  • EtherEvent - Easy to use password authenticated Ethernet communication between Arduinos and EventGhost Network Event Sender/Receiver plugin.

  • PCA9540BD - Driver for the PCA9540BD component, a 2-channel I2C-bus multiplexer. Some PCB schematics are also linked.

  • HDLC TinyProtocol - Tiny Protocol library designed for communication over UART, or other char interfaces. All data passing through UART are wrapped to the packets, so this library doesn't require synchronization. Also, there is Linux full version of the library, which can be found at https://github.com/lexus2k/tinyproto. See doxygen documentation at http://lexus2k.github.io/tinyproto.

  • See also SketchList#Communication_code and TutorialList#Communication

  • ArduinoLinuxSerial in PHP for Linux via USB. The Master is PHP, and you need the serial driver (uses devices like /dev/ACMx or /dev/USBx). It is blocking the master and the php->Arduino message is limited to 60 char. Fast and robust protocol (CRC and repetions). Useful with simple and fast Arduino responses.

  • USBphpTunnel For Linux+Android + WEB server (TVbox). The master is Arduino, and the Android app uses ports like /dev/bus/dev/00X/00Y, so you don't need the serial driver. It is blocking the master (arduino) and it allows big messages. It works in background of the main PHP program. Useful for data logging and RT.

  • USBphpTunnel_Fifo For Linux+Android + WEB server (TVbox). The master is PHP. It is NOT blocking the master, allows payload up to 4k, allows concurrence (many users via WIFI). Works in background, and it is no fast (depending from polling Arduno frequence, 5-15 sec. plus processing time). Well placed for long Arduino processes (like waiting user actions).

Cryptography

  • https://rweather.github.io/arduinolibs/crypto.html: ArduinoLibs Cryptographic library

  • https://github.com/Cathedrow/Cryptosuite: Cryptographic suite for Arduino

  • Arduino Spritz Cipher: Spritz - a spongy RC4-like stream cipher and hash function. ArduinoSpritzCipher library contains a cryptographic pseudo-random number generator, cryptographic hash and message authentication code (MAC) functions, can perform symmetric-key authenticated data encryption, and general-purpose functions for timing-safe comparison and wiping data from memory. This C Spritz library can be used to: Hash and authenticate data, Perform symmetric-key authenticated data encryption, Generate random numbers and strings from entropy/seed.

  • http://github.com/gioblu/Cape: is a string encryption library that use an algorithm inspired by the RC4 standard with the addition of 1 byte initialization vector and tunable encryption_strength; all this is reversible, so two entities with the same key can share encrypted data and come back to original content without any other procedure using Cape set of functions.

  • 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

Graphing Data

  • Arduino Plotter - an Arduino library for easy plotting on host computer via serial communication. Supports multi-variable plots against time as well as 2D plotting of an X vs Y variable. Multiple graphs can be displayed at once, with all formatting and scaling handled automatically. A stand-alone listener application, written with Processing, is provided.

  • Simple data plotting to a PC - a simple library for sending data to a plotting tool on a PC.

Home Automation and IoT (Internet of Things)

  • WolkConnect - WolkAbout Arduino Connector library for connecting IP based Arduino devices to WolkAbout IoT platform. For further information on the platform visit this link.

  • DSC Keybus Interface - This library directly interfaces Arduino to DSC PowerSeries security systems for integration with home automation, notifications on system events, and usage as a virtual keypad. The included examples demonstrate monitoring armed/alarm/zone/fire/trouble states, integrating with Home Assistant/Apple HomeKit/Homey, and reading/decoding the Keybus protocol. The code demonstrates how to utilize Arduino pin change hardware interrupts and timer interrupts to capture and decode an external data source without using polling or blocking delays.

  • https://github.com/gioblu/PJON - is a multi-master, single wire, addressed and checked communication protocol and it is designed to be an efficient medium for home automation and IOT network applications.

  • https://github.com/fredilarsen/ModuleInterface - Configuration and data logging framework for IoT, Arduino and similar, with PJON protocol support.

  • MySensors NRF24L01 Arduino Library - Build your own mesh-enabled radio network using Arduinos. The MySensors website also contains easy-to-follow build instructions and ready-to-use Arduino examples sketches to help you create your own wireless sensors. Free plugins for a bunch of different open source home automation controllers.

  • 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.

  • X10 home automation libraries with Andoid app
    Three libraries that enable two-way communication with X10 modules and receiving commands from X10 RF and IR remotes. The examples include Android app and Ethernet shield compatible REST service that enables X10 control using your Android phone or tab. A basic example is also included that lets you receive and send X10 commands using serial.
    For more info visit: blog.lookout.no. Source code available on GitHub: github.com/tmittet/x10.

  • Sonos speaker system UPnP library
    This UPnP library makes interfacing with your Sonos speaker system a breeze. The included examples demonstrate how to skip, pause, change volume, play files or playlists, stream internet radio stations, check what is currently playing, read track position, and much more. The library is small enough to run on the Arduino Uno.
    For more info visit: blog.lookout.no. Source code available on GitHub: github.com/tmittet/sonos.

  • MiniApache - HTTP server library. Serve files from SD card and easily write custom views.

  • Data broadcasting (by DL1DUZ) - A set of libraries supporting wireless or wire-bound serial data broadcasting (e.g. sensor data via a 2-wire connection or radio broadcast on an ISM-frequency). The signal is DC-free, (Manchester-coded) and error-checked (CRC8).

Input / Output

Buttons & Debouncing

  • CommonBusEncoders Use human turned, click activated encoders with only 4 pins for the first encoder and one pin per extra encoder.

  • EdgeDebounce This is a super light weight debouncer. (only 21 bytes of data RAM on the Basic-Pullup example sketch). It offers protection from both bounce and EMI . It is also fast: it will return as early as 180 us after the bouncing or EMI stops. If the switch is not bouncing and there are no EMI, it will return in 90us. There is also a Lite version. Just replace any digitalRead() with debounce.pin()

  • SwitchPack This is a complete switch toolbox debounced by the lighning fast EdgeDebouncer. Comes with 9 classes, 17 example sketches and a complete Tutorial.

  • RBD::Button - A lightweight library to debounce and detect button press/release events without delay or interrupts.

  • 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 - Debounce library for switches and buttons with a straightforward interface. 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 - [Update 31 Oct. 2014: major bux fix to add multi-button support; also added read5Buttons example]. 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.*

  • DebounceInput Yet another debouncer, this one based on a simulated RC circuit and Schmitt trigger. Simple interface to detect state and state changes (rising/falling).

LED Control

  • RBD::Light - Simple control of one or more LEDs that can blink and fade without delay or interrupts.

  • Blinky - This library provides easy blinking LED management suitable for error codes and user interfacing purposes

  • Heartbeat with diagnostic blink LED error codes - Combines a heartbeat live indicator with a handy diagnostics tool. Show errors with LED blinking codes.

  • 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.

  • 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

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

  • 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.

  • RGBLEDBlender - A straightforward library for blending RGB colors. Requires 3 PWM outputs.

Multiple LED Control

  • ALA - Arduino Light Animation (ALA) is a library to simplify the development of light animations using a wide variety of LEDs and LED strips.

  • Pixelgroup is a library to group pixels in a LED-strip. It is intended to be used together with a pixel-strip library like Adafruit_NeoPixel or Adafruit_WS2801 but can be used for any kind of rendering backend.

  • 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.

Other Input / Output

  • MorePins Library - For increasing the number of pins on your Arduino - via Shift Registers - Only tested on Arduino Uno for up to 32 input pins. Theoretically the number of pins can be as high as you want. More info on https://gitlab.com/dariusmihai/Arduino_Lib_MorePins. Currently only input pins are supported. Soon to come output pins.

  • X9C Series Digital Potentiometer Library - Allows increment(), decrement(), increment(steps), decrement(steps), sleep(), wake(), and store() functions for the X9C series of digital potentiometers from Intersil.

  • Faster 10-bit ADC - analogReadFast() takes just 20us instead of 112us.

  • RBD::Capacitance - Measure change in capacitance without delay or interrupts.

  • DirectIO - Fast digital I/O library with an easy class interface. Provides great speedup when pin numbers are known at compile time - up to 60x faster than digitalWrite. Can output a 2.66 MHz signal on a 16 MHz Arduino board. Examples and benchmark data are provided.

  • Proximity A library for IR proximity sensing with the Circuit Playground Express.

  • 7 Segment Display Library Comprehensive guide on how the 7 segment displays work and a library written from scratch with explanations. Display chars, digits (floats and ints) and decimal place.

  • ShiftRegister74HC595 - Control 74HC595 shift register pins like normal Arduino output pins (detailed documentation, examples and performance optimized functions like setting all pins once, etc.) .

  • ShiftRegister PWM Library - Makes shift register pins PWM capable.

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

  • HC595 - Up to eight 74HC595 per instance of this object. Simple to use.

  • MyKeypad - Up to 16 switches attached to an analog pin. Voltage divider with pullup resistor. Resistor calculator included.

  • digitalLatch - With 2 74ls259 digital latch, and some logic gate, 7 GPIO pins, control 16 relay or other type of digital outputs. Add one more pin and 2 others 74ls259 and double to 32 outputs. Schematic included..

  • 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

  • Faster 8/10-bit PWM DAC – 31250Hz instead of 490Hz, resolution 8-bit or 10-bit.

  • OneWire - Dallas Semiconductor's 1-Wire Protocol

  • H48C - Library for use of Parallax H48C module

  • PIDLibrary - Provides basic feedback control

  • ArduPID - Advanced PID control

  • PIDAutotuneLibrary - Provides tuning parameters for the PID Library.

  • StateSpaceControl - A multi-input, multi-output state space control library

  • LidarEnhanced - High performance acquisition library for the lasers LidarLite v2 and LidarLite v3

  • 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.

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

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

  • 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.

  • 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.

  • CPPM Combined PPM (CPPM) Receiver Library, providing a simple interface for reading up to 16 channels of RC input from a single CPPM signal.

  • 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 etc..

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

  • 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 shift registers 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_NewAnalogRead - An analog read library to do two things: (1) easily change the ADC (Analog to Digital Converter) speed (ex: to increase the max speed of 10-bit readings from ~10kHz to 50+kHz, and (2) use oversampling (per the AVR121 Application Note) to increase the resolution of analog readings from 10-bit (0-1023) to 16-bit (0-65472 in the case of oversampling) or more. A detailed table shows the trade-offs and speed capabilities of each resolution setting, from 10 to 16+ bits. This library 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.

  • SmoothADC - Lib for ADC spikes (noise) isolation and averaging with configurable sample rate.

  • GhostLab42Reboot - Library for controlling the GhostLab42 Reboot Triple-Display Board Set

  • NixieLibrary - Library to develop your own clock using Nixie tubes, Nixie drivers, analog buttons, buzzers and other peripheral equipment: temperature sensors, light sensors, analog buttons, etc (DS3231, DS3232, GL 5528 light-sensor, K155ID1, LM35DZ temperature sensor, HTU21/SH21 temperature/humidity sensor). The module supports analog Nixie tubes like IN-14, IN-12, IN-8, IN-18 (ИН-12, ИН-14, ИН-8, ИН-18), etc.

  • pcf8574 - Library for PCF8574 digital input and output expander with i2c bus.

  • pcf8591 - Library for PCF8591 Analog input and analog output to digital converter with i2c bus.

  • RcPpm - Radio control PPM signal decoding library. Decodes PPM signal from RC transmitter's trainer port. Provides an example of PPM to USB joystick converter for Leonardo.

Interrupts

  • PcInt - simple pin change interrupts

  • PinChangeInt - Performance 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.

  • SimplyAtomic - Simple portable macros to protect critical sections. Just wrap atomic code in ATOMIC() {}, and interrupts will automatically be saved, disabled, and restored.

LCDs

Textual LCDs

  • SciValue - A useful library you can use to print floating point number in scientific format

  • 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.

  • LiquidCrystal_I2C - LCD Library for HD44780 controlled 16x2, 20x4, etc. displays, with generic CN type 2 (black) PCF8574 I2C backpack (EBay from China).

  • hd44780 - An extensible feature rich LCD library for hd44780 based LCD displays. Fully LiquidCrystal and LCD API 1.0 compatible. It can be installed using the IDE library manager. It includes support for multiple i/o interfaces such as 4 bit, "plug & play" full auto detection of PCF8574 & MCP23008 backpacks, several Noritake VFDs, and more.

Graphical/Color LCDs

  • EVE Display - FTDI FT80x Embedded Video Engine include touch, display and Audio functions. Provide Arduino reference design and SPI interface libraries.

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

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

  • 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.

  • ssd1306 - extremely small open source SSD1306/SSD1331/SSD1351/IL9163/ST7735 i2c/spi OLED LCD display driver for AVR/ESP8266/STM32/ESP32 controllers and Raspberry pi. Supports 128x64 and 128x32 OLED monochrome displays, 128x128, 128x160, 96x64 RGB OLED display. PCD8544-based spi LCD (Nokia 5110) is supported also. Supports VGA.

Math

  • RBD::Threshold - Convert a non-uniform integer input range to a quantile scale.

  • Average A collection of routines for working with arrays of numbers

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

  • FloatToString

  • Histogram - a histogram library

  • A basic floating-point linear algebra library

  • BasicLinearAlgebra - A library for handling matrices and carrying out simple vector and matrix operations.

  • Geometry - A library for working with points, rotations and coordinate transformations in 3D space.

  • Numlen - returns the number of characters required to display a number in base 10.

  • Statistics - a statistics library

  • QuickStats - another statistics library, with median and mode

  • RunningAverage - a running average library

  • RunningMedian - a running median library

  • eRCaGuy_GetMedian - A very thorough C++ implementation of a median function/media filter; it is overloaded so it can handle any date type; NB: The array is sorted in place, so if you don't want your primary array sorted, pass in a copy of it instead.

  • ComplexMath - a Complex math formula library

  • 1D Splines - various methods to interpolate between a set of points

  • IEEE754tools - manipulating IEEE754 32bit floats

  • interpolation - library with interpolation algorithms in C++

  • Moon and Sun (by DL1DUZ) - A library to calculate the Moon's and Sun's position, time of rise and set + Moon's phase for a given date (time_t) and set of coordinates.

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).

Motion Control

Motor Drivers

Robotics

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

Power Control

Signal Processing

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

  • Smooth - This library allows to get accurate analog values, using a moving average over ADC reading. The smooth values are more precise because the average reduces the influence of random errors (sampling ADC error: +/- 1 bit).

  • Linear - This library transforms mV (as from Smooth) to fisical units using a linear equation: y = m*x + q. Requires Smooth lib.

  • eRCaGuy_NewAnalogRead - An analog read library to do two things: (1) easily change the ADC (Analog to Digital Converter) speed (ex: to increase the max speed of 10-bit readings from ~10kHz to 50+kHz, and (2) use oversampling (per the AVR121 Application Note) to increase the resolution of analog readings from 10-bit (0-1023) to 16-bit (0-65472 in the case of oversampling) or more. A detailed table shows the trade-offs and speed capabilities of each resolution setting, from 10 to 16+ bits. This library also allows averaging of samples, by inputting the # of readings, at a given precision, that you would like to take, average, & return.

  • eRCaGuy_GetMedian - A very thorough C++ implementation of a median function/media filter; it is overloaded so it can handle any date type; NB: The array is sorted in place, so if you don't want your primary array sorted, pass in a copy of it instead.

  • AD9850 (by DL1DUZ) a library supporting control of the AD9850 DDS IC.

Schedulers and Pseudo Operating Systems

  • https://github.com/gioblu/Agenda - is a simple task scheduler written to be simple to use and effective and precise in high frequency task execution.

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

  • EventFuse - Recurring events via a software count-down

  • Polling - schedules repetitive activities using 1 ms precision. Simple with small footprint.

  • 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.

  • Automaton - Reactive state machine framework for Arduino. Program Arduino sketches in a modern, event-driven (reactive) manner. Use coding styles similar to jquery, node or React.

  • 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"

  • DeepSleepScheduler - An easy to use, lightweight, cooperative task scheduler library with configurable sleep and task supervision

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

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

  • TaskScheduler - simple cooperative multitasking library for Arduino

  • OS48 - preemptive / cooperative multitasking library for Arduino

  • MOS - A ultra lightweight cooperative multitasking scheduler for ALL Arduino devices. Needs only 4 bytes RAM per task (stackless approach).

  • ProcessScheduler - A Cooperative OO Scheduler Library to Manage Multiple Running Processes

  • StateMachine - A State Machine creation and management library.

  • Task Scheduler - A simple task scheduler which is sufficient for most applications and easy to handle. In uses Timer 2, conflicting with the tone() and analogWrite() at pins 3 & 11.

  • ArduZ80 - Reviving Z80 Through Arduino by near-to-complete emulation of software and hardware functions, capable of running z80 assembly, main and extended sets.

Sensors

Storage & Memory

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

  • Arduino erom (EEPROM) library - Easy way of reading, writing and updating any types of data, seamless wear reduction, automatic stored data verification.

  • EEPROMallocation - Automatic allocation of unique EEPROM addresses for any variable type.

  • EEPROMWearLevel - Reduces EEPROM wear by writing a new value to another EEPROM location.

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

  • IonDB - A key-value database that supports both in-memory and persistent data stores.

  • 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.

  • MB85RC FRAM I2C - Library to address Fujitsu's FRAM MB85RC devices over I2C

  • Polynomial (by DL1DUZ) - Library supporting linear fit of nonlinear functions with 16-bit resolution and x/y data (support points) being stored in EEPROM

  • EEPROMdataStorage (by DL1DUZ) - Library supporting storage of different data formats in EEPROM

  • BitArray (by DL1DUZ) - Library providing Boolean arrays

  • EEPROM AT24C256 - Library for AT24C256 EEPROM, supporting simple read/write of char arrays to specific addresses.

  • 93Cx6 EEPROMs - Library for 93Cx6 family of EEPROMs. Supports read, write, erase. These EEPROMs are found in Automotive computers for Odometer storage and Transponder Key Codes.

  • AT93CXX EEPROMs - Library for AT93CXX family of EEPROMs. Supports read, write, erase.

Strings

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

  • GCode - A simple gcode-interpreter that converts lines of gcode into g,x,y,z,... values.

Testing, Utilities and Power Saving

  • ArduinoUnit - Test suite

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

  • Base oscilloscope – Oscilloscope base library.

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

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

  • narcoleptic: a sleep library for Arduino, by Peter Knight (Cathedrow). This is a fantastic power-saving replacement for the basic delay() function, which puts the MCU(microcontroller) to sleep during delay.

  • ApplicationMonitor - Logs the program addresses where watchdog timeouts occurred to EEPROM.

  • WatchdogLog - Logs the program address where the most recent watchdog timeout occurred to EEPROM. Based on the ApplicationMonitor library but with a focus on easier integration with your program.

Timing

  • millisDelay - How to Code Delays and Timers in Arduino. Covers the standard code and a library, millisDelay that does the work for you. Also discusses the details of why the code needs to be the way it is.

  • StensTimer - A easy-to-use timer library that doesn't block your program and also allows you to have self-defined objects handling timer-callbacks.

  • RBD::Timer - Manage many timed events without delay or interrupts.

  • Polling - schedules ripetitive activities using 1 ms precision. Simple with small footprint.

  • getDS1307ts -Fast function getDS1307timeStamp(), can use I2C lib or Wire lib, takes only 1.132 ms (1.128 - 1.142).

  • tBeat - The tBeat library manages periodic or timed function calls. The library uses the Timer1 or the Timer3 to generate an interruption every 1ms. What I call hook is a little structure holding a period, a countdown, and a function pointer. When the count is zero, tBeat callbacks the function pointer of the hook. By default you can have a maximum of 8 hooks. Every hooks are modifiable, deletable and so on... Priority is given to the hooks which have the smallest period.

  • Timer - simple to use timed pin control and callbacks. This is a software-based non-blocking timer solution (ms-accuracy), made by Simon Monk & J Christensen--very useful!

  • VirtualDelay – Non-blocking delay library.

  • 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 16-bit timer1.

  • Stopwatch – Simple stopwatch library.

  • eRCaGuy_Timer2_Counter - 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. As of March 2015, this library includes an example to read in PWM signals (or any type of pulses) on ANY pin and determine frequency, pulse width, etc. Pulses it can handle are in the 0~100kHz range.

  • 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 meantime) 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)

  • 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 resilient DCF77 library

  • DCF77 - by DL1DUZ - yet another DCF77 library

  • https://github.com/prampec/arduino-softtimer/blob/wiki/SoftTimer.md 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)

  • Avdweb_SAMDtimer – Sophisticated SAMD21 Timer library for the SAM15x15 and Arduino Zero.

  • avdweb_SAMDpwmDAC – Fast PWM-DAC for the SAM15x15 and Arduino Zero.

  • 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.

  • plc_standardlib - A collection of basic functions and function blocks normally used in PLC programming. The collection includes different types of timers, counters, latches, edge-detection. It leans on to the functionality of the Standard.lib of CoDeSys v2 and IEC61131-3.

  • CountUpDownTimer - This is a simple H.M.S. countdown timer. This does not replace the more precise RTC's.

  • PulsePattern Generate a repeating pulse pattern with Timer1

  • arduino-clockwork Whenever you need to precisely enforce the duration of your loop() function, you can call Clockwork.start() at the very beginning, and Clockwork.stop() at the very end of the loop. The loop duration will be automatically adapted. It uses a combination of millis() and micros() calls, and supports an emergency callback to be triggered whenever the task execution time (TET) becomes larger than the allocated loop time.

  • Chronos Easily manipulate date-times to perform scheduling, setup calendars and find points in time that are of interest. Includes support for
    • DateTimes and Spans (OO date-time objects that can be manipulated in many ways),
    • Marks (sets of calendar point events like "every Sunday at 15h00") and
    • Calendar Events (actual events with fixed or repeating datetimes of specific duration, and the scheduling functions needed to find/manipulate events of interest).

  • TimeOut Handle time event with non-blocking delay with call '' javaScript like " timeOut and Interval

  • PCF8563 Arduino Library for PCF8563 real time clock.