Back to rankings

Adafruit GFX graphics core Arduino library, this is the 'core' class that all our other graphics libraries derive from

arduino-library
Star Growth
Stars
2.8k
Forks
1.7k
Weekly Growth
Issues
120
1k2k
Oct 2012May 2017Dec 2021Jul 2026
README

Adafruit GFX Library Build Status

This is the core graphics library for all our displays, providing a common set of graphics primitives (points, lines, circles, etc.). It needs to be paired with a hardware-specific library for each display device we carry (to handle the lower-level functions).

Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit!

Written by Limor Fried/Ladyada for Adafruit Industries. BSD license, check license.txt for more information. All text above must be included in any redistribution.

Recent Arduino IDE releases include the Library Manager for easy installation. Otherwise, to download, click the DOWNLOAD ZIP button, uncompress and rename the uncompressed folder Adafruit_GFX. Confirm that the Adafruit_GFX folder contains Adafruit_GFX.cpp and Adafruit_GFX.h. Place the Adafruit_GFX library folder your ArduinoSketchFolder/Libraries/ folder. You may need to create the Libraries subfolder if its your first library. Restart the IDE.

You will also need to install the latest Adafruit BusIO library. Search for "Adafruit BusIO" in the library manager, or install by hand from https://github.com/adafruit/Adafruit_BusIO

Useful Resources

  • Image2Code: This is a handy Java GUI utility to convert a BMP file into the array code necessary to display the image with the drawBitmap function. Check out the code at ehubin's GitHub repository: https://github.com/ehubin/Adafruit-GFX-Library/tree/master/Img2Code

  • drawXBitmap function: You can use the GIMP photo editor to save a .xbm file and use the array saved in the file to draw a bitmap with the drawXBitmap function. See the pull request here for more details: https://github.com/adafruit/Adafruit-GFX-Library/pull/31

  • 'Fonts' folder contains bitmap fonts for use with recent (1.1 and later) Adafruit_GFX. To use a font in your Arduino sketch, #include the corresponding .h file and pass address of GFXfont struct to setFont(). Pass NULL to revert to 'classic' fixed-space bitmap font.

  • 'fontconvert' folder contains a command-line tool for converting TTF fonts to Adafruit_GFX header format.

  • You can also use this GFX Font Customiser tool (web version here) to customize or correct the output from fontconvert, and create fonts with only a subset of characters to optimize size.


Roadmap

The PRIME DIRECTIVE is to maintain backward compatibility with existing Arduino sketches -- many are hosted elsewhere and don't track changes here, some are in print and can never be changed! This "little" library has grown organically over time and sometimes we paint ourselves into a design corner and just have to live with it or add progressively more ungainly workarounds.

We are grateful for everyone's contributions, but pull requests for the following will NOT be merged:

  • Additional or incompatible font formats (see Prime Directive above). There are already two formats and the code is quite bloaty there as it is. This also creates liabilities for tools and documentation. What's there isn't perfect but it does the job.

  • Additional or incompatible bitmap formats, for similar reasons. It's getting messy.

  • Adding background color to custom fonts to erase prior screen contents. The ONLY acceptable methods are to clear the area with a filled rect, or (to avoid flicker) draw text into a GFXcanvas1 and copy to screen with drawBitmap() w/background color. This is on purpose and by design. We've discussed this. Glyphs can overlap.

  • Scrolling, whether hardware- or software-based. Such implementations tend to rely on hardware-specific features (not universally available), read access to the screen's framebuffer (ditto) and/or the addition of virtual functions in GFX which them must be added in every subclass, of which there are many. The GFX API is largely "set" at this point and this is just a limitation we live with now.

  • Please don't reformat code for the sake of reformatting code. The resulting large "visual diff" makes it impossible to untangle actual bug fixes from merely rearranged lines. clang-format will be the final arbiter.

  • Please no more pentagram-drawing PRs. Any oddly-specific drawing functions can go in your own code and aren't helpful in a library context.

If you must have one of these features, consider creating a fork with the features required for your project...it's easy to keep synced with the upstream code.

Related repositories
bblanchon/ArduinoJson

📟 JSON library for Arduino and embedded C++. Simple and efficient.

C++MIT Licensearduinoc-plus-plus
arduinojson.org
7.2k1.2k
Arduino-IRremote/Arduino-IRremote

Infrared remote library for Arduino: send and receive infrared signals with multiple protocols

C++Otherarduinolibrary
5k1.8k
Bodmer/TFT_eSPI

Arduino and PlatformIO IDE compatible TFT library optimised for the Raspberry Pi Pico (RP2040), STM32, ESP8266 and ESP32 that supports different driver chips

COtherarduino-librarytft
4.8k1.4k
crankyoldgit/IRremoteESP8266

Infrared remote library for ESP8266/ESP32: send and receive infrared signals with multiple protocols. Based on: https://github.com/shirriff/Arduino-IRremote/

C++GNU Lesser General Public License v2.1protocolsarduino-ide
3.5k922
adafruit/Adafruit_NeoPixel

Arduino library for controlling single-wire LED pixels (NeoPixel, WS2812, etc.)

C++GNU Lesser General Public License v3.0arduino-library
3.4k1.3k
T-vK/ESP32-BLE-Keyboard

Bluetooth LE Keyboard library for the ESP32 (Arduino IDE compatible)

C++esp32bluetooth
3.1k568
simplefoc/Arduino-FOC

Arduino FOC for BLDC and Stepper motors - Arduino Based Field Oriented Control Algorithm Library

C++MIT Licensefocmotor
docs.simplefoc.com
2.9k725
sqfmi/Watchy

Watchy - An Open Source E-Ink Smartwatch

CMIT Licensearduinoarduino-library
sqfmi.com
2.8k419
pschatzmann/ESP32-A2DP

A Simple ESP32 Bluetooth A2DP Library (to implement a Music Receiver or Sender) that supports Arduino, PlatformIO and Espressif IDF

C++Apache License 2.0bluetoothpcm-data
2.7k388
nRF24/RF24

OSI Layer 2 driver for nRF24L01 on Arduino & Raspberry Pi/Linux Devices

C++GNU General Public License v2.0rf24arduino-library
nrf24.github.io/RF24
2.5k1k
MHeironimus/ArduinoJoystickLibrary

An Arduino library that adds one or more joysticks to the list of HID devices an Arduino Leonardo or Arduino Micro can support.

C++GNU Lesser General Public License v3.0gamepadarduino-micro
2.4k440
pschatzmann/arduino-audio-tools

Audio Tools (a powerful Audio library for Arduino, PlatformIO, IDF)

CGNU General Public License v3.0streamingcmake
2.3k364