

PicoProducer
This project is an OBS Controller using a Raspberry Pi Pico and CircuitPython.
- Size
- 80 × 61 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 27
- Nets
- 60
- Pads
- 132
- Tracks, vias
- 335, 30
- Routed
- Yes
- KiCad
- KiCad 5 (file 20210126)
- Created
- 4 Feb 2021
- Updated
- 3 May 2021
Overview
PicoProducer is an open-source printed circuit board by pjgpetecodes, from the pjgpetecodes/pico-streamdeck repository on GitHub, published under the MIT licence. It is a 2-layer board of 80 × 61 mm with 27 parts on 60 nets, routed with 335 tracks and 30 vias.
Its parts include 12 diodes and 12 switches. It belongs with the RP2040 boards of this library.
README
README.mdPico Producer
About this Project
This project is an OBS Controller using a Raspberry Pi Pico and CircuitPython.

In Action

Featured
The Raspberry Pi Pico Producer has been featured in the following publications;
- Raspberry Pi Website: https://www.raspberrypi.org/documentation/rp2040/getting-started/
- Hackster: https://www.hackster.io/news/pete-gallagher-s-raspberry-pi-pico-stream-deck-aids-obs-work-via-a-smart-circuitpython-script-0df423724379
- Hackster: https://www.hackster.io/news/use-a-raspberry-pi-pico-to-build-your-own-affordable-stream-deck-a0ad237f0d25
- Hackaday: https://hackaday.com/2021/02/23/lighted-raspberry-pico-stream-deck-is-easy-as-pi/
- OSH Park: https://blog.oshpark.com/2021/03/08/obs-controller-using-circuitpython-on-rpi-pico/
Basic Circuit

I've avoid GP15 as it's assigned a USB function... Using GP15 results in the following error at startup;
"ValueError: GP15 in use"
PCB
Front

Back

PCB

You can have your PCB made at OSH Park here;
https://oshpark.com/shared_projects/UNP0qi2U
Parts List
| Part | Qty | Link |
|---|---|---|
| PCB | 1 | https://oshpark.com/shared_projects/UNP0qi2U |
| Cherry MX Keycaps | 12 | https://amzn.to/2Oo1nLP |
| 3mm LED | 12 | https://amzn.to/3rAqNEV |
| 220 Ohm 8x Isolated Resistor Pack | 2 | http://bit.ly/picoproducerresistorarray |
| Raspberry Pi Pico | 1 | http://bit.ly/pimoroni-pico |
| 20 pin Male PCB Header | 2 | https://amzn.to/3sUr8lN |
| 3D Printed Case | 1 | https://www.thingiverse.com/thing:4800253 |
Notes:
- You can feel free to use 12 individual 220 Ohm Resistors - https://amzn.to/3qqaWai
- If you wire this without a PCB then use the following wire from Pimoroni - http://bit.ly/pimoroni-rainbow-wire
Case
We now have two different case designs....
Cliff Agius and his son have created a version of the box suited for buttons with holes for LEDs.
I've modified this design to add LEDs above each button;

