[project on hold until I can dedicate some more time to it]
The steam controller is one of the greatest controllers ever made, and its ability to emulate a gamepad, a mouse and a keyboard make it perfect for PC use, but due to a steep learning curve it was poorly adopted, and then due to a frivolous lawsuit by the fuckwits over at Scuf gaming for "inventing" back paddles, the steam controller has been discontinued.
BUT, the track pads that made the steam controller so fun to use(although controversial to some) are publicly available. Also, one of the things that hurt the steam controller was its reliance on the steam overlay. With this design I intend to keep the overlays local to the controller, making them usable on windows/linux/mac/android/iphone.
I also want it to be as open and moddable as possible so the community can continue to develop it and fork it as they want.
1×
3.3v microcontroller
feather bluefruit sense currently. was using esp32 but it doesn't have any usb hid capability. teensy 3.2 works but it doesn't have ble. Intend to switch to the arduino nano rp2040 probably or some nrf52 based controller.
1×
analog thumb stick. would prefer hall effect, havent' decided.
2×
Cirque glidepoint trackpad TM040040 w/ curved overlay
may end up getting it with flat/no overlay and custom designing one later.
Switched microcontroller the the Feather Bluefruit Sense. It's got a built in gyro, bluetooth, lipo charging, and works with circuit python. I'm still not 100% sold on circuit python, but the ability to modify the code without an ide or anything required to flash it is pretty friendly, and one of my main goals with this project is to keep it open to the community.
I've got the circuit python library for the cirque touchpads working, and redesigned the ciruit python usb hid gamepad descriptor to have more values. So now it can support 16 buttons, a hat switch, and 6 axis(left stick x/y, right stick x/y, left trigger, right trigger.)
I modeled a rudimentary controller frame in FreeCAD to affix the pads, the breadboards, and start attaching buttons and such to.
Some of the discussion on r/SteamController about a SC2 some people have suggested 6 facebuttons like sega genesis, which sounded pretty great to me, so I'm going to add that. Another suggestion was pressures sensative pads instead of click. So I'm going to test putting Force Sensitive Resistors(FSRs) behind the pads and see how that feels.
I just received my hall effect sensors that I'm going to use for the triggers. Need to model and print a trigger mechanism and test it out. I hadn't realized until recently that the Steam Controller already uses hall effect triggers.
I think I've got it figured out how I'm going to wire the buttons. It's 18 buttons total
4 back buttons
2 shoulder buttons
2 trigger second stage buttons
6 face buttons
1 thumbstick button
3 home/start/select
The cirque touchpads can actually take in 3 buttons and report them over their spi/i2c packet, but 1 of those buttons shares a spot with the in built "tap" software button, so I'm just going to attach the L/R shoulder/trigger buttons to the touchpad inputs, then matrix the other 16 buttons to reduce input pins. We'll see how well this works with circuit python or if there will be too much input latency.
I'm still considering swapping to the arduino nano rp2040 connect. It'll still run circuit python, and has built in bluetooth and imu, but has much more gpio, and the gpio is ran through the PIO cores, which might be able to drive the matrix fast enough.
Still need to test swapping between sending gamepad/keyboard/mouse inputs or sending all at once. Once I get all the inputs wired up and mounted to the 3d printed frame I think this'll go faster.
Doing some tutorials to practice surface modeling in FreeCAD so I can get a more rounded/organic design like the steam controller's housing.
I've also been brainstorming my vision for customizing input. First stage will just be a simple text file on the flash memory that can be edited from the pc it's plugged in. Next stage will be editing/selecting the configs on the fly using the controller's oled display. Next stage will be a pc app that can map those configs(and one day swap configs depending on what app is focus/running. Stretch goals is maybe a phone app.
I got the esp32 working with Cirque's demo code, then once I figured out what needed to happen to get that working, I moved it over to 2bndy5's cirque trackpoint library and updated that to work with the esp32. Now that I can reliably control the touchpads, and have already made good progress on functions to interpret the data I need to chose the next step forward.
I was going to work on getting the esp32 ble composit hid device stuff working, but after realizing that the esp32 doesn't have any usb hid capability, I think I might put that on hold, and switch to the teensy 3.2 until my tiny2040, pico, or feather nrf52 boards come in.
I still think I intend to do this all on the arduino nano rp2040, since it has built in ble and imu. Just waiting for it to release. And then I'm going to have to adapt the code over to that.
Another option is circuit python. The rp2040 works with circuit python, and while I'm a bit loath to use python in an embedded device, it would make it extremely open/user friendly to new users, and I've already verified 2ndy5's cirque ciruity python library works pretty solid on the itsybitys m4. So, I may instead switch over to that. Although, the reason I stopped using the itsybitsy was I discovered all the gamepad libraries didn't have analog triggers or enough button selection options. If I go this route I need to really dig in to the usb/ble hid libraries.
Another concern I have with circuit python is button press latency. of all the gamepads out, the steam controller had some of the worst latency compared to playstation/xbox gamepads. python isn't known for being "high speed embedded", so that may nix this idea as well.
Ohhh this is going to be a lot of fun to follow along! Actually, I wonder how far this can be taken... Turned into some kind of universal remote for all sorts of stuff?
Heck, maybe I should take apart my old Steam Controller and replace the core with this.
I didn't even know the trackpads were just I2C/SPI, that's awesome!
What a cool project! I've got a steam controller and 3d printer so I might try this out. Been a while since I wrote any Python so I could use a refresher. Circuit Python looks super interesting, I don't know why I've never heard of it.
Are you planning to add a second joystick to yours? That was the only thing missing on the steam controller in my opinion.
Ohhh this is going to be a lot of fun to follow along!
Actually, I wonder how far this can be taken... Turned into some kind of universal remote for all sorts of stuff?
Heck, maybe I should take apart my old Steam Controller and replace the core with this.
I didn't even know the trackpads were just I2C/SPI, that's awesome!