# Adafruit PiCowbell DVI Output

## Overview

Warning: The Pico 2 RP2350 does not work with this PiCowbell in CircuitPython, you'll need to use Arduino.

![](https://cdn-learn.adafruit.com/assets/assets/000/121/074/medium800thumb/hacks_5745-09_1.jpg?1684251556)

Ding dong! Hear that? It's the PiCowbell ringing, letting you know that the new **Adafruit PiCowbell DVI Output for Pico** is in stock and ready to display images and graphics from a microcontroller directly to an HDMI monitor or television! Note it doesn't do audio, just graphics.

![](https://cdn-learn.adafruit.com/assets/assets/000/121/076/medium800/hacks_5745-05.jpg?1684251626)

The PiCowbell DVI is the same size and shape as a Raspberry Pi Pico and is intended to socket **underneath** this board to make your next video output project super easy. Mini HDMI connector for use with standard HDMI cables? Yes! STEMMA QT / Qwiic connector for fast I2C? Indeed. Reset button and extra switch for restarting code or changing configuration? Bien sur.

![](https://cdn-learn.adafruit.com/assets/assets/000/121/075/medium800/hacks_5745-03.jpg?1684251598)

The PiCowbell DVI provides you with:

- **Right angle JST SH connector for&nbsp;I2C / Stemma QT / Qwiic** connection. Provides 3V, GND, IO4 (SDA), and IO5 (SCL). Also connected through to the HDMI sink (monitor) with level shifting, so the EDID can be read.
- **Mini HDMI connector** for DVI output to any HDMI display or monitor.
  - GPIO6: D2+
  - GPIO7: D2-
  - GPIO8: D1+
  - GPIO9: D1-
  - GPIO10: D0+
  - GPIO11: D0-
  - GPIO12: Clock +
  - GPIO13: Clock -

- **Pin breakout for HDMI extras:** Utility, CEC, and HotPlug pins.
- **Reset button** - Press to restart your program.
- **Slide switch** - On GPIO #3 for whatever purpose you wish.
- **Many pads on the 'Bell has a duplicate hole pad** next to it for solder-jumpering.
- **The ground pads have white silkscreen rectangles** to easily identify them.
- Gold-plated pads for easy soldering.

![](https://cdn-learn.adafruit.com/assets/assets/000/121/077/medium800/hacks_5745-04.jpg?1684251721)

In Arduino, which is what we recommend, [we use our fork of PicoDVI](https://github.com/adafruit/PicoDVI) to create an internal framebuffer of 320x240 or 400x240 16-bit pixels that is then continuously blitted out as pixel-doubled 640x480 or 800x480 digital video. Whatever you 'draw' to the internal memory framebuffer appears instantly on the digital display in crisp color. Since the library is a subclass of AdafruitGFX, it'll be familiar to folks who have used our TFT or OLED displays before.

![](https://cdn-learn.adafruit.com/assets/assets/000/121/078/medium800/hacks_5745-06.jpg?1684251741)

[There's also DVI output support in CircuitPython as of 8.1.0b2](https://github.com/adafruit/circuitpython/releases/tag/8.1.0-beta.2) - but note that it uses a _lot_ of memory so in particular if you want to use PicoW with WiFi support, you'll likely only be able to get away with monochrome display. The older Pico (no W) has more memory since some isn't dedicated to WiFi.

Note that the DVI video generation uses one full core, both PIOs and 150K (320x240) or 190K (400x240) of SRAM. It's kinda maxed out, so be aware of the remaining resource limitations.

![](https://cdn-learn.adafruit.com/assets/assets/000/121/079/medium800/hacks_5745-02.jpg?1684251787)

We also connected the HDMI-connectors I2C pins to the SDA/SCL of the Pico (through a safe level shifter) so you can read the EDID EEPROM of displays, and have broken out the CEC and Utility pads. The Hot Plug Detect pin is also available. Read this pin to know when a display has been connected!

Each order comes with an assembled PCB and header. You will need to solder in the header yourself, but it's a quick task.

![](https://cdn-learn.adafruit.com/assets/assets/000/121/080/medium800thumb/hacks_5745-06_1.jpg?1684251921)

 **Please Note!** There are a lot of possible configurations, and we stock various headers depending on how you want to solder and attach. Especially if you want the Pico on top so that the BOOTSEL button and LED are accessible.

1. [Use the Pico Stacking Headers](https://www.adafruit.com/product/5582) if you want to be able to plug into a breadboard or other accessory with sockets.
2. [Use the Pico Socket Headers](https://www.adafruit.com/product/5583) if you want to plug directly in and have a nice solid connection that doesn't have any poking-out-bits.
3. [Use the Short Socket Headers](https://www.adafruit.com/product/5585) for a very slim but pluggable design; note that you'll want to trim down the Pico's headers or [use the short plug headers on the Pico](https://www.adafruit.com/product/5584) to have a skinny sandwich.

# Adafruit PiCowbell DVI Output

## Pinouts

![](https://cdn-learn.adafruit.com/assets/assets/000/121/071/medium800/hacks_front.jpg?1684251184)

![](https://cdn-learn.adafruit.com/assets/assets/000/121/072/medium800/hacks_back.jpg?1684251189)

Warning: The Pico 2 RP2350 does not work with this PiCowbell in CircuitPython. It does work with Arduino.

## Power

- **VB (VBUS)** - This is the micro-USB input voltage, connected to the micro-USB port on the Raspberry Pi Pico. It is nominally 5V.
- **VS (VSYS)** - This is the main system input voltage. It can range from 1.8V to 5.5V and is used to generate the 3.3V needed for the RP2040 and the GPIO pins.
- **EN (3V3\_EN)** - This connects to the enable pin on the Raspberry Pi Pico, and is pulled high (to VSYS) via a 100kΩ resistor.
- **3V** - This is the 3.3V output from the Raspberry Pi Pico.
- **VR (ADC\_VREF)** - This is the ADC power supply and reference voltage. It is generated on the Raspberry Pi Pico by filtering the 3.3V supply. It can be used with an external reference when ADC performance is required.
- **All ground pins are highlighted in white on the silk.** This is the common ground for power and logic.&nbsp;

## I2C Logic

- **SCL** - I2C clock pin on the PiCowbell. It is connected to your microcontroller I2C clock line, which is **GPIO5** on the Pico. This connection is shared with the STEMMA QT port on the end of the board.
- **SDA** - I2C data pin on the PiCowbell. It is connected to your microcontroller I2C data line, which is **GPIO4** on the Pico. This connection is shared with the STEMMA QT port on the end of the board.
- **[STEMMA QT](https://learn.adafruit.com/introducing-adafruit-stemma-qt) -** These connectors allow you to connect to dev boards with STEMMA QT connectors or to other things with [various associated accessories](https://www.adafruit.com/category/619). The port is located on the end of the PiCowbell.

## Duplicate GPIO Hole Pads

The following pads on the PiCowbell DVI have a duplicate hole pad next to it for solder-jumpering:

- **GP0-GP13** ,&nbsp; **GP18-GP22** ,&nbsp; **Reset** ,&nbsp; **A0-A2** ,&nbsp; **VR** ,&nbsp; **3V** ,&nbsp; **EN** ,&nbsp; **VS** &nbsp;and&nbsp; **VB**. Ground pins that have a duplicate hole pad are highlighted in white on the board silkscreen.
  - Note that&nbsp; **GP3** is connected by default to the switch ( **Sw** ) on the front of the PiCowbell. It can be disconnected by cutting the **Switch** jumper on the back of the PiCowbell, described below.

## Mini HDMI Connector

- **Mini HDMI connector -** On the end of the board is the mini HDMI connector. It provides DVI output to any HDMI display or monitor. The following GPIO pins are routed to the connector:
  - **GPIO6** : D2+
  - **GPIO7** : D2-
  - **GPIO8** : D1+
  - **GPIO9** : D1-
  - **GPIO10** : D0+
  - **GPIO11** : D0-
  - **GPIO12** : Clock +
  - **GPIO13** : Clock -

## Additional HDMI Pins

Three additional pins for the HDMI connector are broken out in the center of the board, between the slide switch and the reset button.

- **Utility pin** - labeled **Util** on the board silk. This pin is reserved for future HDMI specification updates. It is connected to pin 17 on the mini HDMI port.
- **CEC pin** - labeled **CEC** on the board silk. [Consumer Electronic Control](https://en.wikipedia.org/wiki/Consumer_Electronics_Control) is a one-wire bidirectional serial bus that is standardized for remote control functions. It is connected to pin 14 on the mini HDMI port.
- **Hot Plug Detection pin** - labeled **HotPlug** on the board silk. It is connected to pin 19 on the mini HDMI port. Hot plug detection is used to detect if a device is connected or disconnected to the HDMI connector by monitoring power, plug and unplug events.

## Reset Button

In the center of the board, to the right of the sliding switch, is the reset button. It is routed to the **reset pin on the PiCowbell** and is labeled **R** &nbsp;on the board silk. You can press it to restart your program.

## Slide Switch and Switch Jumper

- **Slide switch** - on the front of the board, to the right of the STEMMA QT port, is a slide switch that can be used for whatever purpose you like. By default it is connected to **GP3** , labeled **Sw** on the board silk.
  - It is tied to ground, reading as `False` in CircuitPython or `LOW` in Arduino, when it is switched up towards pin **A2** on the silk.
  - It is open, reading as `True` in CircuitPython or `HIGH` in Arduino, when it is switched down towards pin **SCL** on the silk.

- **Switch jumper** - on the back of the board, directly next to **GP3** , is the Switch jumper. It is outlined in white on the silk and is labeled **Switch**. If you cut the jumper, it will disconnect the slide switch from **GP3**.

# Adafruit PiCowbell DVI Output

## Assembly

![](https://cdn-learn.adafruit.com/assets/assets/000/116/349/medium800/adafruit_products_PiC_angle_with_PIco_and_sensor.jpg?1667002341)

Info: 

There are four ways to get your PiCowbell board working with your Pico. To keep things flexible, PiCowbells do not come with headers: there's a lot of possible configurations and we stock various headers depending on how you want to solder and attach. Especially since you want the Pico on top, so that the BOOTSEL button and LED are accessible.

The options are as follows.

1. [Use the Pico Stacking Headers](https://www.adafruit.com/product/5582) if you want&nbsp;to be able to&nbsp;plug into a breadboard or other accessory with sockets.
2. [Use the Pico Socket Headers](https://www.adafruit.com/product/5583) if you want to plug directly into the Pico and have a nice solid connection that doesn't have any poking-out-bits.
3. For some PiCowbells: [Use the Short Socket Headers](https://www.adafruit.com/product/5585) for a very slim but pluggable design, note that you'll want to trim down the Pico's headers or [use the short plug headers on the Pico](https://www.adafruit.com/product/5584) to have a skinny sandwich.
4. For some PiCowbells: Solder the PiCowbell directly to the standard headers already soldered to your Pico. Of course this is very compact and inexpensive but you won't be able to remove the PiCowbell. However, this method is not possible for some PiCowbell variants depending on the clearance of the components on the PiCowbell (i.e. the PiCowbell Adalogger and its coin cell battery holder).

The next page shows how to solder standard headers onto a Pico board. The following four pages walk you through each type of PiCowbell assembly so you can choose the one that will work best for you!

Danger: 

If you're unsure about soldering up the Pico and PiCowbell, check out our [FAQ on soldering](https://learn.adafruit.com/adafruit-guide-excellent-soldering/soldering-faq).

# Adafruit PiCowbell DVI Output

## Pico

Three out of four of the assembly methods included in this guide assume you have a Raspberry Pi Pico soldered up with standard male headers in preparation for using it with the PiCowbell Proto. This page will show you how to solder a set of standard headers to a Pico.

(The shorty header assembly method uses short male headers on the Pico. The soldering concept is exactly the same, but use the shorty male headers on the Pico instead of standard ones. You can follow these instructions with the shorty headers and you'll be set for that.)

Follow the steps below to solder the standard male headers to a Pico. The process is the same for all flavors of Pico, such as Pico W.

## Assembly Steps
Use the Pico to line up the headers on a breadboard. This is the easiest way to ensure the headers are soldered on straight.&nbsp;

![adafruit_products_PiC_Pico_lining_up_headers.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/458/medium640/adafruit_products_PiC_Pico_lining_up_headers.jpg?1667589515)

![adafruit_products_PiC_lining_headers_up.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/459/medium640/adafruit_products_PiC_lining_headers_up.jpg?1667589715)

Solder the pins on each end of the two header strips, so the four corners of the Pico are soldered. This ensures the Pico and headers are attached properly while you continue to solder the rest of the pins.

![adafruit_products_PiC_Pico_four_corners.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/460/medium640/adafruit_products_PiC_Pico_four_corners.jpg?1667589885)

Solder the rest of the pins.

![adafruit_products_PiC_Pico_fully_soldered_in_bb.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/461/medium640/adafruit_products_PiC_Pico_fully_soldered_in_bb.jpg?1667589966)

Remove it from the breadboard. You're done!&nbsp;

![adafruit_products_PiC_fully_assembled_Pico.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/462/medium640/adafruit_products_PiC_fully_assembled_Pico.jpg?1667590191)

For a bit more detail on the process of soldering standard male headers to a board, check out [the How to Solder Headers' Male Headers page](https://learn.adafruit.com/how-to-solder-headers/male-headers).

# Adafruit PiCowbell DVI Output

## Stacking Headers

The first PiCowbell assembly method uses stacking headers, which allows you to use a breadboard with your PiCowbell-Pico sandwich. This is super helpful when you're still prototyping other parts of your project, or simply want jumper-wire access to the Pico pins in addition to the PiCowbell.

This page assumes you have already soldered standard male headers to your Pico. If you have not, please return to the [Pico assembly page](https://learn.adafruit.com/picowbell-proto/pico) and follow the steps there.

Follow the steps below to solder stacking headers to your PiCowbell.

Info: 

## Assembly Steps
Place a standard-header-soldered Pico upside down on the table, so the long side of the header pins are facing up. Press the female sockets of each stacking header onto one of the rows of standard headers attached to the Pico, until they are fully attached.&nbsp;

![adafruit_products_PiC_stacking_on_Pico.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/469/medium640/adafruit_products_PiC_stacking_on_Pico.jpg?1667602072)

 **Ensure the PiCowbell is oriented correctly before beginning assembly.&nbsp;** The PiCowbell should be top-down, so that you are looking at the bottom of the PiCowbell. **The STEMMA QT connector should be on the same end as the Pico USB connector, and the reset button should be on the opposite end with the Pico debug pins.**

The PiCowbell pins must match the pinout on the Pico.

![adafruit_products_PiC_stacking_Pico_with_Cowbell_oriented.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/470/medium640/adafruit_products_PiC_stacking_Pico_with_Cowbell_oriented.jpg?1667602198)

Remember, the pins are labeled on the bottom of the Pico. In this case, that works well because they are labeled on both sides of the PiCowbell, allowing for direct comparison before attaching the PiCowbell to the stacking header assembly.

Warning: 

Press the PiCowbell onto the male pins sticking up from the stacking headers. You may need to push the stacking header pins in or out a bit to get the PiCowbell attached.

With the stacking header male pins sticking up, the bottom of the PiCowbell should be facing up as well.

![adafruit_products_PiC_stacking_with_PiCowbell.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/471/medium640/adafruit_products_PiC_stacking_with_PiCowbell.jpg?1667602725)

Solder the pins on each end of each stacking header, so that the opposite four corners of the PiCowbell are soldered on.

![adafruit_products_PiC_stacking_four_corners.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/472/medium640/adafruit_products_PiC_stacking_four_corners.jpg?1667603161)

Solder the rest of the pins onto the PiCowbell.&nbsp;

![adafruit_products_PiC_stacking_assembled.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/473/medium640/adafruit_products_PiC_stacking_assembled.jpg?1667603424)

You're done! Now you can attach the whole sandwich to a breadboard, have access to the pins via the breadboard, and still be able to use the PiCowbell as well.

![adafruit_products_PiC_stacking_assembled_noBB.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/474/medium640/adafruit_products_PiC_stacking_assembled_noBB.jpg?1667603622)

![adafruit_products_PiC_stacking_assembled_BB.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/475/medium640/adafruit_products_PiC_stacking_assembled_BB.jpg?1667603755)

# Adafruit PiCowbell DVI Output

## Socket Headers

This PiCowbell assembly method uses female socket headers on the PiCowbell to create a standalone sandwich when attached to a Pico with standard male headers.&nbsp;

This page assumes you have already soldered standard male headers to your Pico. If you have not, please return to the [Pico assembly page](https://learn.adafruit.com/picowbell-proto/pico) and follow the steps there.

Follow the steps below to solder socket headers to your PiCowbell.

Info: 

## Assembly Steps
Place a standard-header-soldered Pico upside down on the table, so the long side of the header pins are facing up. Press the female sockets onto one of the rows of standard headers attached to the Pico, until both are fully attached.&nbsp;

![adafruit_products_PiC_socket_on_soldered_Pico.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/476/medium640/adafruit_products_PiC_socket_on_soldered_Pico.jpg?1667605165)

![adafruit_products_PiC_socket_on_soldered_Pico_side.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/477/medium640/adafruit_products_PiC_socket_on_soldered_Pico_side.jpg?1667605291)

 **Ensure the PiCowbell is oriented correctly before beginning assembly.&nbsp;** The PiCowbell should be top-down, so that you are looking at the bottom of the Cowbell. **The STEMMA QT connector should be on the same end as the Pico USB connector, and the reset button should be on the opposite end with the Pico debug pins.**

The PiCowbell pins must match the pinout on the Pico.

![adafruit_products_PiC_socket_with_Cowbell_oriented.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/478/medium640/adafruit_products_PiC_socket_with_Cowbell_oriented.jpg?1667605413)

Remember, the pins are labeled on the bottom of the Pico. In this case, that works well because they are labeled on both sides of the PiCowbell, allowing for direct comparison before attaching the PiCowbell to the stacking header assembly.

Warning: 

Press the PiCowbell onto the pins sticking up from the socket headers. You may need to push the stacking header pins in or out a bit to get the PiCowbell attached.

![adafruit_products_PiC_socket_with_Cowbell_unsoldered.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/479/medium640/adafruit_products_PiC_socket_with_Cowbell_unsoldered.jpg?1667605559)

![adafruit_products_PiC_socket_with_Cowbell_unsoldered_side.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/480/medium640/adafruit_products_PiC_socket_with_Cowbell_unsoldered_side.jpg?1667605784)

Solder the pins on each end of each socket header, so that the opposite four corners of the PiCowbell are soldered on.

![adafruit_products_PiC_socket_four_corners.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/481/medium640/adafruit_products_PiC_socket_four_corners.jpg?1667606431)

Solder the rest of the pins onto the PiCowbell.

![adafruit_products_PiC_socket_assembled.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/482/medium640/adafruit_products_PiC_socket_assembled.jpg?1667606442)

That's it, you're done!&nbsp;

![adafruit_products_PiC_assembled_with_Pico.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/484/medium640/adafruit_products_PiC_assembled_with_Pico.jpg?1667606721)

# Adafruit PiCowbell DVI Output

## Shorty Socket Headers

This PiCowbell assembly method uses shorty female socket headers on the PiCowbell to create a standalone sandwich when attached to a Pico with shorty male headers.&nbsp;

This page assumes you have already soldered shorty male headers to your Pico. If you have not, please return to the [Pico assembly page](https://learn.adafruit.com/picowbell-proto/pico) and follow the steps there. The page shows how to solder standard male headers to the Pico, but the concept is identical with the shorty headers.

Follow the steps below to solder shorty socket headers to your PiCowbell.

Info: 

## Assembly Steps
Solder the [short male headers](https://www.adafruit.com/product/5584) to the Pico. See the [Pico assembly page](https://learn.adafruit.com/picowbell-proto/pico) for instructions on soldering headers to the Pico.

![adafruit_products_PiC_shorty_headers_Pico_male_headers.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/597/medium640/adafruit_products_PiC_shorty_headers_Pico_male_headers.jpg?1668036466)

Place a shorty-header-soldered Pico upside down (headers up) on the table. Press the each of the short female sockets onto one of the rows of short headers attached to the Pico, until both are fully attached.

![adafruit_products_PiC_shorty_headers_attached_to_Pico.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/598/medium640/adafruit_products_PiC_shorty_headers_attached_to_Pico.jpg?1668036576)

 **Ensure the PiCowbell is oriented correctly before beginning assembly.&nbsp;** The PiCowbell should be top-down, so that you are looking at the bottom of the Cowbell. **The STEMMA QT connector should be on the same end as the Pico USB connector, and the reset button should be on the opposite end with the Pico debug pins.**

The PiCowbell pins must match the pinout on the Pico.

![adafruit_products_PiC_shorty_headers_oriented.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/599/medium640/adafruit_products_PiC_shorty_headers_oriented.jpg?1668036755)

Remember, the pins are labeled on the bottom of the Pico. In this case, that works well because they are labeled on both sides of the PiCowbell, allowing for direct comparison before attaching the Cowbell to the stacking header assembly.

Warning: 

Press the PiCowbell onto the pins sticking up from the shorty female headers. You may need to push the shorty header pins in or out a bit to get the PiCowbell attached.

![adafruit_products_PiC_shorty_headers_with_Cowbell.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/600/medium640/adafruit_products_PiC_shorty_headers_with_Cowbell.jpg?1668036888)

Solder the pins on each end of each female header, so that the opposite four corners of the PiCowbell are soldered on.

**Try not to use too much solder on these four pins! The solder can wick into the associated female header socket, onto the inserted male pin, and permanently attach the two boards.**

![adafruit_products_PiC_shorty_headers_four_corners.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/601/medium640/adafruit_products_PiC_shorty_headers_four_corners.jpg?1668036973)

Warning: 

CAREFULLY remove the partially soldered PiCowbell from the Pico, before continuing to solder the rest of the PiCowbell pins.

As stated above, too much solder on the shorty female header pins can wick into the associated header socket, onto the inserted male pin, and permanently attach the two boards.

![adafruit_products_PiC_shorty_headers_without_PIco_ready_to_solder.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/602/medium640/adafruit_products_PiC_shorty_headers_without_PIco_ready_to_solder.jpg?1668037307)

Solder the rest of the pins onto the PiCowbell. Be sure to keep the shorty female headers square while you solder the rest of the pins.

![adafruit_products_PiC_shorty_headers_fully_soldered_no_Pico.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/603/medium640/adafruit_products_PiC_shorty_headers_fully_soldered_no_Pico.jpg?1668037418)

Press the PiCowbell onto the Pico to attach the two boards. Make sure you've oriented it correctly!

**The STEMMA QT connector should be on the same end as the Pico USB connector, and the reset button should be on the opposite end with the Pico debug pins.**

That's it! You're done!

![adafruit_products_PiC_shorty_headers_assembled_Pico_up.jpg](https://cdn-learn.adafruit.com/assets/assets/000/116/604/medium640/adafruit_products_PiC_shorty_headers_assembled_Pico_up.jpg?1668037669)

# Adafruit PiCowbell DVI Output

## CircuitPython

It's easy to use the **PiCowbell DVI** with CircuitPython and the [PicoDVI](https://docs.circuitpython.org/en/latest/shared-bindings/picodvi/index.html) core module. This module [has been added to CircuitPython as of 8.1.0b2](https://github.com/adafruit/circuitpython/releases/tag/8.1.0-beta.2) - but note that it uses a _lot_ of memory so in particular if you want to use Pico W with WiFi support, you'll likely only be able to get away with monochrome display.

This PiCowbell is only compatible with the Pico RP2040 in CircuitPython. The Pico 2 RP2350 does not work with this PiCowbell in CircuitPython because CircuitPython only has DVI output enabled for HSTX pins on the RP2350.

Warning: The Pico 2 RP2350 does not work with this PiCowbell in CircuitPython.

## Wiring

Plug the PiCowbell into a Pico board using headers according to the instructions on the [Assembly pages](https://learn.adafruit.com/adafruit-picowbell-dvi-output/assembly). Then, plug a mini HDMI to HDMI adapter with an HDMI cable into the PiCowbell mini HDMI port.

![](https://cdn-learn.adafruit.com/assets/assets/000/121/086/medium800/hacks_IMG_8767-2.jpg?1684263888)

Featured
### Mini HDMI Plug to Standard HDMI Jack Adapter

[Mini HDMI Plug to Standard HDMI Jack Adapter](https://www.adafruit.com/product/2819)
What an adorable little [pug!](http://www.vetstreet.com/dogs/pug)&nbsp;Sorry - plug! What an adorable mini HDMI to HDMI plug. &nbsp;We find this plug adapter really helpful. &nbsp;It's a great way to convert any mini HDMI plug to a normal HDMI plug and...that's about it! Now...

In Stock
[Buy Now](https://www.adafruit.com/product/2819)
[Related Guides to the Product](https://learn.adafruit.com/products/2819/guides)
![Angled shot of a small, white, mini HDMI to HDMI plug adapter.](https://cdn-shop.adafruit.com/640x480/2819-00.jpg)

## CircuitPython Usage

To use with CircuitPython, you need to first install the PicoDVI dependencies into the **lib** folder onto your&nbsp; **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.

Connect your Pico board to your computer via a known good data+power USB cable. The board should show up in your File Explorer/Finder (depending on your operating system) as a flash drive named **CIRCUITPY**.

Extract the contents of the zip file, and copy the **entire lib folder** , the **Helvetica-Bold-16.pcf** font file, **blinka\_computer.bmp** bitmap file and **code.py** file to your **CIRCUITPY** drive.

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

- **adafruit\_bitmap\_font/**
- **adafruit\_display\_shapes/**
- **adafruit\_display\_text/**
- **simpleio.mpy**

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

## Hello World DVI Output Example

Once everything is saved to the&nbsp; **CIRCUITPY** drive, you can connect the PiCowbell to an HDMI monitor and connect your Pico to USB power. You'll see the Hello World example display on the screen.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/CircuitPython_DVI_Hello_World/code.py

This example is a port of the [Arduino **16bit\_hello** code written by Phil B](https://github.com/adafruit/PicoDVI/blob/master/examples/16bit_hello/16bit_hello.ino). with some slight variation to show off some of the unique abilities of **displayio**.

The example begins by showing a rectangle, circle, triangle and rounded rectangle and changing the fill attribute from `None` to a color.

Then, a few chart variations are shown, including a sine wave pattern, line graph and bar graph.

Next is a text alignment example, showing how to use the `anchor_point` and `anchor_position` functions in the **adafruit\_display\_text** library.

Following that is a custom text example, loading a bitmap font instead of the built-in **terminalio** font.

Then there is a quick break from fonts to show off a bitmap image, specifically Blinka happily using her computer.

Finally, an example shows how to update the text in a `Label` object for projects where you want to display text information that updates over time.

![](https://cdn-learn.adafruit.com/assets/assets/000/121/081/medium800thumb/hacks_5745-06_1.jpg?1684256265)

It's important to note that the example code is optimized to be able to run all of the examples in a loop, which you more than likely won't want to do for your projects. As a result, the `clean_up(group)` function is run after each example to use `pop()` to remove all of the graphical elements of the **displayio** `group`. [Garbage collection](https://learn.adafruit.com/Memory-saving-tips-for-CircuitPython?view=all#overview) (`gc.collect()`) is also run to conserve memory. Additionally, each graphical element is created and deleted each time in each of the functions.

If you were to run, for example, the `sensor_values()` function on its own for a project, you would instantiate the graphical elements _once_, before the loop, and then update the text with the "values" in the loop:

```python
...

text_x = "X: %d" % randint(-25, 25)
text_y = "Y: %d" % randint(-25, 25)
text_z = "Z: %d" % randint(-25, 25)
x_text = label.Label(terminalio.FONT, text=text_x, color=red)
x_text.anchor_point = (0.0, 0.0)
x_text.anchored_position = (2, 0)
y_text = label.Label(terminalio.FONT, text=text_y, color=green)
y_text.anchor_point = (0.0, 0.0)
y_text.anchored_position = (2, 10)
z_text = label.Label(terminalio.FONT, text=text_z, color=blue)
z_text.anchor_point = (0.0, 0.0)
z_text.anchored_position = (2, 20)
group.append(x_text)
group.append(y_text)
group.append(z_text)

while True:
    for i in range(40):
        if i == 10:
            group.scale = 2
        elif i == 20:
            group.scale = 3
        elif i == 30:
            group.scale = 4
        x_text.text = "X: %d" % randint(-50, 50)
        y_text.text = "Y: %d" % randint(-50, 50)
        z_text.text = "Z: %d" % randint(-50, 50)
        time.sleep(0.1)
```

# Adafruit PiCowbell DVI Output

## Arduino

Using the PiCowbell DVI with Arduino involves connecting the PiCowbell to a Pico board, connecting the boards to an HDMI monitor and USB power, installing the Adafruit fork of the PicoDVI library and running the provided example code.

## Wiring

Plug the PiCowbell into a Pico board using headers according to the instructions on the [Assembly pages](https://learn.adafruit.com/adafruit-picowbell-dvi-output/assembly). Then, plug a mini HDMI to HDMI adapter with an HDMI cable into the PiCowbell mini HDMI port.

![](https://cdn-learn.adafruit.com/assets/assets/000/121/087/medium800/hacks_IMG_8767-2.jpg?1684263904)

Featured
### Mini HDMI Plug to Standard HDMI Jack Adapter

[Mini HDMI Plug to Standard HDMI Jack Adapter](https://www.adafruit.com/product/2819)
What an adorable little [pug!](http://www.vetstreet.com/dogs/pug)&nbsp;Sorry - plug! What an adorable mini HDMI to HDMI plug. &nbsp;We find this plug adapter really helpful. &nbsp;It's a great way to convert any mini HDMI plug to a normal HDMI plug and...that's about it! Now...

In Stock
[Buy Now](https://www.adafruit.com/product/2819)
[Related Guides to the Product](https://learn.adafruit.com/products/2819/guides)
![Angled shot of a small, white, mini HDMI to HDMI plug adapter.](https://cdn-shop.adafruit.com/640x480/2819-00.jpg)

## Library Installation

You can install the&nbsp; **Adafruit fork of the PicoDVI&nbsp;** library for Arduino using the Library Manager in the Arduino IDE.

![](https://cdn-learn.adafruit.com/assets/assets/000/121/082/medium800/hacks_Arduino_Open_Library_Manager.png?1684261122)

Click the&nbsp; **Manage Libraries ...** &nbsp;menu item, search for **PicoDVI -**  **Adafruit Fork** &nbsp;and select the **PicoDVI -**  **Adafruit Fork** &nbsp;library:

![](https://cdn-learn.adafruit.com/assets/assets/000/121/083/medium800/hacks_libSearch.png?1684261348)

If asked about dependencies for any of the libraries, click "Install all".

![](https://cdn-learn.adafruit.com/assets/assets/000/121/084/medium800/hacks_libDepends.png?1684261374)

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/16bit_hello_picowbell_dvi/16bit_hello_picowbell_dvi.ino

![](https://cdn-learn.adafruit.com/assets/assets/000/121/085/medium800thumb/hacks_5745-08.jpg?1684262858)

Upload the Example Code to the Pico. Then, you can connect the PiCowbell to an HDMI monitor and USB power to the Pico. You'll see the **16bit\_hello** example display on the screen.

There is an [excellent explainer page](https://learn.adafruit.com/picodvi-arduino-library-video-out-for-rp2040-boards/16bit_hello) for the example code in the PicoDVI Arduino Library Learn Guide.

[PicoDVI Arduino Library Learn Guide](https://learn.adafruit.com/picodvi-arduino-library-video-out-for-rp2040-boards/16bit_hello)
# Adafruit PiCowbell DVI Output

## Downloads

## Files

- [HDMI Wikipedia page with connector pinouts](https://en.wikipedia.org/wiki/HDMI)
- [EagleCAD PCB files on GitHub](https://github.com/adafruit/Adafruit-PiCowbell-DVI-Output)
- [3D models on GitHub](https://github.com/adafruit/Adafruit_CAD_Parts/tree/main/5745%20PiCowbell%20DVI)
- [Fritzing object in the Adafruit Fritzing Library](https://github.com/adafruit/Fritzing-Library/blob/master/parts/Adafruit%20PiCowbell%20DVI%20Output%20for%20Pico.fzpz)

## Schematic and Fab Print

Dimensions are in inches.

![](https://cdn-learn.adafruit.com/assets/assets/000/121/069/medium800/hacks_schem.png?1684245065)

![](https://cdn-learn.adafruit.com/assets/assets/000/121/070/medium800/hacks_fab.png?1684245072 dimensions are in inches)

![](https://cdn-learn.adafruit.com/assets/assets/000/134/505/medium800/adafruit_products_5745-PiCowbell-DVI.jpg?1737054381)


## Primary Products

### Adafruit PiCowbell DVI Output for Pico - Works with HDMI Display

[Adafruit PiCowbell DVI Output for Pico - Works with HDMI Display](https://www.adafruit.com/product/5745)
Ding dong! Hear that? It's the PiCowbell ringing, letting you know that the new&nbsp; **Adafruit PiCowbell DVI Output for Pico** &nbsp;is in stock&nbsp;and ready to&nbsp;display images and graphics from a microcontroller directly to an HDMI monitor or television!&nbsp;Note it...

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

## Guide Products

### Mini HDMI Plug to Standard HDMI Jack Adapter

[Mini HDMI Plug to Standard HDMI Jack Adapter](https://www.adafruit.com/product/2819)
What an adorable little [pug!](http://www.vetstreet.com/dogs/pug)&nbsp;Sorry - plug! What an adorable mini HDMI to HDMI plug. &nbsp;We find this plug adapter really helpful. &nbsp;It's a great way to convert any mini HDMI plug to a normal HDMI plug and...that's about it! Now...

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

## Related Guides

- [DIY Pi 400 Keyboard Case](https://learn.adafruit.com/pc-keyboard-case.md)
- [PiCowBell Proto Brick Plates](https://learn.adafruit.com/piccowbell-doubler-brick-plates.md)
- [PicoDVI Adafruit IO Feed Dashboard](https://learn.adafruit.com/dvi-io.md)
- [Pico W YBox3](https://learn.adafruit.com/pico-w-ybox3.md)
- [Adafruit PiCowBell HSTX DVI Output](https://learn.adafruit.com/adafruit-picowbell-hstx-dvi-output.md)
- [Adafruit Feather M0 Express](https://learn.adafruit.com/adafruit-feather-m0-express-designed-for-circuit-python-circuitpython.md)
- [Adafruit INA3221 Breakout](https://learn.adafruit.com/adafruit-ina3221-breakout.md)
- [Adafruit LSM6DS33 6-DoF IMU Breakout](https://learn.adafruit.com/lsm6ds33-6-dof-imu-accelerometer-gyro.md)
- [NeoPixel Run LED Arcade Game](https://learn.adafruit.com/pixel-chase-game.md)
- [Pathfinder Robot Companion](https://learn.adafruit.com/pathfinder.md)
- [Improve Brushed DC Motor Performance](https://learn.adafruit.com/improve-brushed-dc-motor-performance.md)
- [Doomscroll and Chill - A Wireless BLE Scroll Wheel Remote](https://learn.adafruit.com/doomscroll-and-chill-wireless-ble-scroll-wheel-rotary-encoder-remote.md)
- [Adafruit SEN54 or SEN55 Adapter Breakout](https://learn.adafruit.com/adafruit-sen54-or-sen55-adapter-breakout.md)
- [Adafruit 1.28" 240x240 Round TFT LCD](https://learn.adafruit.com/adafruit-1-28-240x240-round-tft-lcd.md)
- [Adafruit RGB Matrix FeatherWings](https://learn.adafruit.com/rgb-matrix-featherwing.md)