It was originally based on this design;
https://www.thingiverse.com/thing:4186055
The keycaps are from here;
https://www.thingiverse.com/thing:4186055
You can find the project on Thingiverse here;
https://www.thingiverse.com/thing:4800253
Assembly Hints
- Insert the 20 Pin PCB headers with the long legs away from the PCB towards the Pico (Otherwise it'll fowl the faceplate)
- Solder the 2 Resistor Packs and the Pico PCB Headers first. Then the LEDs and Buttons. Then the Pico.
- You'll need to trim the legs on the resistor packs which border the three left hand buttons.
- Insert the LEDs into the PCB, then insert the Buttons into the faceplate and then insert that into the PCB.
- Push the leds back through the PCB, so they poke into the holes in the faceplate, otherwise they'll be below the faceplate.
- You'll need to trim the legs on the PCB headers otherwise it'll fowl the bottom of the case.
CircuitPython HID
You can find some more info about the CircuitPython KeyMappings here;
https://circuitpython.readthedocs.io/projects/hid/en/latest/_modules/adafruit_hid/keycode.html
Instructions
- Plug in the Raspberry Pi Pico while holding the onboard button.
- Your PC will mount the Pico as a drive
- Copy the
adafruit-circuitpython-raspberry_pi_pico-en_US-6.2.0-beta.1.uf2file to the Pico - The Pico will reboot once it's done with CircuitPython onboard.
- Copy the
adafruit_hidfolder and thecode.pyfile to the Pico - In OBS setup Hotkeys for the different scenes by putting your cursor in the Hotkey Box and pressing a button...
Scene 1 = ctrl + F1
Scene 2 = ctrl + F2
Scene 3 = ctrl + F3
Scene 4 = ctrl + F4
Scene 5 = ctrl + F5
Scene 6 = ctrl + F6
Scene 7 = ctrl + F7
Scene 8 = ctrl + F8
Scene 9 = ctrl + F9
Scene 10 = ctrl + F10
Scene 11 = ctrl + F11
Scene 12 = ctrl + F12- Press the buttons to change scenes in OBS!
- Each button will light a corresponding LED to show which Scene is currently active.
Debugging
Circuit Python creates a virtual COM port, so you can use a terminal Program set to 8N1 9600 Baud to debug the code... Just hit the enter key at teh prompt, and the terminal will echo there.
It might help to put a large enough delay at the start of your code to give you time to initialise the terminal.

Future Planning
- Look at Bluetooth / WebSockets (Will need add on circuitary!)
- Possible Matrix Input (But, I like the simplicity)
- Possible Resistor Ladder Input (But, again, I like the simplicity)
Notes
The HID control code is based on a nice blog post by Hriday which shows how to get the Pico working as a HID device, emulating a keyboard;
Thanks
Thanks to Cliff Agius and his son for the original 3d Files. Thanks to John Furcean for refactoring the code. Thanks to frankalicious for fixing some spelling checks.
Parts
27| Qty | Value | Footprint | References |
|---|---|---|---|
| 12 | MX | Button_Switch_Keyboard:SW_Cherry_MX_1.00u_Plate | SW1, SW2, SW3, SW4, SW5, SW6, SW7, SW8, SW9, SW10, SW11, SW12 |
| 11 | LED | LED_THT:LED_D5.0mm | D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11 |
| 2 | R_Pack08 | Package_DIP:DIP-16_W7.62mm | RN1, RN2 |
| 1 | LED5MM | LED_THT:LED_D5.0mm | D12 |
| 1 | RPI_PICO-SMD | Raspberry Pi:RPi_Pico_SMD_TH | U$1 |
Questions
How big is the PicoProducer PCB?
It measures 80 × 61 mm and has 2 copper layers, 1.6 mm thick.
What parts does the PicoProducer use?
27 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the PicoProducer KiCad files?
From the pjgpetecodes/pico-streamdeck repository on GitHub, at the commit this page was made from: the board is pcb/PicoProducer.kicad_pcb and its schematic pcb/PicoProducer.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the PicoProducer design in my own project?
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
Similar boards
- 2 layers47.6 × 27.3 mm

- 2 layers77.4 × 77.4 mm

CORAZON LEDS CON FADE
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
27 parts915 - 2 layers44.2 × 29.3 mm

- 2 layers40 × 40 mm

- 2 layers22 × 42 mm

Nvme bm to e
CRImier/MyKiCad
My KiCad boards. Can't be bothered uploading individually anymore, so here you go.
27 parts253GPL-3.0 - 2 layers186 × 45 mm

AddOnD
freeDSP/freeDSP-aurora
freeDSP ADAU1452 with 8 analog input, 8 analog outputs, S/P-DIF I/O, ADAT I/O, USB Audio Class2, WiFi, Bluetooth
27 parts226CC-BY-SA-4.0 - 2 layers29.6 × 40.6 mm

Dbwifi revB
ugcs/ddc
Drone Show Software is software designed for drone shows, allowing flight path planning as well as control of dozens of drones simultaneously in a synchronized manner.
27 parts223 - 2 layers110.2 × 90.6 mm
