will be read-only starting December 31st, 2018. For more info please look at this Forum Post

Interfacing with Hardware

These topics cover the hardware and software setup required to connect an Arduino device with a variety of electronic parts, chips and devices. A related topic not covered under this section is the shield, boards that plug directly into an Arduino's pin layout. Information on the creation and use of specific shields belongs in that section. Information on shields in general and their creation belongs here.

See here for a table of shields and the Arduino pins they use.

Arduino has limits on how much current can be sourced or sunk by its I/O pins. When interfacing with hardware you need to be careful not to exceed these limits. For details see ArduinoPinCurrentLimitations. In general, for AVR based Arduinos, do not exceed 20 mA per pin. In particular, do NOT directly connect LEDs to Arduino outputs! Always use a series resistor (220 ohms is a good value).




User interface


Data Logging and Plotting



Examples and information for specific output devices and peripherals: How to connect and wire up devices and code to drive them.

See also the pages devoted to the Dallas One-Wire MicroLan, I2C and Ethernet. They enable you connect additional output (etc.) devices across networks controlled by the Arduino. The trouble of controlling a network is repaid if you need to connect many outputs (and/ or inputs), or if your actuators / sensors are not close to your Arduino.

Arduino as ISP (In-System Programmer)


  • Camera Control - Controlling Cameras

  • LED Lights and Displays

    • Addressable LEDs ws2812b ws2801 apa102 apa104 apa106 sk6812...

      • FAB_LED Fast Arduino Bitbang LED library, provides easy and powerful programming of all RGB and RGBW addressable LEDs from ws2812 to apa* to sk6812.

      • Using WS2812 Smart Pixels. The WS2812 is a "smart" 5mmx5mm SMT module with three bright LEDs (red, green, blue) You can buy them made into rings, strips or arrays. Each has a controller to accept and store commands via a daisychained data line. The nice people at Adafruit have created the Adafruit NeoPixel library which makes using multiple WS2812s (or WS2811s) very easy. The tutorial link gives you all the "getting started" information you will need.

      • Pixel Matrices other than WS2812 (if supported by FastLED). Marc MERLIN wrote FastLED NeoMatrix library which offers the same support as Adafruit's library, but on all chips supported by FastLED. But even on Neopixel based matrices, it offers more options than the Adafruit lib thanks to FastLED. While is the same code that works on any other Adafruit GFX backend, you can do a lot more.

    • Single LEDs of one color
      • Blinkenlight experiments Features many different ways to implement knight rider effects, persistence of vision and other amazing stuff.
      • FadeLed: Library to make fading leds a piece of cake.
      • Fade an LED with a knob - An example that lets you twist a knob to control the brightness of an LED.
      • 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...
      • Knight Rider extensions - an extension to the learning loops example. Several single LEDs used together to create satisfying visual displays.
      • LED: Simple hardware abstraction library. Either use this to simplify(?) working with single LEDs, or study it as a good example of what you can do by creating a library.
      • I/O LED: Manage an LED as an emitting AND receiving device!
      • SoftTimer is a time sharing solution, that has a built in asynchronous blinker. It can blink LEDs in a configured pattern, while not blocking other processes.
      • eCandle warm, live and safe eCandle. Comes in one single sketch..

    • Single LEDs, multi-color
      • Object Oriented RGB LED abstraction layer Simple setup and control of common RGB LEDs. Works with common cathode and common anode devices and with both PWM and non-PWM digital pins.

      • Arduino mood light with a 3W RGB LED.

      • High Power RGB LED Shield drives High Power LEDs from 100mA - 700mA. The shield provides three independent channels and provides 12-bit / channel PWM dimming and Analog dimming. Acceptable input voltages range from 6 – 42V. If more than three channels are required , up to 64 Shields can be stacked to control up to 192 Channels. The shield is controlled through I2C and only requires 2 Arduino pins (SCL, SDA) and GND.

      • HPLEDShield1 A four channels (RGBA) High Power LED driver in a shield. Control up to 28x1Watt LEDs with a single shield.

      • ShiftBrite: a module with three LEDs. (High brightness red, green, blue.) Library for the module. Module uses a simple clocked serial interface to accept a 10-bit brightness value for each LED's color.

      • BiColorLED: a simple library for driving bi-color LEDs, including support for mixing the two colors.

      • PCA9536_RGB: Control an RGB LED (Common-Anode or Common-Cathode) over the I2C Bus via a PCA9536 (4-Channel I2C GPIO Expander IC)

    • Multiplexed single LEDs, each a single color (See also "LED Segmented Displays" sections. Here we have multiplexing done "the hard way", but leaving you with the greatest creative control.)

      • Arduino-LED-Matrix-Display A multiplexed 8X11 LED Matrix Display (you can display stuff and scroll text on it, display text in any language

      • Heart Matrix A wearable 7x10 LED Matrix Display with an Arduino Library to easily handle text and animations.

      • 3x3 LED Cube Diecimila Shield (Inexpensive version of a fun idea... 27 LEDs, some resistors, some transistors... and a lot of craftsmanship with your soldering!)

      • TinyBrite: An easy to use software driver for MegaBrite, ShiftBrite and other RGB LEDs (any chip that uses the A6281 LED drivers). TinyBrite is lightweight and simple, and doesn't require SPI so you can use it with ATTiny-based Arduino-compatible devices, like the Digispark.

      • Schematic for driving multiple LEDs from one Arduino pin.

      • lightuino: Arduino 328 software and shield compatible board drives 70 LEDs through 70 individual channels (i.e. constant drive, not matrix strobing) using the M5451 constant current chip. FOSS source code available at Also contains instruction on how to wire up the M5451 chip to Arduino yourself. Buy

      • Direct driving of an 8x8 LED matrix with no ICs or other components involved.

      • TLC5940 - constant-current LED driver with 16 channels of 12 bit PWM output. Chips can be daisy-chained for >16 PWM channels. Library code and examples available.

      • TLC5940 Library for Arduino Due - This library doesn't have as many features as Alex Leone's above, but it works with the Arduino Due.

      • LED Matrix Multi-Displays - Controlling 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.

    • Multiplexed single LEDs, each multi-color (See also "LED Segmented Displays" sections. Here we have multiplexing done "the hard way", but leaving you with the greatest creative control.)
    • Using the Sparkfun DS1307 Real Time Clock to tell time with your Arduino -

    • Seven segment displays (See also the "LED Multiplexing" sections. Here we have displays supplied with character generating control circuitry, minimizing the work you have to do.)
      • Adafruit 7-Segment Display with I2C Backpack An forum post with helpful information on how to use one of the Adafruit 4 character, 7-Segment displays with the I2C backback, in your program.
      • DigitLedDisplay library for MAX7219 and MAX7221 8 bit 7-segment digital LED display module drivers.
      • SevenSeg Highly flexible library for using Arduino to drive a seven segment display directly at the output pins of an Arduino or through transistors. Key words: Arbitrary number of digits, decimal points, colon, apostrophe, common anode, common cathode, brightness control (adjustable duty cycle), display text, use interrupt timers.
      • SevenSegmentLibrary Allows you to use an Arduino as a 4-digit seven segment display controller. Works with any pin configuration as well as common cathode and common anode seven segment displays.
      • Seg7 library for control of 7 segment displays
      • Multiplex7Seg is a small Arduino library allowing you to multiplex 1, 2, 3 or 4 digits using any one of the pins on your Arduino, that's a 9999 digit display. You also have the ability to enable zero leading blanking for low power requirements. Mail me at for additional help on using the library.
      • 7SegCounterMultiplexer is a simple example that demonstrates multiplexing a 7 segment LED display using a 74HC595 shift register. Only a single segment of the display is on at any one time, but they are illuminated in sequence so quickly that the digit is displayed properly to human eyes. This approach prevents you drawing too much power from the shift register, and means you don't need to use any special driver ICs.
      • 7-Segment LED Display Calculator is a simple interactive web application to calculate and visualize bit sequences to setup 7 segments LED displays.
      • MAX7219, a fork off the LedControl library which uses hardware SPI and adds some syntax sugar to the process of controlling many displays.
      • MAX7221float is a Arduino library for the MAX7219 and the MAX7221. Library MAX7221spi is for the SPI-interface, and MAX7221shift for any pin. The library has automatic display of floating point numbers and can put the sensor in low power mode.
      • 4 Character 7-segment Display $13+ P&P (8/10). Control with one Arduino digital pin and NewSoftSerial, or SPI.
      • Direct Drive 88:88 4 digit 7 segment display using same method as 8x8 matrix.
      • hc4led - A cheap 4-digit seven segment LED display with SPI. No decimals, though. Sample code here: Hc4led. And here's an easy-to-use Arduino/Wiring library for controlling these displays. The Reaction Time Tester project uses the HC4LED library.
      • TM1637 based display module - Very low cost, 4x7-segment display modules, based on the TM1637 chip.
      • TM1650 based display module - 4x7 segment display driver for JY-MCU module based on TM1650 chip.
      • 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.

    • Multi-segment displays- more than 7 LED segments per character (See also "LED Multiplexing" sections. Here we have displays supplied with character generating control circuitry, control circuitry, minimizing the work you have to do.)
      • Controlling an Alphanumeric LED Display - Library on Blogspot
      • Twitter LED Scroller - Twitter API to PHP to Processing to Arduino to 74HC595 to scrolling LED matrix (complete with cool resin case).
      • Sure-Electronics 2416 Display 24x16 LED display. Matrix Display Library (supports multiple displays)
      • 8 x 8 LED grid: Send commands to the display via SPI. the 64 LEDs then remain as you want them until new commands sent.
      • MAX7219 Dot Matrix Modules are 8x8 LED modules that can be connected together without extra wiring. This library gives it easy editing, scrolling text and so on.
      • Matrix LED backpack - Code for running the Sparkfun RGB 8x8 matrix LED backpack. Controlled via SPI.
      • Rainbowduino: An Arduino-compatible board that can drive an 8x8 RGB matrix, or 192 discrete LEDs.
      • Colorduino: An interface library for ITead Studio's Colorduino and Arduino RGB LED Matrix driver shield.
      • LedDisplay: Library for HP/Agilent/Avago HCMS-29xx LED dot matrix character displays.
      • Parola for Arduino is a modular scrolling text display using MAX7219/21 LED matrix display controllers. The display is made up of any number of identical modules that are plugged together to create a wider/longer display. The aim was to create a 'Lego-like' approach to LED matrix display, using standard 8x8 LED matrices with support from a dedicated library for text scrolling special effects:
        • Left, right or center justification in the display
        • Scrolling, appearance and disappearance effects
        • Control display parameters and animation speed
        • Support for fast hardware SPI interface.

    • Monome 64 clones... 8x8 matrix of LED illuminated switches, turned into a musical/ lightshow instrument with hardware and software.
      • THE Octinct - Arduino based RGB Monome 64 clone.
      • bonome - Arduino based RGB Monome 64 clone with SparkFun button pads.
      • 4 by 4 RGB Monome clone - controlling an RGB LED / button matrix using the TLC5940.

    • Things that don't (?) fit any of the above categories, or fit in several of them.

  • LCDs

  • Lighting Control

  • OLED
    • Some code samples to control output to a small surface-mount OLED with basic hardware-level graphics functions
    • SMARTGPU Create advanced color touchscreen GUIs very easy with Arduino + SMARTGPU.
    • uOLED Library for the 4D Systems OLED displays. This is a serial communication with the display.
    • U8glib: Monochrome OLEDs with SSD1325, SSD1327, SSD1306, SH1106 or LD7032 controller.
    • U8g2: Monochrome LCD, OLED and eInk Library. Successor of U8glib.
    • Ucglib: True color OLEDs with SSD1351 controller.
    • The Serial_LCD library suite handles the µLCD, µOLED and µVGA screens from 4D Systems. It manages text, graphics, touch, read and write on SD-card, sound, through a single serial interface, either hardware, software or I2C. High-level commands offer GUI, graphics and even a picture frame!

  • Video Output
    • 50 lines, 100 characters on a VGA monitor, with windows, for about $35 and one digital output. Word wrap, scrolling taken care of for you. Colors allowed.
    • MicroVGA Library for MicroVGA-TEXT devices, allowing Arduino to display on a VGA (LCD/CRT) monitor or a television and read keystrokes from a PS/2 keyboard.
    • TVout Library for NTSC and PAL composite video output. Video output runs in the background via timers, allowing the sketch to concentrate doing its thing.
    • SID-emulator The shield contains an emulator of the audio chip in a Commodore 64. The systems allows you to create original 8-bit video and sounds programmed and controlled via the Arduino board.
    • Bitmap picture display on a graphics shield
    • SMARTGPU Create advanced color touchscreen applications with bitmap pictures.
    • Picaso Library for interfacing with 4D Picaso devices (including the 4D uVGA Picaso MD1)
    • Gameduino Library for the Gameduino, VGA display for video games
    • HDMI Shield Raspberry Pi as a "HDMI shield" for Arduino
    • NovaVGA Shield, a low-cost shield board for the Arduino that provides an easy-to-use VGA graphics output. 160x120 pixels and 64 colors, each pixel directly controlled via SPI.

  • VFDs Vacuum fluorescent display modules are often used in the same applications where LCD modules are used. VFDs are typically brighter, have more contrast and a greater view angle than LCDs.
    • Ncr4X20Vfd Library, examples and information for driving the NCR 7454 / Futaba M204SD01B VFD module.
    • PrimeVfd Library, examples and information for driving the Futaba NA202MD13AA VFD module.
    • IeeFlip & IeeFlipNoFrills Libraries, examples and information for driving IEE Flip VFD modules.
    • FutabaUsVfd Library, examples and information for driving Futaba US162SD03CB VFD modules and perhaps other Futaba VFD models.
    • M66004Vfd Library, examples and information for driving VFDs using the Mitsubishi/Renesas M66004 VFD controller IC. This includes the display/control panel used in many HP LaserJet printers such as the LaserJet 4.
    • HpDecVfd Library, examples and information for using VFD modules originally intended for the discontinued HP z500 Series Digital Entertainment Center media PCs.
    • SPI_VFD A library for driving modules that support the standard HD44780 command set but use SPI (clocked serial) instead of parallel communication. This library was created to drive the uPD16314 controller, commonly used on Samsung VFD modules.
    • Noritake VFD How to interface Noritake CU-Y series VFD modules to Arduino

  • IR Remote Output

Audio Output

  • Audio playback from SD card
    • SimpleSDAudio library: Play audio files with your Arduino in decent quality from SD card, only very few additional hardware required, easy to use library.

  • µC Hobby Arduino Sound Tutorial
    • Part 1: various strategies to generating sound.
    • Part 2: "hello world", simple tone generation.
    • Part 3: playing a melody.

  • Tone Generation Libraries
    • Arduino Tone Library: A library that can be used to generate tones in the background using timers while your Arduino does other things.
    • toneAC - Advantages over the tone library: Twice as loud, higher quality, much higher frequencies, much smaller compiled code size, volume control, uses timer 1 and less stress on speakers.
    • toneAC2 - Alternate version of toneAC that allows for flexible pin assignment and uses timer 2 instead of timer 1.
    • NewTone - Plug-in replacement for the tone library. Advantages: Uses timer 1, higher quality and exclusive use of port registers which results in faster and smaller code.
    • SoftTimer is a time sharing solution, what has a built in asynchronous TonePlayer. It uses the Arduino's 'tone()' function, but does not block other processes while playing music.
    • DTMF Encoder is a dual-tone emulator that can be used to dial phone numbers using DTMF (dual tone multi frequency) signaling. Place the speaker close to a handset, and this sketch can dial a touch-tone phone number.
    • Impulse to DTMF Converter use your old telephone with this impulse to DTMF converter

  • Realtime audio processing
    • realtime audio: digitizing sound and audio effects.
    • MicroLS: a simple light show which implements advanced data acquisition and DSP functions.

  • '''Zvonek: Jak si udelat vlastní zvonek.

  • Synthesizers and sound generation

  • Speech/ Voice Synthesis

    • Using the SpeakJet How to connect to and program the SpeakJet- a $26 (8/10) phoneme based processor. One data line from Arduino. Sound effects as well as speech, and DTMF codes.

    • Babblebot | Babblebot Easy to use voice and waveform synthesizer ( SpeakJet variant ). Serial interface with support shield for Arduino.

    • SpeakJet OO library for driving SpeakJet chip. Supports standard+custom dictionaries, speaks integers, words, phrases etc.

  • MIDI

  • Audio Device and Module Control

    • Control an iPod with the Arduino, by Jonas Olson & Robert White.
    • Connect Arduino to the YAMPP III Industrial MP3 player, diagrams by Jens Wunderling.
    • Some code for controlling an iPod remote through Processing, by Rosie Daniel.
    • VMUSIC Mp3 Module
    • Mediaplayer for Adafruit's Waveshield
    • Si4735 library for controlling a radio chip from SiLabs (also available as a SparkFun shield).
    • Nuvoton ISD1700 library for low-cost, solid-state audio storage and playback

  • PSG - Programable Sound Generators

    • SID-emulator The shield contains an emulator of the audio chip in a Commodore 64. The systems allows you to create original 8-bit sounds programmed and controlled via the Arduino board. You can play your sounds over the MIDI-Interface.
    • Vintage Gameboy and SNES -like sound using Yamaha chips (YM294, YM2149)
    • AY38910 This is a small project that tries to control the Yamaha AY-3-8910 with an Arduino, to generate sounds. The AY-3-8910 is a popular chip used in chiptunes and found on Atari 2600, Spectrum, Amstrad CPC and many retro game consoles.

  • Gakken SX-150

  • Morse code I/O

    • Phi_Morse library plays Morse code on a speaker and recognizes keyed in Morse code. You can call the library with a string and the function morse_out() plays the string on speaker. If you call morse_in() you can key in Morse code and the returned value is keyed in character.

    • Morse EnDecoder - Raron's duplex Morse Machine. Send or receive Morse... as fast as 300wpm Arduino-to-Arduino, if you set up two of his "Endecoders". Entertaining video demonstration, full souce code. Input via momentary switch, microphone or keyboard via serial monitor, output via piezo or serial monitor. One Arduino can be sending and receiving at, in human terms, the same time. If you are delivering the input via keyboard, you just type a phrase, and when you press "enter", the phrase emerges in Morse.


Electrical / High Power

  • Relays
    • Schematic for driving DC relays using a transistor connected to an Arduino pin.
    • Schematic for driving 5V DC relays using an optical coupler and a transistor connected to an Arduino pin, which is protected by the optical coupler. Based on the schematic above.
    • Control a Velleman K8056 8-channel relay card thru RS-232 using an Arduino library
    • Velleman K8056 updated Arduino library
    • PCB and kit for a single channel relay with embedded driver at EtherMania
    • A "novice-friendly" way to control 110v AC (US style plug/ socket). $19+p&p 8/10. May keep you safe.

    • ArduPower an Arduino based telnet server to control six power supply, with login password, editable TCP/IP parameters, relay status and connected system information, all parameters saved on EEPROM.
  • Relays tutorial: Back to stone age... elegantly
  • MicroHTR: A simple heating system using a PID controller
  • Rainmaker irrigation controller. You can control up to five zone of watering, can be programmed for each day of the week. -> link not valid in May 2012.

  • Voltage Boosters
    • A simple regulated DC-DC booster for up to 60V 1/4W. It uses no special ICs, just basic components and two pins from the Arduino.

  • Spark Plugs

Multiplexing Outputs


The UNO and Mega2560 use an ATmega8u2 or ATmega16u2 to provide the USB interface to the Host PC and it is programmed with USB to serial firmware. The firmware on the ATmega8u2/16u2 can be replaced to turn the UNO or Mega2560 into a different USB device such as a Keyboard, Mouse, or MIDI device. This section has links to different USB firmware resources.

The coming Arduino Leonardo has USB support built into the the processor, removing the need for the FTDI or the ATMega8u2/ATMega16u2 to communicate with a host PC and the Arduino 1.0 IDE has partial support (written 22/2/12) for keyboard and mouse interfaces.

The Micro has USB support as a Keyboard and or Mouse. This can be used to play the Les Paul and Robert Moog Google Doodles as an example. To use more USB HID functions like Gamepad or Media keys see HID project above.


Examples and information on specific input devices and peripherals: How to connect and wire up devices and code to get data from them.

See also the pages devoted to the Dallas One-Wire MicroLan, I2C and Ethernet. They enable you connect additional input (etc.) devices across networks controlled by the Arduino. The trouble of controlling a network is repaid if you need to connect many inputs (and/ or outputs), or if your actuators / sensors are not close to your Arduino.


Ardustat: Galvanostat/Potentiostat

  • Ardustat: Schematics and code to build an electrochemical characterization devices using an Arduino. Open source successor to Jonny Galvo. Measures charge held by, e.g., a battery.

Audio Input

Automotive Input

  • Library to communicate with the ELM327 OBD2 reader. Can be used to read both standard OBD metrics and raw CAN data.

Bar Codes

  • You can hook up a bar code scanner (which simulates a keyboard) or a keyboard to the Arduino. See bar code scanner

Capacitive Sensing

Degrees Of Freedom, 6DOF, 9DOF, 10DOF, 11DOF

This section is for multiple sensors combined into a "Degrees Of Freedom" sensor or module. For the individual sensors, see the sections: Accelerometer, Gyro, Magnetometer (compass), Pressure Sensors (air, fluid, baromic), GPS.

Distance Sensing

 - Variant of the code above but returns actual distance.


Human Interface


Joysticks / Gamepads

New!! improved adapter with Att pin and lock mechanism called wiikend.


(See also section on capacitive sensing for keypads which will, for instance, work through a window pane.)

  • Unified Arduino Input Interface: Library that provide unified interface to all input devices. The interface can sense buttons, rotary encoders, keypads, analog buttons, serial keypads or even smartphone as your Arduino input. Make local interface on your project and control it the same on remote interfaces on PC, phones or internet.
  • keybrd - A library for creating custom-keyboard firmware. Supports split keyboard and multiple-layer configurations.
  • GKOS Keypad - Enter any text directly into Arduino simply with 6 keys.
  • Keypad - Read a matrix keypad. See Keypad Tutorial.
  • OneWireKeypad - Keypad using just one analog pin
  • Simple interface board to connect USB keyboard/ keypad - Converts output of USB keyboard to a simple stream of serial data. Interface to Arduino over a single bit.
  • 16-Button Keypad Shield - A shield and keypad that can either be mounted together, or separated by an Ethernet cable
  • PS2Keyboard - A small library that deals with PS/2 based keyboards
  • PS2KeyboardExt - An extension to the above library to support more keys and functions
  • PS2KeyboardExt2 - another extension, fast with shift, alt and caps lock and caps_lock light
  • PS2C - A final version of the PS2Keyboard library that gives complete functionality of a ps2 keyboard
  • PS2tester: Arduino sketch to communicate with PS/2 devices (e.g. keyboard). Useful for testing/debugging custom PS/2 devices, for example.
  • I2C Port expander and Keypads - A small library for use keypads with I2C port expander PCF8574
  • I2C Port expander and Decoders - A library that uses a 74C922 keypad decoder on an I2C port expander
  • See also the entry in the communications section, wireless, IR subsection, about using a domestic (e.g.TV) remote to send "keystrokes".

Light sensors... visible, IR, etc. Levels, not images

For communication with infrared, see the IR Remote section.

Location (navigation)

See also the Magnetometer (compass) section for compass sensors.

  • GPS
    See also the Degrees Of Freedom, 6DOF, 9DOF, 10DOF, 11DOF section for a GPS module combined with an accelerometer, gyro, etc.
    • Sample configuration code for GPSBee modules using the U-Blox chipset. Includes setting baud rate, update rate, NMEA message disabling and more!.
    • Sample configuration using ITEAD GPS Shield with Arduino Uno and LCD display,
    • Sample configuration using ITEAD GPS Location Sensing with the Arduino Mega,
    • Arduino code for parsing data from the EM-406 GPS module, by bigengineer.
    • How to connect a Parallax GPS module to the Arduino, and read its $GPRMC string. Tutorial translated from Igor González Martín's original Spanish tutorial. This allows you to get date, heading, latitude and longitude from the GPS module.
    • GPS on Arduino explains how to read the output of a GPS module and render the information on a LCD screen.
    • GPS library for Arduino/Wiring by Maarten Lamers is a library for decoding (NMEA) data from any GPS receiver. It extracts all information types, such as speed, direction, location. Supports $GPRMC and all possible sentence types. Includes example programs and routines for calculating distances and directions over Earth's surface. NOTE: this library does not work on 1K Arduinos: Duemilanove, etc.
    • TinyGPS, a new GPS/NMEA parser by Mikal Hart is a resource stingy library for decoding (NMEA) data from any GPS receiver. It extracts speed, direction, location, course, date, and time, but consumes only about 100 bytes of RAM.
    • Arduino-NMEA, Yet another GPS/NMEA library, this one provides an object oriented interface.
    • Acoustic.GPS A GPS homebrew "GPS" system that uses sound to determine distance to three known points using off the shelf components.

    • GPS Position Radio Mesh library for Arduino GPSNet is an Arduino library and example sketch that provides a radio broadcast mesh network among a number of GPS+RFM22 radio equipped nodes, such that all nodes in the network know the GPS position of all other nodes. Includes a sample PC program to display all node positions on a Google map.



  • Switches and Buttons
    • Unified Arduino Input Interface: Library that provide unified interface to all input devices. The interface can sense buttons, rotary encoders, keypads, analog buttons, serial keypads or even smartphone as your Arduino input. Make local interface on your project and control it the same on remote interfaces on PC, phones or internet.
    • Debounce: a library to debounce switches.
    • SoftwareDebounce: a simple software input debounce algorithm.
    • ClickButton - A library to get button clicks. Short and "long" clicks, multiple clicks like double click, triple click etc. Also button holds. Active high or low buttons, software debounced.
    • SoftTimer is a time sharing solution, what has a built in asynchronous software debounder. Has an onPressed, onReleased callbackwith the time it is being pressed.
    • Buttons: a simple library to use hardware debounced buttons, handling one shot and hold.
    • HoldButton: a code that makes a single button able to call different functions depending upon how long it it is held.
    • Button: simple hardware abstraction library
    • Improved Button Improved button library, Version 2 allows for double and multiple clicks.
    • Button (carlynorama) Another button abstraction library. Event based, also allows for being used with shift registers, debounce, holdDelay (like keyboards) etc.
    • AnalogButtons: a library to connect more than 1 switch to a single analog pin, using different voltage dividing resisters for each switch. Provides register callback functions or over-riding Button class methods to communicate a button press action. Supports configurable holding down of a Button.
    • AdvButton: Advanced, yet simple to use, library for registering user input with buttons. Provides an event based interface.
    • M66004Vfd: Library includes support for the buttons on the VFD display/control panel salvaged from certain HP LaserJet printers such as the LaserJet 4.
    • HpLaserJetLcd: Library includes support for the buttons on the LCD display/control panel salvaged from certain HP LaserJet printers.
    • DebounceInput (PaulMurrayCbr) Yet another debouncer, this one based on a simulated RC circuit and Schmitt trigger. Simple interface to detect state and state changes (rising/falling).
    • AceButton: An Adjustable Compact Event-driven (ACE) Button Library for Arduino. A button library with 2018 technologies. Handles debouncing and dispatches events to a user-defined event handler. Supported events are Pressed, Released, Clicked, DoubleClicked, LongPressed, and RepeatPressed. Timing parameters, event activation, and event suppression can be configured at compile-time or run-time. Optimized for compact memory consumption. Supports single button or multiple buttons. Thoroughly unit tested using AUnit.

  • Encoders

  • Potentiometers

  • Telephony
    • Rotary Dial: reading pulse-dialed digits from a rotary telephone dial

  • MIDI



See also the Magnetometer (compass) section for magnetometer sensors.

Multiplexing Inputs

Signal Filtering

Pressure Sensors (air, fluid, baromic)

See also the Degrees Of Freedom, 6DOF, 9DOF, 10DOF, 11DOF section for a (baromic) pressure sensor combined with an accelerometer, gyro, etc..

RFID devices for input

  • Mifare MFRC522

  • SonMicro's SM130

  • RFID - Sparkfun/ Innovations
    Sparkfun offer several RFID readers suitable for Arduinos. There are useful discussions on the use of them in the SparkFun pages, and in the forum.

  • RFID - Parallax

  • RFID - General points and other readers
    • RFID door lock Using the SL018 low-cost I2C reader
    • At 1/2011, a useful discussion was unfolding in the forum on how to connect a Wavetrend active reader capable of reading cards at distances in excess of 2m.
    • The USB Phidgets RFID reader you may encounter for sale on eBay is not suitable for Arduino work, as to use it you need a proprietary .DDL

  • DIY RFID reader - using the Arduino plus simple home-wound coil to read FSK tags
    • FSK RFID tags are widely used, yet are unsupported by the popular Parallax kit. A simple solution based on using only the Arduino and a few low cost common components can read FSK RFID tags reliably (and potentially all other 125kHz tags).
  • RDM630 library for reading EM4100-compatible tags with the RDM630-reader.
  • Parsing Manchester code from EM4100 tags
    Library for parsing manchester or biphase encoded data from EM4100 compatible tags. Requires external hardware for RF demodulation.

Post in forum

Slotted Detectors/ Proximity Sensors

See also other references to "proximity" elsewhere on page, including the material in distance sensing. There may be discussion of these devices in the "encoders" section, for instance. Set up xrefs? SEe, for instance, the material here in "IR Reflectance/Line Sensors" under "Light sensors"

  • Someone please do a write up of the useful slotted and reflective detectors which DO exist, and can be plugged into Arduinos!

Tagging / Labeling

This section a legacy, see the sections RFID and Barcodes


  • Time library for dates and times that can be used with and without external hardware
  • DCF77

  • DS1302
    • DS1302 Information and a basic sketch for the DS1302.
    • DS1302RTC library, companion the Time library.
    • DS1302 RTC (23-wire interface with supercap backup) library
  • DS1306
  • DS1307
  • Use the CMax CMMR-6P WWVB Receiver with Arduino
  • Sleep and Watchdog functions for battery operated equipment Nightingale example
  • Interface to IBM AT RTC bq3287 and compatable with 8bit bi-directional bus code and description
  • Interface to a Maxim-IC DS3231 I2C chip
  • Guide for beginners to using the DS1302 RTC in the datalogging shield. Could help other users of the DS1302 also.
  • Library for the DS1340Z RTC with sample sketch to read and write time code. (Low voltage operation supported). For more information please check out the DS1340Z Inmojo Arduino Shield product page.
  • PCF8563 RTC Library with examples.
  • MicroCLK: A stand alone RTC controlled clock with LCD display

  • DS3234
    • The library creates software interface to communicate with DS3234 RTC.
    • It allows for using any pins as MOSI, MISO, CLK and SS, for communication with the DS3234, thus conflicts with SD and Ethernet libraries are no longer a problem.
    • The library is based on the example offered by SparkFun.
    • Library offers reading date and time, setting it, and also as a bonus it allows to read the temperature.

  • PCF8563
  • R4571 (ETM21E-02)
    • R4571 Epson Toyocom R4571 RTC Library and documentation
  • WatchDog: A library containing a set of intuitive and easy to use functions for utilizing the built-in AVR WatchDog Timer as an interrupt-based timer/counter.


Touch screen

Voltage, Current, Power (kiloWatt hours)

  • DC

  • Current sensing

  • 120V/240V AC
    • Monitor the power grid - A Blinkenlight experiment to monitor the power grid's frequency deviations / load.
    • How to build an energy monitor / power meter that can measure whole house energy use, using a current transformer to measure current and AC-AC power adapter to measure voltage plus a few resistors and capacitors. Calculates Real Power, Apparent Power, Power Factor, RMS Voltage, RMS Current, frequency and kWh.
    • 12 Input pulse counter
    • AC Phase Control Method for controlling power to AC devices using hardware timers, a triac and a zero crossing detector.

  • kWh Monitoring

  • Energy meter readout
    • Energy consumption monitor project reading out precise solar production and public grid consumption values from recent electrical power meters via serial infrared port and blinking LED, and generating pulses to feed the S0 port of an attached Solarlog 500 recording device with the current home consumption (in German).
    • Electric monitor Simple electric meter for measuring power production/consumption with resettable volt/ampere/kWh/time/temperature counters and a multi-mode LCD interface

User Interface

Graphical or text - based user interface (UI) or human machine interface (HMI) on Arduino: How to ask a user to input information (number, choose from a list, enter text, etc.) on an Arduino using display (LCD, LED matrix etc.) and buttons, keypads or other devices.

Also see Via Mobile Phone for a simple mobile based user interface - No Android programming required and very little Arduino programming.

Text-based user interface

  • microBox: microBox is a Arduino library that provides a interface with Linux Shell like look and feel for Arduino applications. With microBox own commands and application parameters are made accessible to the user within a virtual Linux filesystem tree. The parameters can easily be accessed by Linux standard commands.
  • Unified Arduino Input Interface: Library that provide unified interface to all input devices. The interface can sense buttons, rotary encoders, keypads, analog buttons, serial keypads or even smartphone as your Arduino input. Make local interface on your project and control it the same on remote interfaces on PC, phones or internet.
  • Phi_prompt user interface Library Interactive user interface for your projects. Library functions use an HD44780 character display and one to six push buttons. You can use the library to construct a user interface to ask your user to enter numbers, select from a list, navigate a menu (multi-level), enter text strings, display multi-line and multi-page long texts from main memory and PROGMEM, ideal for introductions and outputting multi-line results. You can also call simple functions such as ok_dialog and yn_dialog to ask user for information. Lists/menus have lots of features, scroll bar, auto-scroll long list items like on an MP3 player, centering on item, flashing cursor or arrow to highlight item, current/total index or 0-9 index etc.
  • MenuSample - an interactive terminal-based menu interface for your projects. Allows multi-level menus, uses PROGMEM space, and lets you control your Arduino interactively.
  • M2tklib (LiquidCrystal Library): 2-6 buttons or custom defined, debounce, menus and dialog definitions in PROGMEM area, text & number input, toggle/check/combo box, container widgets, scrollbar, online reference and tutorials
  • MENWIZ - MENu WIZard: Simple coding, user defined callbacks and actions. The user can define a splash screen to be activated at startup, a user default screen to be activated after x secs from last menu interaction. The user can easily fire action inside a menu hierarchy. Any sketch variable (integer, byte, boolean, float) can take input from the menu. Menu navigation needs 4 or 6 buttons (up to the user), or the user can provide its own callback routine for custom nav devices. It is built on top of "new" LiquidCrystal library (i2c, 4 wires, 8 wires and other interfaces are supported) and is able to support different LCD sizes (16x2, 20x4, ...).
  • LCD Menu Easy to use Menu-drive user interface. Primarily intended for 16x2 to 24x4 style character displays. This library uses Liquid Crystal to control the LCD, and adds a menuing layer on top so that you can define your menus easily, and receive callbacks from the menu code to execute your code. You can also use some of the built-in code for taking input for Boolean or integer inputs. The primary focus of this library is on an easy-to-use interface for defining your user interface and getting input back.

Graphical user interface

  • Monochromatic dot-matrix display implementations
    • M2tklib (GLCD, U8glib or DOGM128 Library): 2-6 buttons or custom defined, debounce, menus and dialog definitions in PROGMEM area, text & number input, toggle/check/combo box, container widgets, scrollbar, online reference and tutorials
    • Seeeduino TFTv2 Menu Converted Seeeduino TFT Menu to work on the TFTv2 screen.
  • Color dot-matrix display implementations

Command line user interface with some graphic features

  • Here's an implementation of a quite basic OS that enables editing and executing small apps on an UNO with a TFT-touch-shield:

Hardware independent layers

  • Multi-tap input This code accepts any type of keypads such as standard Arduino keypads library result and interprets it with a pre-defined multi-tap mapping. It has cap key and space key for 12 key pad and more functions for 16 key pad. The instructions are embedded as comments in the front of the code.


Various options for storing data from your Arduino board. See also Data Logging and Plotting

Built-In EEPROM / Built-In Flash

  • The EEPROM library give you access to 512 bytes of non-volatile memory (that is, it retains its value when you turn the board off).
  • 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.
  • The EEPROMex library extends the standard EEPROM library with: Reading, writing bytes, longs, ints, floats and doubles, single bits, structs, arrays and more. Note that most of the functionality of EEPROMex(other than address allocation) is now included in the stock Arduino EEPROM 2.0 library.
  • EEPROM-Erom library is made to ease reads/writes of any types of data, care-free data address management and reduce the wear of EEPROM flash memory. Includes tools for handling all EEPROM variables as one entity and verification of stored data validity.
  • Bitlash lets you define and store new Bitlash functions in EEPROM.
  • EEProm wear leveling - A Blinkenlight experiment that explains EEPROM wear leveling.
  • Arduino EEProm wear leveling - A basic library to manage variables with wear leveling.

Dallas 1-Wire

  • There are EEPROMs in the 1-Wire chip family from Dallas Semiconductor. They can connect to the Arduino via a MicroLan, or more directly. The techniques for using MicroLans from an Arduino have already been developed. (And give you access to input and output options, too.)

DataFlash Memory



SD / MMC Card



Ferroelectric RAM (FRAM)

  • Hackscribble Ferro - Library to interface with Fujitsu MB85RS FRAM chips. Add up to 256KB per chip of fast, non-volatile memory through SPI bus.
  • FM24CXX & AT24CXX chips I2C to FRAM - Library to interface with FM24/AT24 chips. Uses up to 32K nonvolatile FRAM over I2C interface.

USB Memory Stick


  • Directly connect SLE4432 / SLE4442 and compatible smartcards to the Arduino via SCLib.

Data Logging and Plotting

Information on logging and plotting Arduino data. SD card libraries, logging and plotting packages. See also Storage

Data Logging

  • pfodApp (Android) The free pfodDesigner generates Arduino code for logging data in CSV format to your mobile phone (using pfodApp). Works with Arduino code for 101 and other BLE boards as well as SMS and WiFi shields. No Android Programming Required


  • pfodApp (Android) The free pfodDesigner generates Arduino code for plotting data on your mobile phone (using pfodApp). Works with Arduino code for 101 and other BLE boards as well as SMS and WiFi shields. No Android Programming Required


Information on communication protocols often used to talk with other devices. Please refer to Interfacing with Software for information on linking with various PC based applications. This listing may contain cross-listings with device type listings above.


  • Guide to Arduino Communications provides an overview of various communication protocols available on the Arduino. Covers SPI, I2C/TWI, USI, UART/USART, USB and others. Good introduction to the various types of communications available.


Project is hosted on

  • ModbusMaster: This is an Arduino library for communicating with Modbus slaves over RS232/485 (via RTU protocol). Discrete functions 0x01 - Read Coils, 0x02 - Read Discrete Inputs, 0x05 - Write Single Coil, 0x0F - Write Multiple Coils and register functions 0x03 - Read Holding Registers, 0x04 - Read Input Registers, 0x06 - Write Single Register, 0x10 - Write Multiple Registers, 0x16 - Mask Write Register, and 0x17 - Read Write Multiple Registers implemented. Available from within Arduino IDE Library Manager.

  • SimpleModbus is a collection of Arduino libraries that enables you to communicate serially using the Modicon Modbus RTU protocol. Mail me at for any help on using the libraries. Project is hosted at Google Code

  • Modbusino is a thin library to response to Modbus requests from your Arduino (slave). The library is based on code from and is designed to be robust, non-blocking and with a very low footprint. The code is under LGPL v3 license and available on
  • The MuxShield collects serial output from up to 5 slaves vis software and sends it out to the serial hardware port.
  • SerialControl remotely controls Arduinos (usable in a XBee peer2peer network!)
  • iPodSerial Library to interact with iPods over serial through their dock connector. Supports Simple Remote and Advanced Remote modes.
  • General Points, serial interfacing General skills and ideas for using Arduinos connected to each other or other devices via serial port. From Sheepdog
  • Talking to Windows Writing Windows programs to deal with data from, or send data to Arduinos over serial link. Written in Delphi, but little "Delphi cleverness"... mostly just calls of Windows APIs. From Sheepdog.
  • Arduino Terminal Server - Serial to Network Proxy Server using old computer hardware.
  • Ben NanoNote and Arduino talking each other through serial
  • Compiling and flashing through serial with Ben NanoNote
  • CuteDigi RS232 Shield for Arduino
  • RS485 Shield for Arduino from
  • Insek Internet to Serial Proxy Open source Mac application which facilitate the communication between a Web API and an Arduino connected to an USB Serial Port without any specific hardware.
  • Bitlash is a serial port command shell and interpreted language for Arduino.
  • Megasquirt Serial Driver is a library around the MegaSquirt 2 ECU, providing an interface from Arduino to the controller with a high level of abstraction.
  • Nick Gammon's elegant RS-485 solution. A library, code examples, hardware designs ($6 per node) for interconnecting multiple devices over two wires. Basis for a simple "LAN" of sensors, or other uses. This includes a library for error checked packet sending over whatever link you want to set up. (RS-485 independent.)
  • Dynamic config
  • VU Meter a Blinkenlight experiment that exhibits serial communication using a Python program to control the Arduino as VU display. Also features a nice Video.

  • Comduino Terminal v1.0 Use your PC to set output state and PWM value on digital outputs of your Arduino board. Scan inputs and check values/states on pins. Sketch running on board implements a simple command interpreter which executes Arduino functions in response to commands sent from PC. The accompanying VB application can also be used as a general purpose terminal utility to talk to other serial devices.
  • Simple Arduino CRC Library implements a variable-size CRC checksum for 16-bit integer arrays. Available CRC length range is 3 to 15 bits.
  • Arduino SDCard file manager sketch with ZModem Serial based SD card file manager and ZModem file transfers (send and receive) between PC and Arduino. Requires an Arduino with 30K+ of flash and 2K+ of dynamic memory (Uno, Nano, Mega, etc.)
  • Morse code decoder using Serial monitor and push button switch
  • 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).


  • CmdMessenger: A messaging library between PC and Arduino. It supports Bluetooth communication, including auto connecting and watchdog functionality. to Messenger above.
  • pfodApp (Android) pfodDesigner generates user interface menus with complete Arduino code for 101 and other BLE boards. No Android Programming Required




uM-FPU V3.1 Floating Point Coprocessor

  • Fpu library for using the uM-FPU V3.1 Floating Point Coprocessor.

uM-FPU64 Floating Point Coprocessor

  • Fpu64 library for using the uM-FPU64 64-bit Floating Point Coprocessor.


  • 2B is a simple protocol used to receive and send messages to Arduino


GSM/GPRS M2M modules



  • HDMI CEC Library communication with HDMI CEC capable devices (TV, DVD, Receivers, BR) : power on/power off/input selector.


  • Nimbits - an open source data historian service for Google App Engine shows how to record Temperature data into a Data Point Channel directly from an Ethernet Shield onto Google's infrastructure. Nimbits - free, social and open source data services

  • Australian Robotics blogger explains how to use Web Services ( to upload XML temperature data from Arduino Ethernet Shield and the Thermistor : Web Data Logging With Pachube

  • GumboLabs write-up on how to get the best out of the Ethernet shield. Also explains connecting to a Rails app. Arduino Ethernet Shield and Rails.

  • The "official" Arduino Ethernet Shield uses the w5100 chip from WIZnet.

  • Arduino Ethernet Library by gkaindl enabling DHCP, DNS and Bonjour on Arduino

  • A "getting started" guide. Shows how you can set up an Arduino to serve a web page with two buttons: LEDon, LEDoff. Click a button, and an LED on the Arduino serving the page goes on or off... and shines (or not!) on a light sensor. What the light sensor is seeing reported on the page the Arduino serves. Try an Arduserver for yourself. Issues of static vs dynamic IP address covered. solution. Router and firewall issues covered. Full code presented. Done on three platforms, with three ethernet interfaces (RBBB ($15), Uno, Teensy / ENC28J60, W5100, Wiz820io Ethernet.) How to pass the data from the light sensor to Pachube is addressed, by reference to other materials.

  • ArduServer2 The full code for something similar to the first ArduServer (see above) is tacked on at the bottom of the page the link will bring you to. This version of the Arduserver runs in an Arduino Uno with an "official" Arduino Ethernet shield... one with a W5100 chip. This version includes a Dallas DS18B20 1-Wire digital temperature sensor on the ArduServer, and the temperature is included in the web page served up.

  • ArduServer3 Explanation and full code for something similar to the first two ArduServers (see above). This version of the Arduserver runs in a Teensy 3.1 with a Wiz820io Ethernet shield. Brilliant. I'm no longer encountering the old problems limiting the size of the page served. This Arduserver has a Dallas DS18B20 1-Wire digital temperature sensor, and the temperature is included in the web page served up, in addition to the usual other inputs and outputs. There's a YouTube clip of ArduServer3 in operation.

  • ArduSimpSrv Arduino as server, client software provided for Windows PC. Without HTML- makes room in Arduino for other things, but means dedicated client software needed. A Linux version would be very welcome.

  • Here is a blog describing how to connect to an internet chat server using the Arduino and a Lantronix ethernet module.

  • Nuelectronics has developed an Ethernet shield for the Arduino with schematic, open-source ethershield library and webserver demo using Microchip's ENC28J60 SPI ethernet controller. The open-source TCP/IP stack is in the Arduino library format, easy to use and available for downloading.

  • Ethernet Board is a simple Paper-PCB board based on the ENC28J60. It's easy to create and one doesn't need a printed circuit board.

  • Ethernet_ENC28J60 Álvaro Justen is working on a library what is compatible with ENC28J60 modules/shields and have the same API as Arduino's standard Ethernet library, so it is more easy to use than other libraries (as nuelectronics').

  • UIPEthernet (Arduino_uIP): A plugin-replacement of the stock Arduino Ethernet library for ENC28J60 shields and breakout boards. Full support for persistent (streaming) TCP-connections and UDP (Client and Server each), ARP, ICMP, DHCP and DNS. Build around Adam Dunkels uIP Stack. This library is fully implemented and working!

  • Adafruit XPort/Ethernet shield - How to connect a Lantronix XPort to an Arduino, includes schematic & library. Examples of reading POP email, webserver, sending & receiving twitters...

  • Beginners' guide to tweeting with Arduino and Ethernet shield.

  • a Web Server example, made using an Ethernet Shield.

  • the Webduino library, a modular web server for the Arduino Ethernet Shield and AdaFruit shield using the Wiznet module that can be integrated into your sketches. It comes with several examples.

  • TinyWebServer, a small web server for the new Arduino Ethernet shield with microSD. It allows your web server files to be stored on a microSD card, giving your Arduino more memory for your program. You can even update the files directly over HTTP, making it easier to change your HTML interface after the project is finished.

  • RADIUS Client, Classes for creating, sending and receiving RADIUS requests as per RFC 2187 and 2188. For ArduinoMega and Ethernet shield.

  • MQTT Client, provides a client for doing simple publish/subscribe messaging with a server that supports MQTT v3. For the Arduino Ethernet Shield. For more information about MQTT, visit

  • TextFinder library for extracting information (parsing) using Ethernet or Serial data

  • The Bitlash 2.0 release includes BitChi, a web and telnet server that serves dynamic content with Bitlash as the scripting language.

  • Jee Labs' EtherCard is a library for ENC28J60 that is in active development, and solves a lot of the instability problems in other implementations.

  • PachubeLibrary encapsulates the communication with the Pachube server. It simplifies the work to connect the Arduino based device into the Internet of Things.

  • homecontrol4me A Home Automation Project - Control your Wireless Switched Outlets over Ethernet with your Computer or Smartphone (currently German language only).

  • eSmtpSender Send Email via SMTP , detect and manage authentication error.

  • Send emails with SMPT : Email and read emails with POP3 : Email POP3.

  • SonosUPnP: Control and read the status of your Sonos speaker system using an Arduino Uno.
    Source code on GitHub:

  • MicroXPath: XML navigator/parser with a tiny memory footprint (can use PROGMEM on AVR).
    Source code on GitHub:


See also the "wire-less" section for other communications channels without wires, e.g. IR.

  • WifiDuino: Quick, simple and cheap Arduino Gui compatible board with build in WiFi Router module. Communication is done via Serial.print() and

  • La Fonera routers have got a serial ttl interface that you can easily use with Arduino.

  • The small router TP-LINK TL-WR703N could be a cheap way for connect Arduino with Ethernet/WiFi(maybe Bluetooth). You can buy this device in some shops at only 21 €, including carrier cost. You must install OpenWRT on the device with some other package and connect with Arduino via USB port. After this you can comunicate with Arduino, load new sketches in .hex format, use pendrive and other things.

  • AsyncLabs has the WiShield (Out of Business as of 2011-03-26, shields may still be available) which uses ZeroG Wireless's ZG2100 WiFi device. It comes with a WiShield library which includes the driver source code, a TCP/IP stack and a bunch of sample sketches demonstrating the use of the Arduino as a web server and a web client. More information about using the sketches can be found on the AsyncLabs wiki page.
  • Weburban has a low cost WiFi breakout board which uses a Microchip 80211b/g/n device and connects via a simple, labeled header. It's compatible with WiShield and other Arduino WiFi libraries.
  • SparkFun has the WiFly Shield. It is fairly new but does have 802.11 b/g. They use the SC16IS750 to communicate via SPI to Uart for much faster speeds. Documentation is there for the actual WiFly GSX module and the SC16IS750 but the only real code is from a SparkFun project called the Talking Wireless Server Tutorial. (Actually there's also a mostly-Ethernet library compatible WiFly library.)

  • SparkFun also has WiFly Breakout Boards which use just 4 connections (RX, TX, VBATT, GND) for a full wifi connection through Roving Networks RN-series wifi chips, including RN-131. RN-171 and RN-XV.
    A serial WiFly driver library and Client-Server classes are available through and

  • Watterott makes the RedFly-Shield with WiFi module from Redpine Signals. A library is available at

  • Roving Networks makes the low-cost WiFly RN-XV module, which plugs into an XBee socket and provides WiFi access via the serial port. 802.11b/g with WEP and WPA/WPA2 support. Supports one UDP or TCP connection at a time.
Sparkfun has the module available here: WiFly RN-XV Wire Antenna.
A 0.3 library is available here: github/WiFlyHQ.

  • FioV3+Wifly+128bit security -- A simple way to control Arduino devices from Android Mobile via Bluetooth, BLE,WiFi/internet with 128bit security against hackers taking control. Works with 101 and other Bluetooth Low Energy boards without and Android programming

Flash / Flex


  • DMX (Digital MultipleXed) is a protocol used for connecting lighting controllers, dimmers, scrollers, scanners, etc..



Dallas One-Wire / MicroLan


MIDI Library - Simple and fast way to send and receive MIDI messages with the Arduino.

MIDI-out (sending midi data to another device)

  • Bongo-Boy Connect Wii Guitar Hero World Tour drum set to MIDI piano with no modification or external hardware. Now you can really unleash your inner rock star.
  • A 52 parts drumset: Yet Another Arduino Midi Drumhead. An invitation to build your own midi drumhead with an Arduino UNO, a mux shield and one infrared sensor optical hihat. 48 velocity sensitive piezos and 4 chokeable cymbals.
  • Ardrumo: software to convert serial data coming from the Arduino into Mac OS X MIDI drum data (i.e. how to get Arduino talking to GarageBand without buying any extra hardware).
  • S2MIDI - Windows (.NET) program for converting serial data from Arduino into MIDI messages (hosted on Google Code)
  • MIDI Relay - Very similar to S2MIDI - copies all note on / note off and controller messages to the default MIDI port.Useful for quick testing of MIDI applications(MIDI Relay)
  • ttymidi - a GPL-licensed program that allows an Arduino board to interface with Linux ALSA MIDI applications without any additional hardware.
  • MidiSerial - another GPL-licensed program for interfacing MIDI over serial. Multi-platform.
  • Make your Arduino into a MIDI drum controller with Todobot's tutorial
  • The Midi Out tutorial from the fine folks at ITP.
  • A blog on building a midi guitar pick using the Arduino.
  • read six sensors and send their values as Midi CC messages
  • Effects Processor Controller via MIDI
  • MIDI Touchpad hardware and software using PS2 Touchpad as a MIDI Device. Real MIDI, not translated by Desktop app.
  • USB MIDI firmware for UNO and Mega2560 Turn your UNO into a USB MIDI device.
  • MIDI File Library Read MIDI Standard Files from an SD card and process them in your sketch through callbacks. MIDI data can either be processed by the Arduino or be send to a synthesiser as a live MIDI stream.

MIDI-in (receiving and interpreting midi data with an Arduino)

MIDI Integration (Add MIDI capability to non-MIDI Devices using Arduino)

  • Forum link A write-up on adding MIDI preset functionality to a Tech21 SansAmp British Character Series guitar effects pedal
  • Blog Post A write-up on adding MIDI remote control functionality to a EHX Pitch Fork guitar effects pedal


Wireless... including radio-less "wire-less" channels, e.g. IR

See also: the WiFi section and Via Mobile Phone


  • iFrogLab LoRa module designer, builder and distributor. We make a USB LoRa hub or you can purchase the LoRa module directly and integrate into your projects with simple UART interface plus power. We support all of the World Wide LoRa frequncies and can provide the correct LoRa transciever for the frquencies that you need.- See our Web Site here and here. We also offer full Arduino support using our Arduino libarary and example codes - here.

(This "wireless" section will soon be split off into an independent page, unless someone disagrees by deleting this sentence).

  • Bluetooth
    • Wireless communication with PC and Arduino board using Bluetooth, by Mitchell Page.
    • Wireless communication with Cell phone and Arduino board using Bluetooth, by Bakalski Page.
    • A tutorial on Arduino and Android smartphone 2-way communication using Bluetooth and MIT App Inventor: Connect Arduino Uno to Android via Bluetooth
    • A Tutorial on setting up Arduino BT on Mac OS X Tiger
    • If you have the rare need to reprogram your BlueGiga module, here's a tutorial on how to build adapter.
    • See also
    • Weburban Blue Olive Bluetooth Adapter connects via UART to a USB breakout connector.
    • PaperBluetooth is a homemade Bluetooth shield by Txapuzas (Spanish)
    • BleRgbLed controls an RGB LED with Bluetooth Low Energy (BLE) using a RedBearLab BLE shield
    • Annikken Andee A Bluetooth shield and library that allows you to easily monitor and control Arduino from your smartphone! Just code the user interface in Arduino IDE! No Android programming required!
    • pfodApp (Android) pfodDesigner generates user interface menus with complete Arduino code for 101 and other BLE boards. No Android Programming Required
    • Click_BLE2_RN4020 Arduino library for interfacing with the RN4020 Bluetooth Low Energy (BLE) module: implements both central and peripheral roles.

  • EasyRadio
    • Connect Arduino to the EasyRadio transceiver module, diagrams by Jens Wunderling.

  • Interface to an RF Synthesizer Module

  • Handheld 2.4GHz Spectrum Analyzer
    • Shows the RSSI of different frequencies in the 2.4GHz band. The CYWM6935 radio and a display from a nokia cellphone are connected via SPI. here.

  • CYWM6935 / CYWUSB6935 DSSS Wireless Radio
    • 2.4GHz band wireless transceiver Arduino Library. The CYWM6935 module allows to create wireless networks. Webpage.

  • HomeEasy

  • HopeRF / Hope RF RF12 RF22 RFM22
    • Interface Arduino to HopeRF RF22, RFM22 and compatible transceivers. Includes classes for node addressed, unreliable and reliable datagrams. Now also supports mesh networks and automatic route discovery. Rock solid, flexible, high speed. Circuit diagrams, documentation and download instructions here.

    • The RFM12/RFM12B/RFM12BP modules for the 433/868/915 MHz frequency bands are connected via SPI. There's a driver for it here.

Visit MySensors
  • Nordic nRF24L01+
    • Build a mesh-enabled radio network between your sensors using the MySensors NRF24L01 Arduino Library. The MySensors website also contains easy-to-follow build instructions and Arduino examples to help you create your own wireless sensors.
    • Interface Arduino to Nordic nRF24L01 and compatible transceivers. Circuit diagrams, documentation and download instructions here.
    • A simple nRF24L01+ library with streaming support: rf24HQ
    • A wireless communication library for using the small, fast and bi-directional Nordic's Nrf2401 radio transceiver.
    • A simple library for the nRF24L01(+).
    • RF24: Another library for driving the nRF24L01. Uses standard SPI library. Supports up to 6 radios at once. Copious examples.
  • interfacing 2 nRF24L01 modules to Arduino Nano and controlling servo motors. example

  • Microchip MRF89XA
    • Library for interfacing the MRF89XAM8A modules. Example code can be found here.

  • Inhaos RF-2400
    • Arduino library to work with Inhaos RF-2400 modules. Source code, circuit diagrams, demo, firmware and client application for RF-2410U dongle can be found here.

  • HT12E
    • HT12E is a 12-bit encoder IC suited for remote control applications. The serial stream generated by this IC can be transmitted via RF or infrared to an Arduino running a specific decoding library available at this source. That is, if you want to control an Arduino board using a HT12E-driven remote control, then this is the right place to go!

  • Infrared

  • LoRa
    • iFrogLab LoRa module designer, builder and distributor. We make a USB LoRa hub or you can purchase the LoRa module directly and integrate into your projects with simple i2c interface plus power. We support all of the World Wide LoRa frequncies and can provide the correct LoRa transciever for the frquencies that you need.- See our Web Site here and here. We also offer full Arduino support using our Arduino libarary and example codes - here.

  • PCR-1000
    • A icom PCR-1000 controlled by a Arduino- here

  • Radio Signal Strength Sensor
    • This sensor measures radio signals from 50MHz to 3GHz. FM,TV,GSM,WiFi,Bluetooth here.

  • DCF77: DCF77, a local radio time signal Library and sketch

  • RCSwitch
    • Send and receive 315MHz or 433MHz radio signals to operate popular low cost remote control devices like power outlet switches. Handy for most devices with these chipsets: SC5262, HX2262, PT2262, EV1527, RT1527, FP1527 or HS1527. here.

  • Reading PPM from a hobby RC Receiver
    • PulseIn can be used to measure one or two channels
    • ReadReceiver uses standard RC hobby transmitters and receivers to communicate with the Arduino. Can read a nearly unlimited number of channels using PinChangeInt and Timer1 libraries.

  • Generating PPM for a hobby RC Transmitter
    • The ArduinoRC project shows how to interface an Arduino Nano/Uno and a spare RF module to make a custom multi-channel programmable RC transmitter.

  • Wixel
    • The Pololu Wixel is a general-purpose programmable module based on the TI CC2511F32 microcontroller that features a 2.4 GHz radio and USB. Open-source, precompiled apps like the Wireless Serial App make it easy to add XBee-like wireless functionality to your project, or you can write your own Wixel apps to take advantage of the Wixel's I/O lines and hardware peripherals.
    • The Wixel Shield for Arduino is an easy and affordable way to add wireless functionality to your Arduino or Arduino clone. With the Wixel shield, you get more than just a general-purpose wireless serial link between your Arduino and a remote computer or embedded system: you can also wirelessly program the Arduino using the standard Arduino computer software and wirelessly debug your sketches with the Arduino serial monitor. For more information, see the Wixel Shield User's Guide

  • VirtualWire
    • Interface Arduino to low cost RF wireless modules to provide high performance transmitters, receivers and transceivers for data. Circuit diagrams and documentation here, download here.

  • X10 Wireless
    • Arduino interface to the CM17A "FireCracker". The CM17A is a "serial" dongle that sends RF signals to X10 receivers which in turn send signals down the house wiring to control lights and appliances. Documentation and code here.

  • X10 Receiver
    • Arduino interface to the PSC05/TW523. The Arduino IDE includes the X10 library that lets you transmit. This example shows how to receive X10 commands. Documentation and code here.

  • X10 Send/Receive Library

  • X10 W800RF32A All-Housecode Receiver Library

  • X10 Transmitter

  • X10 Power Line, RF and IR libraries with extended code support
    • A new and improved set of libraries written June 2010 that supports transmitting and receiving X10 power line, RF, IR and serial messages at the same time using a single Duemilanove board. These libraries and the sample code make commercial X10 computer interfaces and RF/IR transceivers redundant. Click here to visit homepage.

  • X10 Power Line with Temperature and status response
    • an extension upon the library from BroHogan to send RCS temperature back to your X10 network Arduino Code.

  • XBee / ZigBee
  • Sounds

Via Mobile Phone

See also: the Bluetooth section and WiFi section.

  • pfodApp - Control via Android mobile using Bluetooth, BLE, SMS or WiFi - NO Android programming required. Works with 101 and other Bluetooth Low Energy boards without and Android programming Your Arduino code completely specifies what controls are displayed on the user's mobile phone. The user can navigate, execute commands by button presses, choose menu items, select items on lists, input text, input numbers and view raw data feeds from your Arduino project. Very flexible and very simple to code. A free Android menu designer app is available, pfodDesigner, which allows you to interactively design menus on your Android mobile and then generate the Arduino code that will display the menu and handle the button presses, via pfodApp. WiFi/Internet connections via pfodApp support 128bit security to protect against hackers taking control of your device.
  • Annikken Andee - Easily connect smartphones to the physical world! Annikken Andee allows you to easily monitor and control electrical devices and gadgets wirelessly via Bluetooth. Just code the user interface in Arduino! No Android programming needed!


Arduino-related stuff that doesn't quite fit anywhere else.