

Push n turn-31
Push-n-Turn 31 is a USB MIDI controller with 3 keyboard switches (RedDragon low profile), a rotary encoder and 3/4 RGB leds (WS8212).
- Size
- 100 × 35 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 21
- Nets
- 25
- Pads
- 101
- Tracks, vias
- 245, 17
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 14 Feb 2025
- Updated
- 14 May 2025
Overview
Push n turn-31 is an open-source printed circuit board by concept-code-design, from the concept-code-design/push-n-turn-midi31 repository on GitHub. It is a 2-layer board of 100 × 35 mm with 21 parts on 25 nets, routed with 245 tracks and 17 vias.
It is built around the CH552G. Its parts include 4 capacitors, 4 diodes, 4 switches, 3 resistors and 1 IC. It belongs with the 8051 (CH55x, STC, AT89) boards of this library.
Main components
1README
README.mdPush-n-Turn 31
Push-n-Turn 31 is a USB MIDI controller with 3 keyboard switches (RedDragon low profile), a rotary encoder and 3/4 RGB leds (WS8212).
The device sports a USB type-C connector and requires no device drivers on Mac or PC.
The keys can be configured (via MIDI messages, or the configurator) to produce notes, CC codes (momentary or toggle mode). The encoder produces 0..127 on a configurable CC channel. The encoder button produces 127/0 on a CC channel of choice. Each switch has an RGB led that shows the state of the switch. The device uses a modified midi library for CH55x devices made by mi:muz
Configuring the keys
Configuration of the keys can be done by sending midi codes to the device. You can use python midiutil for this (https://github.com/sourcebox/midiutil).
start prog ./midiutil.py -d 1 -w 186 102 42
end prog ./midiutil.py -d 1 -w 186 102 43
module type ./midiutil.py -d 1 -w 186 102 44 returns: (10, 103, INSTRUMENT_TYPE);
firmware version ./midiutil.py -d 1 -w 186 102 45 returns (10, 104, FW_VERSION) 10 for version 1.0
show configuration ./midiutil.py -d 1 -w 186 102 46 returns the config of each of the 6 buttons, the rotary knob and rotary encoder
show stepsize ./midiutil.py -d 1 -w 186 102 47 returns (10, 105, encStepSize)
show MIDI channel ./midiutil.py -d 1 -w 186 102 48 returns (10, 106, MIDIChannel)
reboot in firmware update mode ./midiutil.py -d 1 -w 186 102 49
programming keys ./midiutil.py -d 1 -w 186 102 42 ./midiutil.py -d 1 -w 186 11 60 ./midiutil.py -d 1 -w 186 22 30 ./midiutil.py -d 1 -w 186 33 9 ./midiutil.py -d 1 -w 186 24 15 ./midiutil.py -d 1 -w 186 5 24 ./midiutil.py -d 1 -w 186 102 43
Links & References
License

Concept & Code invests time and resources providing this open source design, please support them and open-source hardware by purchasing products from Etsy or Tindie!
Designed by Ronald Leenes.
Firmware released under an GNU AGPL v3.0 license. See the LICENSE file for more information.
Hardware released under an CERN Open Hardware Licence v1.2. See the LICENSE_HARDWARE file for more information.
February 2025
Parts
21| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 100n | Capacitor_SMD:C_0805_2012Metric | C1, C2, C3, C4 |
| 4 | WS2812B-3528 | LED_SMD:LED_WS2812B-Mini_PLCC4_3.5x2.8mm | D1, D2, D3, D4 |
| 2 | 5k1 | Resistor_SMD:R_0805_2012Metric | R1, R2 |
| 1 | 10k | Resistor_SMD:R_0805_2012Metric | R3 |
| 1 | CH552G | Package_SO:SOP-16_4.4x10.4mm_P1.27mm | U1 |
| 1 | KiCad-Logo2_5mm_SilkScreen | Symbol:KiCad-Logo2_5mm_SilkScreen | KICAD |
| 1 | OSHW-Logo2_7.3x6mm_SilkScreen | Symbol:OSHW-Logo2_7.3x6mm_SilkScreen | REFOH |
| 1 | RotaryEncoder_Switch | Rotary_Encoder:RotaryEncoder_Alps_EC12E-Switch_Vertical_H20mm | SW4 |
| 1 | TestPoint | TestPoint:TestPoint_Pad_2.5x2.5mm | TP2 |
| 1 | USB_C_Receptacle_USB2.0_16P | Connector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal | J1 |
| 1 | key1 | Button_Switch_Keyboard:SW_RedDragon5.5m_Ali_1.00u | SW1 |
| 1 | key2 | Button_Switch_Keyboard:SW_RedDragon5.5m_Ali_1.00u | SW2 |
| 1 | key3 | Button_Switch_Keyboard:SW_RedDragon5.5m_Ali_1.00u | SW3 |
| 1 | ~ | TestPoint:TestPoint_Pad_2.5x2.5mm | TP1 |
Questions
How big is the Push n turn-31 PCB?
It measures 100 × 35 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Push n turn-31 use?
21 parts, built around the CH552G. 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 Push n turn-31 KiCad files?
From the concept-code-design/push-n-turn-midi31 repository on GitHub, at the commit this page was made from: the board is hardware/KiCad/push-n-turn-31.kicad_pcb and its schematic hardware/KiCad/push-n-turn-31.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Push n turn-31 design in my own project?
Its repository states no licence, so its author keeps all rights: ask concept-code-design before reusing the design.
Similar boards
- 2 layers30.4 × 12.7 mm

- 2 layers40.6 × 27.9 mm

- 2 layers40 × 40 mm

- 2 layers38.6 × 15.7 mm

LIPS V3.2
milar111/L.I.P.S.
OpenSource Affordable SipAndPuff device: Linear Interface for Paralysis Support
21 parts13 - 2 layers28.4 × 15.9 mm

- 2 layers51 × 44 mm

- 2 layers105.9 × 83.1 mm

BSidesDFW 2019
gowenrw/BSidesDFW_2019_Badge
This is where all the files for the BSidesDFW 2019 Badge will be stored. This includes code and art and cab and fab files. All the things.
30 parts5MIT - 2 layers43.2 × 24.9 mm
