{"id":13692876,"url":"https://github.com/pjgpetecodes/pico-streamdeck","last_synced_at":"2025-05-02T20:30:29.299Z","repository":{"id":45906433,"uuid":"335897787","full_name":"pjgpetecodes/pico-streamdeck","owner":"pjgpetecodes","description":null,"archived":false,"fork":false,"pushed_at":"2021-05-03T13:40:13.000Z","size":32023,"stargazers_count":220,"open_issues_count":6,"forks_count":19,"subscribers_count":16,"default_branch":"main","last_synced_at":"2024-11-12T18:42:26.775Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pjgpetecodes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-02-04T09:08:42.000Z","updated_at":"2024-11-10T17:21:42.000Z","dependencies_parsed_at":"2022-09-22T21:41:26.527Z","dependency_job_id":null,"html_url":"https://github.com/pjgpetecodes/pico-streamdeck","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pjgpetecodes%2Fpico-streamdeck","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pjgpetecodes%2Fpico-streamdeck/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pjgpetecodes%2Fpico-streamdeck/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pjgpetecodes%2Fpico-streamdeck/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pjgpetecodes","download_url":"https://codeload.github.com/pjgpetecodes/pico-streamdeck/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252103825,"owners_count":21695375,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T17:01:03.075Z","updated_at":"2025-05-02T20:30:24.288Z","avatar_url":"https://github.com/pjgpetecodes.png","language":"Python","funding_links":[],"categories":["Resources"],"sub_categories":["Projects"],"readme":"# Pico Producer\n\n## About this Project\n\nThis project is an OBS Controller using a Raspberry Pi Pico and CircuitPython.\n\n![Pico StreamDeck Build 1](images/finishedbuild3.jpg \"Raspberry Pi Pico StreamDeck Build 1\")\n\n# In Action\n\n![Pico StreamDeck In Action](images/animation2.gif \"Raspberry Pi Pico StreamDeck In Action\")\n\n# Featured\n\nThe Raspberry Pi Pico Producer has been featured in the following publications;\n\n- Raspberry Pi Website: https://www.raspberrypi.org/documentation/rp2040/getting-started/\n- Hackster: https://www.hackster.io/news/pete-gallagher-s-raspberry-pi-pico-stream-deck-aids-obs-work-via-a-smart-circuitpython-script-0df423724379\n- Hackster: https://www.hackster.io/news/use-a-raspberry-pi-pico-to-build-your-own-affordable-stream-deck-a0ad237f0d25\n- Hackaday: https://hackaday.com/2021/02/23/lighted-raspberry-pico-stream-deck-is-easy-as-pi/\n- OSH Park: https://blog.oshpark.com/2021/03/08/obs-controller-using-circuitpython-on-rpi-pico/\n\n## Basic Circuit\n\n![Pico StreamDeck Circuit](images/circuit.png \"Raspberry Pi Pico StreamDeck Circuit\")\n\nI've avoid GP15 as it's assigned a USB function... Using GP15 results in the following error at startup;\n\n\"ValueError: GP15 in use\"\n\n# PCB\n\nFront\n\n![Pico StreamDeck PCB Front](pcb/Images/Front-3d.png \"Raspberry Pi Pico StreamDeck PCB - Front\")\n\nBack\n\n![Pico StreamDeck PCB Back](pcb/Images/Back-3d.png \"Raspberry Pi Pico StreamDeck PCB - Back\")\n\nPCB\n\n![Pico StreamDeck PCB PCB](pcb/Images/PCB.png \"Raspberry Pi Pico StreamDeck PCB\")\n\nYou can have your PCB made at OSH Park here;\n\nhttps://oshpark.com/shared_projects/UNP0qi2U\n\n# Parts List\n\n\n| Part | Qty | Link |\n|------|-----|------|\n| PCB | 1 | https://oshpark.com/shared_projects/UNP0qi2U |\n| Cherry MX Keycaps | 12 | https://amzn.to/2Oo1nLP |\n| 3mm LED | 12 | https://amzn.to/3rAqNEV |\n| 220 Ohm 8x Isolated Resistor Pack | 2 | http://bit.ly/picoproducerresistorarray |\n| Raspberry Pi Pico | 1 | http://bit.ly/pimoroni-pico |\n| 20 pin Male PCB Header | 2 | https://amzn.to/3sUr8lN |\n| 3D Printed Case | 1 | https://www.thingiverse.com/thing:4800253 |\n\nNotes: \n\n- You can feel free to use 12 individual 220 Ohm Resistors - https://amzn.to/3qqaWai\n- If you wire this without a PCB then use the following wire from Pimoroni - http://bit.ly/pimoroni-rainbow-wire\n\n# Case\n\nWe now have two different case designs....\n\nCliff Agius and his son have created a version of the box suited for buttons with holes for LEDs.\n\nI've modified this design to add LEDs above each button;\n\n![Pico StreamDeck Case](images/3dmodel.png \"Raspberry Pi Pico StreamDeck Case\")\n\nIt was originally based on this design;\n\nhttps://www.thingiverse.com/thing:4186055\n\nThe keycaps are from here;\n\nhttps://www.thingiverse.com/thing:4186055\n\nYou can find the project on Thingiverse here;\n\nhttps://www.thingiverse.com/thing:4800253\n\n# Assembly Hints\n\n- Insert the 20 Pin PCB headers with the long legs away from the PCB towards the Pico (Otherwise it'll fowl the faceplate)\n- Solder the 2 Resistor Packs and the Pico PCB Headers first. Then the LEDs and Buttons. Then the Pico.\n- You'll need to trim the legs on the resistor packs which border the three left hand buttons.\n- Insert the LEDs into the PCB, then insert the Buttons into the faceplate and then insert that into the PCB.\n- Push the leds back through the PCB, so they poke into the holes in the faceplate, otherwise they'll be below the faceplate.\n- You'll need to trim the legs on the PCB headers otherwise it'll fowl the bottom of the case.\n\n\n# CircuitPython HID\n\nYou can find some more info about the CircuitPython KeyMappings here;\n\nhttps://circuitpython.readthedocs.io/projects/hid/en/latest/_modules/adafruit_hid/keycode.html\n\n## Instructions\n\n- Plug in the Raspberry Pi Pico while holding the onboard button.\n- Your PC will mount the Pico as a drive\n- Copy the `adafruit-circuitpython-raspberry_pi_pico-en_US-6.2.0-beta.1.uf2` file to the Pico\n- The Pico will reboot once it's done with CircuitPython onboard.\n- Copy the `adafruit_hid` folder and the `code.py` file to the Pico\n- In OBS setup Hotkeys for the different scenes by putting your cursor in the Hotkey Box and pressing a button...\n\n```\nScene 1 =  ctrl + F1\nScene 2 =  ctrl + F2\nScene 3 =  ctrl + F3\nScene 4 =  ctrl + F4\nScene 5 =  ctrl + F5\nScene 6 =  ctrl + F6\nScene 7 =  ctrl + F7\nScene 8 =  ctrl + F8\nScene 9 =  ctrl + F9\nScene 10 =  ctrl + F10\nScene 11 =  ctrl + F11\nScene 12 =  ctrl + F12\n```\n\n- Press the buttons to change scenes in OBS!\n- Each button will light a corresponding LED to show which Scene is currently active.\n\n## Debugging\n\nCircuit 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.\n\nIt might help to put a large enough delay at the start of your code to give you time to initialise the terminal.\n\n![Pico Debugging](images/debugging.png \"Raspberry Pi Pico Debugging\")\n\n## Future Planning\n\n- Look at Bluetooth / WebSockets (Will need add on circuitary!)\n- Possible Matrix Input (But, I like the simplicity)\n- Possible Resistor Ladder Input (But, again, I like the simplicity)\n\n## Notes\n\nThe 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;\n\nhttps://hridaybarot.home.blog/2021/01/31/using-raspberry-pi-pico-has-hid-device-to-control-mouse-and-keyboard/\n\n## Thanks\n\nThanks to Cliff Agius and his son for the original 3d Files.\nThanks to John Furcean for refactoring the code.\nThanks to frankalicious for fixing some spelling checks. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpjgpetecodes%2Fpico-streamdeck","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpjgpetecodes%2Fpico-streamdeck","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpjgpetecodes%2Fpico-streamdeck/lists"}