At this stage I had a working PipBoy, the screen was fine, I had working buttons, the software was fine, but it wasn’t perfect and I had some ideas about how I could make things so much better.

When I switched to using the HyperPixel screen all of my GPIO connections were now used up so if I were to continue using the buttons the way I was doing I was going to have to come up with another solution. Luckily the screen has an i2c connection on the back of it and after some research I discovered I could get a breakout board that had I/O expansion over i2c using a PCF8574 chip, so I bought an Adafruit breakout board and started to prototype how it would all connect up.

Everything worked great, and then I started wondering how I was going to package all of this, I’d need the I/O expander board, 3 buttons, my rotary encoder all jammed into the top module of the PipBoy and ideally not rattling around in there either. But, what if the buttons, encoder and I/O expander were all on the same PCB, that would be a really neat solution, right? And thus down the rabbit hole I went with learning PCB design and what it would take to make this a reality, and if that was even practical or achievable.

My first designs were pretty rudimentary, I was more focussed on if I could actually package the buttons and dial where I wanted them in a way that would mount inside the PipBoy, but as you can see in the above image, it was tight, I was putting the buttons on jaunty angles to try cram it all in. I clearly had a lot to learn about PCB design, so that’s exactly what I did, and spent a month or so learning, iterating, learning some more.

Eventually, I came up with a design that I think would actually work, I realised that I could rotate the board 90 degrees and I was able to find buttons that work for the space constraints I had. I added 8 extra GPIO pins for any possible future expansions that might need to happen, configurable address pins so it could be used alongside other i2c devices and an LED that can be controlled too, for no good reason at all. But the main question is, could I actually make this thing a reality? The answer is, yes, actually surprisingly easily, especially considering this being the first time I’d ever attempted anything like this.

A few weeks later, it arrived, I soldered on the buttons and encoder, added some headers and plugged it into a Raspberry Pi and to my massive surprise, it actually works.