# Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/013/420/medium800/adafruit_products_1651_LRG.jpg?1388700087)

Spice up your Arduino project with a beautiful large touchscreen display shield with built in microSD card connection. This TFT display is big (2.8" diagonal) bright (4 white-LED backlight) and colorful (18-bit 262,000 different shades)! 240x320 pixels with individual pixel control. It has way more resolution than a black and white 128x64 display. As a bonus, this display has a resistive touchscreen attached to it already, so you can detect finger presses anywhere on the screen. ([We also have a capacitive-touch version of this shield here](https://www.adafruit.com/products/1947)).

![](https://cdn-learn.adafruit.com/assets/assets/000/017/927/medium800/adafruit_products_1947iso_demo_04_ORIG.jpg?1405111009)

This shield uses the SPI port for sending data to the ILI9341 chipset display, and I2C for reading the TSC2007 resistive touch screen driver. That makes it work great with just about any board that is 'Arduino or Mega shaped' as long as they have the I2C SDA and SCL pins after pin D13, and the SPI 2x3 port. If you want to access the remaining pins, [we recommend a WingShield](https://www.adafruit.com/product/196).

![](https://cdn-learn.adafruit.com/assets/assets/000/013/421/medium800/adafruit_products_1651bottom_LRG.jpg?1388700106)

 **The shield is fully assembled, tested and ready to go. No wiring, no soldering! Simply plug it in and load up our library - you'll have it running in under 10 minutes!** Works best with Adafruit Metro and classic Arduino (UNO, Duemilanove, Diecimila). Solder three jumpers and you can use it at full speed on an Arduino Leonardo or Mega as well.

![](https://cdn-learn.adafruit.com/assets/assets/000/017/928/medium800/adafruit_products_1947_demo_03_ORIG.jpg?1405111031)

This display shield has a controller built into it with RAM buffering, so that almost no work is done by the microcontroller. This shield needs only a few pins: five SPI pins for the display (SPI + DC and CS), I2C and IRQ pin for the touch screen, and an optional backlight pin. One more pin can be used for the micro SD card if you want to read images off of it.

![](https://cdn-learn.adafruit.com/assets/assets/000/124/268/medium800/adafruit_products_1651-07.jpg?1694461655)

We recently did a big update to the two designs to add:

- **Resistive touch screen TSC2007 Touch screen driver chip** instead of STMPE811 (which was discontinued)
- **Selectable VddIO** for use with 3.3V or 5V chips - by default we use IOref but if your board does not have the IOref pin, you can solder the jumper closed for whatever voltage you like
- **STEMMA QT port** for quick connecting sensors and other I2C devices
- **Right Angle Reset** button is easier to press now

**The shields are fully assembled, tested and ready to go. No wiring, no soldering! Simply plug it in and load up our libraries - you'll have it running in under 10 minutes!** Works best with any classic Arduino or Mega -shaped board.

# Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## STMPE Resistive Pinout

![](https://cdn-learn.adafruit.com/assets/assets/000/013/423/medium800/adafruit_products_1651iso_LRG.jpg?1388700474)

![](https://cdn-learn.adafruit.com/assets/assets/000/017/930/medium800/adafruit_products_1947_iso_screen_ORIG_01.jpg?1405111152)

Warning: 

# Pinouts

There are three versions of the shield. One has a capacitive touch, the other two are the older and newer versions with resistive touch. The _TFT display_ and pinouts is the same for both. The microSD card is the same too. The differences come in on the touch screen controller and whether the SPI pins are connected to pins 11-13 or the ICSP header by default.

## TFT Screen Pins

- **Digital #13** _ **or** _ **ICSP SCLK** - This is the hardware SPI clock pin. By default its on the 2x3 header. By cutting a jumper and soldering another on the back, you can move this line from ICSP to digital #13. This pin is used for the TFT, microSD and resistive touch screen data clock
- **Digital #12** _ **or** _ **ICSP MISO** - This is the hardware SPI Microcontroller In Serial Out pin. By default its on the 2x3 header. By cutting a jumper and soldering another on the back, you can move this line from ICSP to digital #12. This pin is used for the TFT, microSD and resistive touch screen data
- **Digital #11** _ **or** _ **ICSP MOSI** - This is the hardware SPI Microcontroller Out Serial In pin. By default its on the 2x3 header. By cutting a jumper and soldering another on the back, you can move this line from ICSP to digital #11. This pin is used for the TFT, microSD and resistive touch screen data
- **Digital #10** - This is the TFT CS (chip select pin). It's used by the Arduino to tell the TFT that it wants to send/receive data from the TFT only
- **Digital #9** - This is the TFT DC (data/command select) pin. It's used by the Arduino to tell the TFT whether it wants to send data or commands

## Resistive Touch Controller Pins

- **Digital #13** _ **or** _ **ICSP SCLK** - This is the hardware SPI clock pin. By default its on digital #13. By cutting a jumper and soldering another on the back, you can move this line from digital to the ICSP 2x3 header. This pin is used for the TFT, microSD and resistive touch screen data clock
- **Digital #12** _ **or** _ **ICSP MISO** - This is the hardware SPI Microcontroller In Serial Out pin. By default its on digital #12. By cutting a jumper and soldering another on the back, you can move this line from digital to the ICSP 2x3 header. This pin is used for the TFT, microSD and resistive touch screen data
- **Digital #11** _ **or** _ **ICSP MOSI** - This is the hardware SPI Microcontroller Out Serial In pin. By default its on digital #11.By cutting a jumper and soldering another on the back, you can move this line from digital to the ICSP 2x3 header. This pin is used for the TFT, microSD and resistive touch screen data
- **Digital #8** - This is the STMPE610 Resistive Touch CS (chip select pin). It's used by the Arduino to tell the Resistive controller that it wants to send/receive data from the STMPE610 only

## Capacitive Touch Pins

- **SDA** - This is the I2C data pin used by the FT6206 capacitive touch controller chip. It can be shared with other I2C devices. On UNO's this pin is also known as Analog 4.
- **SCL** - This is the I2C clock pin used by the FT6206 capacitive touch controller chip. It can be shared with other I2C devices. On UNO's this pin is also known as Analog 5.

## MicroSD card Pins

- **Digital #13** _ **or** _ **ICSP SCLK** - This is the hardware SPI clock pin. By default its on the 2x3 header. By cutting a jumper and soldering another on the back, you can move this line from ICSP to digital #13. This pin is used for the TFT, microSD and resistive touch screen data clock
- **Digital #12** _ **or** _ **ICSP MISO** - This is the hardware SPI Microcontroller In Serial Out pin. By default its on the 2x3 header. By cutting a jumper and soldering another on the back, you can move this line from ICSP to digital #12. This pin is used for the TFT, microSD and resistive touch screen data
- **Digital #11** _ **or** _ **ICSP MOSI** - This is the hardware SPI Microcontroller Out Serial In pin. By default its on the 2x3 header. By cutting a jumper and soldering another on the back, you can move this line from ICSP to digital #11. This pin is used for the TFT, microSD and resistive touch screen data

- **Digital #4** - This is the uSD CS (chip select pin). It's used by the Arduino to tell the uSD that it wants to send/receive data from the uSD only

&nbsp;

# Using with an Uno R3, Leonardo, Mega, etc

Because the TFT is about the same size as an Arduino, we pre-assemble the shield in the factory. For the Capacitive Touch, to use, simply place it onto your Arduino Uno/Duemilanove/compatible. No wiring, no soldering! **Bam!** For the Resistive touch, you will need to cut the traces between 11-13 and solder bridge the ICSP pins.

![](https://cdn-learn.adafruit.com/assets/assets/000/033/511/medium800/adafruit_products_1947-03.jpg?1467326561)

![](https://cdn-learn.adafruit.com/assets/assets/000/013/425/medium800/adafruit_products_mega.jpg?1388702550)

## Using Capacitive Touch Version w/Older Arduino

If you have an old Arduino without the SCL/SDA pins brought out (pre UNO R3) use a soldering iron to short these two jumpers:

![](https://cdn-learn.adafruit.com/assets/assets/000/033/512/medium800/adafruit_products_i2cjumpers.jpg?1467326706)

# Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## TSC2007 Resistive Pinout

![](https://cdn-learn.adafruit.com/assets/assets/000/124/308/medium800/adafruit_products_1651-07.jpg?1694523006)

The default I2C address of the TSC2007 is **0x48**.

## STEMMA QT Connector

- **[STEMMA QT](https://learn.adafruit.com/introducing-adafruit-stemma-qt) -** This connector, on the left side of the shield, allows you to connect to sensors and breakout boards with STEMMA QT / Qwiic connectors or to other things with **[various associated accessories](https://www.adafruit.com/category/619).**
- **SDA/SCL** - The I2C pins for the STEMMA QT connector are connected to the I2C GPIO pins to the left of pin 13.
- **3.3V/GND** - The power for the STEMMA QT connector is 3.3V. Ground is the common ground for power and logic.

## Default SPI Pins

The TFT (connected to an **ILI9341** chipset) and microSD card on the shield are controlled via SPI. The following SPI pins are connected by default with the ICSP 2x3 header:

- **MOSI** - This is the SPI MOSI ( **M** icrocontroller **O** ut / **S** erial **I** n) pin.
- **MISO** - This is the SPI MISO ( **M** icrocontroller **I** n / **S** erial **O** ut) pin.
- **SCK** - This is the **S** PI clo **ck** input pin.

The remaining SPI pins are connected to GPIO pins on the shield:

- **TFT DC** - This is the display SPI **d** ata/ **c** ommand selector pin. It is connected to **pin 9**.
- **TFT CS** - This is the TFT SPI **c** hip **s** elect pin. It is connected to **pin 10**.
- **SD Card CS** - This is the SD card **c** hip **s** elect pin. It is connected to **pin 4**.

## ICSP Jumpers

If your board does not have a 2x3 ICSP header, or you want to use the GPIO SPI pins, you can cut the ICSP jumpers and solder the SPI jumpers closed.

- **ICSP jumpers** - These jumpers are located below the 2x3 header on the shield. They are labeled **ICSP** and outlined in white on the board silk. These jumpers can be cut to disconnect the SPI pins from the 2x3 header.
- **SPI jumpers** - These jumpers are located directly below the ICSP jumpers. They are labeled **13** , **SO** , **SI** / **11** and are outlined in white on the board silk. You can solder these jumpers closed to connect the **SCK** , **MISO** and **MOSI** pins to GPIO pins:
  - **MOSI** to **pin 11**
  - **MISO** to **pin 12**
  - **SCK** to **pin 13**

## TFT Backlight Jumper

- **LITE** - The TFT backlight jumper is located next to the **TSIRQ** jumper and is labeled **LITE** / **#3** on the board silk. You can solder this jumper closed to connect the optional backlight pin to **pin 3**.

## microSD Card Slot

- On the back of the board, above the Adafruit logo on the board silk, is the microSD card slot. You can use any microSD card that supports SPI mode with one CS pin.

## Touchscreen Interrupt Jumper

- **TSIRQ** - The touchscreen interrupt pin jumper is located below the SPI jumpers and is labeled **TSIRQ/#2** on the board silk. You can cut this jumper to disconnect the TSC2007 interrupt pin from GPIO **pin 2**.

Warning: Settings an alternate I2C address on the TSC2007 requires a resistor across the jumper pad. Using a Pull-Up between 2k - 10k ohms is ideal. An 0805 SMD fits well on the jumper pad.

## TSC2007 Address Jumpers

On the back of the board are **two**  **address jumpers** , labeled **ADDR0** &nbsp;and **ADDR1**** ,** to the right of the board name label on the silk. These jumpers allow you to change the default I2C address of the TSC2007 on the shield. To do so, you solder the jumpers "closed" by connecting the two pads.

The default I2C address is **0x48**. The other address options can be calculated by “adding” the **ADDR0/ADDR1** to the base of **0x48**.

**ADDR0** sets the lowest bit with a value of **1** , **ADDR1** sets the next bit with a value of **2**. The final address is **0x48 + A1 + A0** which would be **0x4B**.

 If only **ADDR0** is soldered closed, the address is **0x48 + 1 = 0x49**

 If only **ADDR1** is soldered closed, the address is **0x48 + 2 = 0x4A**

The table below shows all possible addresses, and whether the pin(s) should be high (closed) or low (open).

![](https://cdn-learn.adafruit.com/assets/assets/000/124/323/medium800/adafruit_products_i2cTable.png?1694524709)

## Reset Button

- **Reset** - The reset button, located to the left of the STEMMA QT connector, is connected to the reset pin. It is mounted at a right angle so that it is easier to press.

## VddIO Jumper

- **VddIO** - The **VddIO** jumper is located at the top of the shield above the shield name label on the board silk. The shield utilizes the IOREF pin on the attached board to supply voltage to all of the components. If your board does not have an IOREF pin, you can manually select the voltage by soldering the jumper closed.
  - **For 3.3V** , you'll solder the **3V pad** on the left to the **center pad**.
  - **For 5V** , you'll solder the **5V pad** on the right to the **center pad**.

- You'll want to make sure that your selected voltage on the **VddIO jumper** matches the logic level of your board, e.g. for a 3V board like an RP2040 Metro, use 3V, and for a 5V board like an ATmega328-based Arduino Uno, use 5V.

# Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## Arduino Graphics Test

We have a library with example code ready to go for use with these TFTs. The library is not incredibly fast and optimized but its a good start and can easily be ported to other micrcontrollers. However, we'll assume you're using an Arduino.  
  
[Our github repository](https://github.com/adafruit/Adafruit_ILI9341 "Link: https://github.com/adafruit/Adafruit\_ILI9341") contains all the code and examples you'll need for driving the TFT.

# Install Libraries

You'll need a few libraries to use this display

From within the Arduino IDE, open up the **Library Manager...**

![](https://cdn-learn.adafruit.com/assets/assets/000/050/152/medium800/adafruit_products_managelib.png?1515894852)

## Install Adafruit ILI9341 TFT Library

We have example code ready to go for use with these TFTs.  
  
_Two_ libraries need to be downloaded and installed: first is the [Adafruit ILI9341 library](https://github.com/adafruit/Adafruit_ILI9341) (this contains the low-level code specific to this device), and second is the [Adafruit GFX Library](https://github.com/adafruit/Adafruit-GFX-Library) (which handles graphics operations common to many displays we carry). If you have **Adafruit\_GFX** already, make sure its the most recent version since we've made updates for better performance

Search for **ILI9341** and install the **Adafruit ILI9341** library that pops up!

![](https://cdn-learn.adafruit.com/assets/assets/000/050/153/medium800/adafruit_products_ililib.png?1515894949)

For more details, especially for first-time library installers, [check out our great tutorial at http://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use](http://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use)

Next up, search for&nbsp; **Adafruit GFX** and locate the core library. A lot of libraries may pop up because we reference it in the description so just make sure you see **Adafruit GFX Library** in bold at the top.

Install it!

![](https://cdn-learn.adafruit.com/assets/assets/000/050/154/medium800/adafruit_products_gfxlib.png?1515895032)

If using an older version of the Arduino IDE (pre-1.8.10), repeat this process one more time, looking for the **Adafruit\_BusIO** library. Install that one too.

Restart the Arduino software. You should see a new **example** folder called **Adafruit\_ILI9341** and inside, an example called **graphicstest**. Upload that sketch to your Arduino! You should see a collection of graphical tests draw out on the TFT.

![](https://cdn-learn.adafruit.com/assets/assets/000/013/446/medium800/adafruit_products_lines.jpg?1388765184)

![](https://cdn-learn.adafruit.com/assets/assets/000/013/445/medium800/adafruit_products_ilitest.png?1388765097)

# Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## Adafruit GFX library

The TFT LCD library is based off of the Adafruit GFX graphics core library. GFX has many ready to go functions that should help you start out with your project. Its not exhaustive and we'll try to update it if we find a really useful function. Right now it supports pixels, lines, rectangles, circles, round-rects, triangles and printing text as well as rotation.  
  
[Check out the GFX tutorial for detailed information about what is supported and how to use it](http://learn.adafruit.com/adafruit-gfx-graphics-library "Link: http://learn.adafruit.com/adafruit-gfx-graphics-library")!

# Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## Drawing Bitmaps

There is a built in microSD card slot into the shield, and we can use that to load bitmap images! You will need a microSD card formatted **FAT16 or FAT32** (they almost always are by default).  
  
Its really easy to draw bitmaps. We have a library for it, Adafruit\_ImageReader, which can be installed through the Arduino Library Manager&nbsp;(Sketch→Include Library→Manage Libraries…). Enter “imageread” in the search field and the library is easy to spot:

![](https://cdn-learn.adafruit.com/assets/assets/000/067/963/medium800/adafruit_products_install-imagereader-lib.png?1545420794)

With the library installed, let’s proceed by downloading this image of pretty flowers (pix by johngineer):

![](https://cdn-learn.adafruit.com/assets/assets/000/013/448/medium800/adafruit_products_purple.bmp?1388768741)

Copy **purple.bmp** into the base directory of a microSD card and insert it into the microSD socket in the shield. Now upload the **File→Examples→Adafruit\_ImageReader→ShieldILI9341** example sketch &nbsp;to your Arduino + shield. You will see the flowers appear!

![](https://cdn-learn.adafruit.com/assets/assets/000/013/450/medium800/adafruit_products_1651demo3_LRG.jpg?1388768885)

To make new bitmaps, make sure they are less than 240 by 320 pixels and save them in **24-bit BMP format**! They must be in 24-bit format, even if they are not 24-bit color as that is the easiest format for the Arduino to decode. You can rotate images using the **setRotation()** procedure.

The ShieldILI9341 example sketch shows everything you need to work with BMP images. Here’s just the vital bits broken out…

Several header files are included at the top of the sketch. All of these are required…they let us access the SD card and the display, and provide the image-reading functions:

```
#include &lt;SPI.h&gt;
#include &lt;SD.h&gt;
#include &lt;Adafruit_GFX.h&gt;         // Core graphics library
#include &lt;Adafruit_ILI9341.h&gt;     // Hardware-specific library
#include &lt;Adafruit_ImageReader.h&gt; // Image-reading functions
```

Several #defines relate to hardware pin numbers, all fixed values when using the shield.

Then we declare the tft screen object, and the image-reader object like so:

```
#define SD_CS   4 // SD card select pin
#define TFT_CS 10 // TFT select pin
#define TFT_DC  9 // TFT display/command pin

Adafruit_ILI9341     tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
Adafruit_ImageReader reader; // Class w/image-reading functions
```

After the SD and TFT’s `begin()` functions have been called (see the example sketch again, in the `setup()` function), you can then call `reader.drawBMP()` to load an image from the card to the screen:

```
ImageReturnCode stat;
stat = reader.drawBMP("/purple.bmp", tft, 0, 0);
```

You can draw as many images as you want — though remember the names must be less than 8 characters long. Call like so:

```
reader.drawBMP(filename, tft, x, y);
```

'x' and 'y' are pixel coordinates where top-left corner of the image will be placed. Images can be placed anywhere on screen…even partially off screen, the library will clip the section to load.

#### [**Image loading is explained in greater depth in the Adafruit\_GFX library guide.**](https://learn.adafruit.com/adafruit-gfx-graphics-library/loading-images)
# Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## STMPE Resistive Touchscreen Paint Demo

Danger: 

The LCD has a 2.8" 4-wire resistive touch screen glued onto it. You can use this for detecting finger-presses, stylus', etc. Normally, you'll need 4 pins to talk to the touch panel **but** we decided to go all snazzy and put a dedicated touch screen driver onto the shield. The driver shares the SPI pins with the TFT and SD card, so only one extra pin is needed (digital #8) This allows you to query the controller when you're ready to read touchscreen data, and saves 3 pins.  
  
[To control the touchscreen you'll need one more library](https://github.com/adafruit/Adafruit_STMPE610) - the STMPE610 controller library which does all the low level chatting with the STMPE610 driver chip.

![](https://cdn-learn.adafruit.com/assets/assets/000/050/156/medium800/adafruit_products_stmpelib.png?1515895145)

Once you have the library installed, restart the IDE. Now from the **examples-\>Adafruit\_ILI9341** menu select **touchpaint** and upload it to your Arduino.

![](https://cdn-learn.adafruit.com/assets/assets/000/013/447/medium800/adafruit_products_1651_LRG.jpg?1388766298)

Danger: 

Getting data from the touchscreen is fairly straight forward. Start by creating the touchscreen object with

> **Adafruit\_STMPE610 ts = Adafruit\_STMPE610(STMPE\_CS);**

We're using hardware SPI so the clock, mosi and miso pins are not defined here. For the shield, CS is #8 always.  
Then you can start the touchscreen with  

> **ts.begin()**

Check to make sure this returns a True value, which means the driver was found. If it wasn't, make sure you have the hardware SPI jumpers set up right: for Leonardo/Mega the ICSP jumpers get closed.  
  
Now you can call  

> **if (! ts.bufferEmpty()**)

to check if there's any data in the buffer. The touchscreen driver will store touchpoints at all times. When you're ready to get the data, just check if there's any data in the buffer. If there is, you can call  

> **TS\_Point p = ts.getPoint();**

To get the oldest point from the buffer. TS\_Point has **.x .y** and . **z** data points. The **x** and **y** points range from 0 to 4095. The STMPE610 does not store any calibration data in it and it doesn't know about rotation. **So if you want to rotate the screen you'll need to manually rotate the x/y points!** The z point is 'pressure' and ranges from 0 to 255, we don't use it here but you can experiment with it on your own, the harder you press, the lower the number.  
  
Since data from the STMPE610 comes in 0-4095 but our screen is 320 pixels by 240 pixels, we can use **map** to convert 0-4095 to 0-320 or 0-240. Something like  

> **p.x = map(p.x, 0, 4095, 0, tft.width());**  
> **p.y = map(p.y, 0, 4095, 0, tft.height());**

However, the touchscreen is a bit bigger than the screen, so we actually need to ignore presses beyond the touchscreen itself. We found that these numbers reflected the true range that overlaps the screen  

> **#define TS\_MINX 150**  
> **#define TS\_MINY 130**  
> **#define TS\_MAXX 3800**  
> **#define TS\_MAXY 4000**

So we use  

> **p.x = map(p.x, TS\_MINX, TS\_MAXX, 0, tft.width());**  
> **p.y = map(p.y, TS\_MINY, TS\_MAXY, 0, tft.height());**

instead.  
  
One last point (pun intended!) since the touchscreen driver stores points in a buffer, you may want to ask the driver "is the touchscreen being pressed RIGHT NOW?" You can do that with  

> **if (ts.touched())**

# Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## Arduino - Resistive TSC2007

Using the 2.8" TFT Touch Shield v2 with Arduino involves plugging the shield into your classic Arduino or Mega-shaped board. Then, you'll install the necessary libraries and upload the example code to the board.

This page uses the Metro 328 for demonstrating Arduino usage. You can use the same concepts to get going with any classic Arduino or Mega-shaped board.

### Adafruit METRO 328 - Arduino Compatible - with Headers

[Adafruit METRO 328 - Arduino Compatible - with Headers](https://www.adafruit.com/product/2488)
This is the&nbsp; **Adafruit METRO Arduino-Compatible - with&nbsp;headers.&nbsp;** It's a fully assembled and tested microcontroller and physical computing board with through-hole headers attached.&nbsp; If you don't want a&nbsp;Metro with the headers attached for...

In Stock
[Buy Now](https://www.adafruit.com/product/2488)
[Related Guides to the Product](https://learn.adafruit.com/products/2488/guides)
![Angled shot of black and white microcontroller.](https://cdn-shop.adafruit.com/640x480/2488-09.jpg)

## Hardware Setup
Plug the shield into your Arduino or Mega-shaped board. The GPIO pins are keyed and should only plug in one way.

![adafruit_products_1651iso_LRG.jpg](https://cdn-learn.adafruit.com/assets/assets/000/126/020/medium640/adafruit_products_1651iso_LRG.jpg?1699494005)

## Library Installation

You can install the **Adafruit ILI9341** library for Arduino using the Library Manager in the Arduino IDE.

![](https://cdn-learn.adafruit.com/assets/assets/000/124/343/medium800/adafruit_products_Arduino_Open_Library_Manager.png?1694533546)

Click the **Manage Libraries...** menu item, search for **Adafruit ILI9341** , and select the **Adafruit\_ILI9341** library:

![](https://cdn-learn.adafruit.com/assets/assets/000/124/359/medium800/adafruit_products_arduino_lib.png?1694544456)

If asked about dependencies, click "Install all".

![](https://cdn-learn.adafruit.com/assets/assets/000/124/360/medium800/adafruit_products_depends.png?1694544423)

If the "Dependencies" window does not come up, then you already have the dependencies installed.

Then you'll install the Adafruit TSC2007 library for the touch screen. Click the **Manage Libraries...** menu item, search for **Adafruit TSC2007** , and select the **Adafruit TSC2007** library:

![](https://cdn-learn.adafruit.com/assets/assets/000/124/358/medium800/adafruit_products_tsc_lib.png?1694544373)

If asked about dependencies, click "Install all".

![](https://cdn-learn.adafruit.com/assets/assets/000/124/361/medium800/adafruit_products_tsc_depends.png?1694544420)

If the "Dependencies" window does not come up, then you already have the dependencies installed.

Warning: 

## Example Code
https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/TFT_Shield_TSC2007_Demos/Arduino_TouchPaint_TSC2007/Arduino_TouchPaint_TSC2007.ino

![](https://cdn-learn.adafruit.com/assets/assets/000/124/362/medium800/adafruit_products_arduino_serial.png?1694570390)

Upload the sketch to your board and open up the Serial Monitor ( **Tools -\> Serial Monitor** ) at 115200 baud. In the Serial Monitor, you should see the values from the touch screen being printed out.

The first number is the X coordinate, the second number is the Y coordinate and the last two numbers are Z "pressure" coordinates that can tell you how hard the touch pad is being pressed.

On the TFT, you'll be able to doodle with the different colors on the left side of the screen.

![](https://cdn-learn.adafruit.com/assets/assets/000/124/364/medium800/adafruit_products_1651-00.jpg?1694570527)

# Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## Arduino Docs

# Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## Capacitive Touchscreen Paint Demo

Danger: 

![](https://cdn-learn.adafruit.com/assets/assets/000/017/929/medium800/adafruit_products_1947iso_demo_04_ORIG.jpg?1405111124)

We now have a super-fancy capacitive touch screen version of this shield. Instead of a resistive controller that needs calibration and pressing down, the capacitive has a hard glass cover and can be used with a gentle fingertip. It is a single-touch capacitive screen only!  
  
The capacitive touch screen controller communicates over I2C, which uses two hardwire pins. However, you can share these pins with other sensors and displays as long as they don't conflict with I2C address 0x38.

# Download the FT6206 Library

[To control the touchscreen you'll need one more library](https://github.com/adafruit/Adafruit_FT6206_Library "Link: https://github.com/adafruit/Adafruit\_FT6206\_Library") - the FT6206 controller library which does all the low level chatting with the FT6206 driver chip. Use the library manager and search for **FT6206** and select the Adafruit FT6206 library:

![](https://cdn-learn.adafruit.com/assets/assets/000/050/151/medium800/adafruit_products_adaft.png?1515894718)

Once you have the library installed, restart the IDE. Now from the **examples-\>Adafruit\_FT6206** menu select **CapTouchPaint** and upload it to your Arduino.

Danger: 

# FT6206 Library Reference
Getting data from the touchscreen is fairly straight forward. Start by creating the touchscreen object with

> **Adafruit\_FT6206 ts = Adafruit\_**** FT6206();**

We're using hardware I2C which is fixed in hardware so no pins are defined.  
Then you can start the touchscreen with  

> **ts.begin()**

Check to make sure this returns a True value, which means the driver was found. You can also call **begin(threshvalue)** wish a number from 0-255 to set the touch threshhold. The default works pretty well but if you're having too much sensitivity (or not enought) you can try tweaking it  
  
Now you can call  

> **if (ts.touched())**

to check if the display is being touched, if so call:  

> **TS\_Point p = ts.getPoint();**

To get the touch point from the controller. TS\_Point has **.x** and **.y** data points. The **x** and **y** points range from 0 to 240 and 0 to 320 respectively. This corresponds to each pixel on the display. The FT6206 does not need to be 'calibrated' but it also doesn't know about rotation. **So if you want to rotate the screen you'll need to manually rotate the x/y points!** # Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## FT6206 Library Reference

# Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## CircuitPython Displayio Quickstart - Rev B

You will need a Metro capable of running CircuitPython such as the Metro M0 Express or the Metro M4 Express. We recommend the Metro M4 Express because it's much faster and works better for driving a display. The steps should be about the same for the Metro M0 Express. If you haven't already, be sure to check out our&nbsp;[Adafruit Metro M4 Express featuring ATSAMD51](https://learn.adafruit.com/adafruit-metro-m4-express-featuring-atsamd51)&nbsp;guide.

### Adafruit Metro M4 feat. Microchip ATSAMD51

[Adafruit Metro M4 feat. Microchip ATSAMD51](https://www.adafruit.com/product/3382)
Are you ready? Really ready? Cause here comes the fastest, most powerful Metro ever. The **Adafruit Metro M4** featuring the **Microchip ATSAMD51**. This Metro is like a bullet train, with its 120MHz Cortex M4 with floating point support. Your code will zig and zag...

In Stock
[Buy Now](https://www.adafruit.com/product/3382)
[Related Guides to the Product](https://learn.adafruit.com/products/3382/guides)
![Angled shot of a Adafruit Metro M4 feat. Microchip ATSAMD51. ](https://cdn-shop.adafruit.com/640x480/3382-13.jpg)

You could use a Grand Central which also has an M4 Processor. For this board, be sure to check out our&nbsp;[Introducing the Adafruit Grand Central M4 Express](https://learn.adafruit.com/adafruit-grand-central)&nbsp;guide.

### Adafruit Grand Central M4 Express featuring the SAMD51

[Adafruit Grand Central M4 Express featuring the SAMD51](https://www.adafruit.com/product/4064)
Are you ready? Really ready? Cause here comes the **Adafruit Grand Central** featuring the **Microchip ATSAMD51**. This dev board is so big, it's not named after a Metro train, it's a whole freakin' _station_!

This board is like a freight...

In Stock
[Buy Now](https://www.adafruit.com/product/4064)
[Related Guides to the Product](https://learn.adafruit.com/products/4064/guides)
![Angled Shot of the Adafruit Grand Central M4 Express featuring the SAMD51.](https://cdn-shop.adafruit.com/640x480/4064-05.jpg)

If you need WiFi capabilities for your project, you could also use the Metro M4 Airlift Lite. For this board, be sure to check out our [Adafruit Metro M4 Express AirLift](https://learn.adafruit.com/adafruit-metro-m4-express-airlift-wifi) guide.

### Adafruit Metro M4 Express AirLift (WiFi) - Lite

[Adafruit Metro M4 Express AirLift (WiFi) - Lite](https://www.adafruit.com/product/4000)
Give your next project a lift with _AirLift_ - our witty name for the ESP32 co-processor that graces this Metro M4. You already know about the&nbsp; **Adafruit Metro M4** &nbsp;featuring the&nbsp; **Microchip ATSAMD51** , with it's 120MHz Cortex M4 with...

In Stock
[Buy Now](https://www.adafruit.com/product/4000)
[Related Guides to the Product](https://learn.adafruit.com/products/4000/guides)
![Adafruit Metro M4 Airlift Lite dev board with SAMD51 an ESP32 Wifi Co-processor.](https://cdn-shop.adafruit.com/640x480/4000-08.jpg)

## Preparing the Shield

### 2.8" Capacitive TFT Touch Shield

This shield should be ready to go. By default, the SPI connections should be using the ICSP header. If you have modified it on the underside to use Pins 11-13, this will need to be changed back in order to work with displayio. After that the shield should be ready to go.

Danger: 

### 2.8" Resistive TFT Touch Shield v1

The earlier v1 version of the shield will need a slight modification to use with our boards capable of running CircuitPython. This is because the SPI interface is only available through the ICSP header.

First start by taking a sharp knife and cutting the traces that connect to pins 11-13.

![adafruit_products_cut_traces.jpg](https://cdn-learn.adafruit.com/assets/assets/000/078/677/medium640/adafruit_products_cut_traces.jpg?1564186572)

Next, take a multimeter set to the continuity setting and test that the traces were successfully separated.

![adafruit_products_test_traces.jpg](https://cdn-learn.adafruit.com/assets/assets/000/078/678/medium640/adafruit_products_test_traces.jpg?1564186631)

Next, apply a little solder to create a solder bridge on all three of the ICSP pads.

![adafruit_products_solder_pad.jpg](https://cdn-learn.adafruit.com/assets/assets/000/078/680/medium640/adafruit_products_solder_pad.jpg?1564186691)

Once all three are solder bridged, then the shield should be all ready to go.

![adafruit_products_all_soldered.jpg](https://cdn-learn.adafruit.com/assets/assets/000/078/681/medium640/adafruit_products_all_soldered.jpg?1564186763)

## Required CircuitPython Libraries

To use this display with `displayio`, there is only one required library.

[Adafruit_CircuitPython_ILI9341](https://github.com/adafruit/Adafruit_CircuitPython_ILI9341/releases)
First, make sure you are running the&nbsp;[latest version of Adafruit CircuitPython](https://learn.adafruit.com/welcome-to-circuitpython/installing-circuitpython)&nbsp;for your board.

Next, you'll need to install the necessary libraries&nbsp;to use the hardware--carefully follow the steps to find and install these libraries from&nbsp;[Adafruit's CircuitPython library bundle](https://github.com/adafruit/Adafruit_CircuitPython_Bundle).&nbsp; Our introduction guide has&nbsp;[a great page on how to install the library bundle](https://learn.adafruit.com/welcome-to-circuitpython/circuitpython-libraries)&nbsp;for both express and non-express boards.

Remember for non-express boards, you'll need to manually install the necessary libraries from the bundle:

- **adafruit\_ili9341**

Before continuing make sure your board's lib folder or root filesystem has the&nbsp; **adafruit\_ili9341** &nbsp;file copied over.

## Code Example Additional Libraries

For the Code Example, you will need an additional library. We decided to make use of a library so the code didn't get overly complicated.

[Adafruit_CircuitPython_Display_Text](https://github.com/adafruit/Adafruit_CircuitPython_Display_Text)
Go ahead and install this in the same manner as the driver library by copying the&nbsp; **adafruit\_display\_text** folder over to the **lib** folder on your CircuitPython device.

## CircuitPython Code Example
https://github.com/adafruit/Adafruit_CircuitPython_ILI9341/blob/main/examples/ili9341_shield_simpletest.py

Let's take a look at the sections of code one by one.&nbsp;We start by importing the board so that we can initialize&nbsp;`SPI`,&nbsp;`displayio`,`terminalio` for the font, a `label`, and the&nbsp;`adafruit_ili9341`&nbsp;driver.

```auto
import board
import displayio
import fourwire
import terminalio
from adafruit_display_text import label
import adafruit_ili9341
```

Next we release any previously used displays. This is important because if the Metro is reset, the display pins are not automatically released and this makes them available for use again.

```
displayio.release_displays()
```

Next, we set the SPI object to the board's SPI with the easy shortcut function&nbsp;`board.SPI()`. By using this function, it finds the SPI module and initializes using the default SPI parameters. Next we set the Chip Select and Data/Command pins that will be used.

```
spi = board.SPI()
tft_cs = board.D10
tft_dc = board.D9
```

In the next line, we set the display bus to FourWire which makes use of the SPI bus.

```auto
display_bus = fourwire.FourWire(spi, command=tft_dc, chip_select=tft_cs)
```

Finally, we initialize the driver with a width of 320 and a height of 240. If we stopped at this point and ran the code, we would have a terminal that we could type at and have the screen update.

```
display = adafruit_ili9341.ILI9341(display_bus, width=320, height=240)
```

![](https://cdn-learn.adafruit.com/assets/assets/000/078/971/medium800/adafruit_products_shield-blinka.png?1564783686)

Next we create a background splash image. We do this by creating a group that we can add elements to and adding that group to the display. In this example, we are limiting the maximum number of elements to 10, but this can be increased if you would like. The display will automatically handle updating the group.

```
splash = displayio.Group(max_size=10)
display.show(splash)
```

Next we create a Bitmap which is like a canvas that we can draw on. In this case we are creating the Bitmap to be the same size as the screen, but only have one color. The Bitmaps can currently handle up to 256 different colors. We create a Palette with one color and set that color to 0x00FF00 which happens to be green. Colors are Hexadecimal values in the format of RRGGBB. Even though the Bitmaps can only handle 256 colors at a time, you get to define what those 256 different colors are.

```
color_bitmap = displayio.Bitmap(320, 240, 1)
color_palette = displayio.Palette(1)
color_palette[0] = 0x00FF00 # Bright Green
```

With all those pieces in place, we create a TileGrid by passing the bitmap and palette and draw it at&nbsp;`(0, 0)`&nbsp;which represents the display's upper left.

```
bg_sprite = displayio.TileGrid(color_bitmap,
                               pixel_shader=color_palette,
                               x=0, y=0)
splash.append(bg_sprite)
```

![](https://cdn-learn.adafruit.com/assets/assets/000/078/959/medium800/adafruit_products_shield-green.png?1564782393)

Next we will create a smaller purple rectangle. The easiest way to do this is the create a new bitmap that is a little smaller than the full screen with a single color and place it in a specific location. In this case we will create a bitmap that is 20 pixels smaller on each side. The screen is 320x240, so we'll want to subtract 40 from each of those numbers.

We'll also want to place it at the position&nbsp;`(20, 20)` so that it ends up centered.

```
# Draw a smaller inner rectangle
inner_bitmap = displayio.Bitmap(280, 200, 1)
inner_palette = displayio.Palette(1)
inner_palette[0] = 0xAA0088 # Purple
inner_sprite = displayio.TileGrid(inner_bitmap,
                                  pixel_shader=inner_palette,
                                  x=20, y=20)
splash.append(inner_sprite)
```

Since we are adding this after the first rectangle, it's automatically drawn on top. Here's what it looks like now.

![](https://cdn-learn.adafruit.com/assets/assets/000/078/977/medium800/adafruit_products_shield-green-purple.png?1564787075)

Next let's add a label that says "Hello World!" on top of that. We're going to use the built-in Terminal Font and scale it up by a factor of three. To scale the label only, we will make use of a subgroup, which we will then add to the main group.

Labels are centered vertically, so we'll place it at 120 for the Y coordinate, and around 57 pixels make it appear to be centered horizontally, but if you want to change the text, change this to whatever looks good to you. Let's go with some yellow text, so we'll pass it a value of `0xFFFF00`.

```
# Draw a label
text_group = displayio.Group(max_size=10, scale=3, x=57, y=120)
text = "Hello World!"
text_area = label.Label(terminalio.FONT, text=text, color=0xFFFF00)
text_group.append(text_area) # Subgroup for text scaling
splash.append(text_group)
```

Finally, we place an infinite loop at the end so that the graphics screen remains in place and isn't replaced by a terminal.

```
while True:
    pass
```

![](https://cdn-learn.adafruit.com/assets/assets/000/078/980/medium800/adafruit_products_shield-hello-world.png?1564787131)

## Using Touch

We won't be covering how to use the touchscreen on the shield with CircuitPython in this guide, but the libraries required to use it are:

- For enabling capacitive touch use the&nbsp;[Adafruit\_CircuitPython\_FocalTouch](https://github.com/adafruit/Adafruit_CircuitPython_FocalTouch) library.
- For enabling resistive touch use the&nbsp;[Adafruit\_CircuitPython\_STMPE610](https://github.com/adafruit/Adafruit_CircuitPython_STMPE610) library.

## Where to go from here

Be sure to check out this excellent&nbsp;[guide to CircuitPython Display Support Using displayio](https://learn.adafruit.com/circuitpython-display-support-using-displayio)

# Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## CircuitPython - Resistive TSC2007

Using the 2.8" TFT Touch Shield v2 with CircuitPython involves plugging the shield into your classic Arduino or Mega-shaped board. Then, you load the code and necessary libraries onto your board to run the example.

This page uses the Metro RP2040 for demonstrating CircuitPython usage. You can use the same concepts to get going with any classic Arduino or Mega-shaped board.

### Adafruit Metro RP2040

[Adafruit Metro RP2040](https://www.adafruit.com/product/5786)
Choo! Choo! This is the RP2040 Metro Line, making all station stops at "Dual Cortex M0+ mountain", "264K RAM round-about" and "16 Megabytes of Flash town". This train is piled high with hardware that complements the Raspberry Pi RP2040 chip to make it an excellent...

In Stock
[Buy Now](https://www.adafruit.com/product/5786)
[Related Guides to the Product](https://learn.adafruit.com/products/5786/guides)
![Angled shot of black, credit-card-sized development board.](https://cdn-shop.adafruit.com/640x480/5786-00.jpg)

## Hardware Setup
Plug the shield into your Arduino or Mega-shaped board. The GPIO pins are keyed and should only plug in one way.

![adafruit_products_1651iso_LRG.jpg](https://cdn-learn.adafruit.com/assets/assets/000/126/019/medium640/adafruit_products_1651iso_LRG.jpg?1699493871)

## CircuitPython Usage

To use with CircuitPython, you need to first install the necessary libraries, and their dependencies, into the **lib** folder on your **CIRCUITPY** drive. Then you need to update **code.py** with the example script.

Thankfully, we can do this in one go. In the example below, click the **Download Project Bundle** button below to download the necessary libraries and the **code.py** file in a zip file. Extract the contents of the zip file.

Connect the microcontroller to your computer via a known-good USB power+data cable. The board shows up as a thumb drive named **CIRCUITPY**. Copy the **entire lib folder** , the **bitmap image files** , and the **code.py** file to your **CIRCUITPY** drive.

Your **CIRCUITPY/lib** folder should contain the following folder and files:

- **/adafruit\_bus\_device**
- **adafruit\_ili9341.mpy**
- **adafruit\_tsc2007.mpy**

Once you have copied over the necessary folders and files, your **CIRCUITPY** drive should resemble the following:

![CIRCUITPY](https://adafruit.github.io/Adafruit_Learning_System_Guides/TFT_Shield_TSC2007_Demos_CircuitPython.png )

## Example Code
https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/TFT_Shield_TSC2007_Demos/CircuitPython/code.py

Once everything is saved to the **CIRCUITPY** drive, [connect to the serial console](https://learn.adafruit.com/welcome-to-circuitpython/kattni-connecting-to-the-serial-console) to see the data printed out!

![](https://cdn-learn.adafruit.com/assets/assets/000/124/354/medium800/adafruit_products_cpREPL.png?1694543728)

The code will open all of the bitmap files that are on the **CIRCUITPY** drive and add them to the `images` array. The first image will then be displayed on the TFT. In the loop, if you touch the screen you'll see the coordinates and pressure print to the serial console.

If you press on the left side of the screen, the display will show the previous bitmap in the array. If you press on the right side of the screen, the display will show the next bitmap in the array.

# Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## CircuitPython Docs

# Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## Backlight & Touch IRQ

Both the resistive and capacitive versions of this shield have the ability to dim the backlight and get an interrupt from the resistive or capacitive touch controller chip on-board.

![](https://cdn-learn.adafruit.com/assets/assets/000/013/452/medium800/adafruit_products_jumpers.jpg?1388769088)

# Controlling the Backlight
By default, we assume you'll want the backlight on all the time. However, you may want to PWM control or otherwise turn off the LED backlight to save power. You can do this with a simple hack. On the back, look for the **backlight** jumper.   
  
**On the resistive TFT touch shield**  
Solder the jumper labeled **Pin 3**. Then you can use Digital 3 to control the backlight.  
  
**On the capacitive TFT touch shield**  
Solder the jumper labeled **Pin 5**. Then you can use Digital 5 to control the backlight.  
  
# Touchscreen Interrupt pin

Advanced users may want to get an interrupt on a pin (or even, just test a pin rather than do a full SPI query) when the touchscreen is pressed. You can do that by jumpering the #7 solder jumper labeled **TS int**. We didn't want it to connect to #2 or #3 since those are the Leonardo I2C pins. [You can use pin change interrupts to get an interrupt callback on #7.](https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/ "Link: https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/") Or, with a little blue wire, advanced users can connect a wire from the TS interrupt pad to any pin they choose. We find that querying/polling the chip is fast enough for most beginner Arduino projects!

# Adafruit 2.8" TFT Touch Shield v2 - Capacitive or Resistive

## Downloads

# Datasheets & Files

- [STMPE610 Datasheet](http://www.adafruit.com/datasheets/STMPE610.pdf)
- [TSC2007 Datasheet](https://cdn-learn.adafruit.com/assets/assets/000/110/401/original/tsc2007.pdf?1648820788)
- [ILI9341 (TFT controller)](http://www.adafruit.com/datasheets/ILI9341.pdf "Link: http://www.adafruit.com/datasheets/ILI9341.pdf")
- [Raw 2.8" Resistive TFT datasheet](http://www.adafruit.com/datasheets/MI0283QT-11%20V1.1.PDF "Link: http://www.adafruit.com/datasheets/MI0283QT-11%20V1.1.PDF")
- [Raw 2.8" Capacitive TFT datasheet](https://cdn-learn.adafruit.com/assets/assets/000/035/819/original/SPEC-DT280QV10-CT_Rev.B.pdf)
- [FT6206 Datasheet](http://www.adafruit.com/datasheets/FT6x06%20Datasheet_V0.1_Preliminary_20120723.pdf)&nbsp;&&nbsp;[App note](http://www.adafruit.com/datasheets/FT6x06_AN_public_ver0.1.3.pdf) (capacitive chip)
- [PCB CAD files for both resistive and capacitive versions on GitHub](https://github.com/adafruit/Adafruit-2.8-TFT-Shield-v2-PCB)
- [Fritzing file for the Capacitive TFT Touch Shield v2](https://github.com/adafruit/Fritzing-Library/blob/master/parts/Adafruit%202.8%20inch%20Captouch%20TFT.fzpz)
- [Fritzing file for the Resistive TFT Touch Shield v2](https://github.com/adafruit/Fritzing-Library/blob/master/parts/Adafruit%202.8inch%20Resistive%20TFT.fzpz)
- [Fritzing file for the Resistive TFT Touch Shield v2 Rev E](https://github.com/adafruit/Fritzing-Library/blob/master/parts/Adafruit%20TFT%202.8in%20Resistive%20Touchshield%20rev%20E.fzpz)

## Schematic and Fab Print

### Rev B Resistive Touch Shield
![](https://cdn-learn.adafruit.com/assets/assets/000/013/453/medium800/adafruit_products_tftshieldv2.png?1388769644)

### Rev B Capacitive Touch Shield
![](https://cdn-learn.adafruit.com/assets/assets/000/027/040/medium800/adafruit_products_cap_touch28_tft.png?1438860497)

### Rev B Capacitive and Resistive Fab Print

Diagram showing the TFT (yellow outline) underlying Arduino mounting holes (thin white line), PCP outline (rectangular thin white line) and 'visible portion' of the TFT (dashed inner line)

![](https://cdn-learn.adafruit.com/assets/assets/000/013/455/medium800/adafruit_products_tftshielddims.png?1388770056)

### Rev E Schematic and Fab Print - Resistive
![](https://cdn-learn.adafruit.com/assets/assets/000/124/261/medium800/adafruit_products_schem.png?1694457072)

![](https://cdn-learn.adafruit.com/assets/assets/000/124/262/medium800/adafruit_products_fab.png?1694457080 dimensions are in inches)


## Primary Products

### 2.8" TFT Touch Shield for Arduino with Resistive Touch Screen v2

[2.8" TFT Touch Shield for Arduino with Resistive Touch Screen v2](https://www.adafruit.com/product/1651)
Spice up your Arduino project with a beautiful large touchscreen display shield with built in microSD card connection. This TFT display is big (2.8" diagonal) bright (4 white-LED backlight) and colorful (18-bit 262,000 different shades)! 240x320 pixels with individual pixel control. It...

In Stock
[Buy Now](https://www.adafruit.com/product/1651)
[Related Guides to the Product](https://learn.adafruit.com/products/1651/guides)

## Featured Products

### 2.8" TFT Touch Shield for Arduino with Capacitive Touch

[2.8" TFT Touch Shield for Arduino with Capacitive Touch](https://www.adafruit.com/product/1947)
Add some sizzle to your Arduino project with a beautiful large touchscreen display shield with built in microSD card connection and a **capacitive** touchscreen. This TFT display is big (2.8" diagonal) bright (4 white-LED backlight) and colorful (18-bit 262,000 different...

In Stock
[Buy Now](https://www.adafruit.com/product/1947)
[Related Guides to the Product](https://learn.adafruit.com/products/1947/guides)
### Adafruit METRO 328 Fully Assembled - Arduino IDE compatible

[Adafruit METRO 328 Fully Assembled - Arduino IDE compatible](https://www.adafruit.com/product/50)
We sure love the ATmega328 here at Adafruit, and we use them&nbsp;_a lot_&nbsp;for our own projects. The processor has plenty of GPIO, Analog inputs, hardware UART SPI and I2C, timers and PWM galore - just enough for most simple projects. When we need to go small, we use a <a...></a...>

Out of Stock
[Buy Now](https://www.adafruit.com/product/50)
[Related Guides to the Product](https://learn.adafruit.com/products/50/guides)
### Adafruit Metro RP2040

[Adafruit Metro RP2040](https://www.adafruit.com/product/5786)
Choo! Choo! This is the RP2040 Metro Line, making all station stops at "Dual Cortex M0+ mountain", "264K RAM round-about" and "16 Megabytes of Flash town". This train is piled high with hardware that complements the Raspberry Pi RP2040 chip to make it an excellent...

In Stock
[Buy Now](https://www.adafruit.com/product/5786)
[Related Guides to the Product](https://learn.adafruit.com/products/5786/guides)

## Related Guides

- [Adafruit Metro RP2040](https://learn.adafruit.com/adafruit-metro-rp2040.md)
- [TMP36 Temperature Sensor](https://learn.adafruit.com/tmp36-temperature-sensor.md)
- [Mini Thermal Receipt Printers](https://learn.adafruit.com/mini-thermal-receipt-printer.md)
- [2.8" TFT Touchscreen](https://learn.adafruit.com/2-8-tft-touchscreen.md)
- [How to program a Zumo Robot with Simulink](https://learn.adafruit.com/zumo-robot-control-with-simulink.md)
- [Sous-vide controller powered by Arduino - The SousViduino!](https://learn.adafruit.com/sous-vide-powered-by-arduino-the-sous-viduino.md)
- [Bluetooth Controlled Motorized Camera Slider](https://learn.adafruit.com/bluetooth-motorized-camera-slider.md)
- [Remote controlled door lock using a fingerprint sensor & Adafruit IO](https://learn.adafruit.com/remote-controlled-door-lock-using-a-fingerprint-sensor-and-adafruit-io.md)
- [Circuit Playground: D is for Diode](https://learn.adafruit.com/circuit-playground-d-is-for-diode.md)
- [Adafruit OV7670 Camera Library For SAMD51 Processors](https://learn.adafruit.com/adafruit-ov7670-camera-library-samd51.md)
- [DS1307 Real Time Clock Breakout Board Kit](https://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit.md)
- [Programming Arduino with Android and Windows Tablets](https://learn.adafruit.com/programming-arduino-with-android-and-windows-tablets.md)
- [Adafruit Data Logger Shield](https://learn.adafruit.com/adafruit-data-logger-shield.md)
- [RePaper eInk Development Board](https://learn.adafruit.com/repaper-eink-development-board.md)
- [Arduino GPS Clock](https://learn.adafruit.com/arduino-clock.md)
- [Geofencing with the FONA 808 & Adafruit IO](https://learn.adafruit.com/geofencing-with-the-fona-808-and-adafruit-io.md)
