As mentioned in our previous blog post, hand soldering a bunch of controller boxes is a lot of tedious work. As we were holding two other workshops, one at NDC Oslo (June 2019), and the other at Europython (July 2019) we decided to design our own printed circuit board (PCB) for an easier assembly process.

The plan was to make a gamepad-shaped PCB with most of the components (sensors, resistors, capacitors) surface mounted (SMD) on one side. No laser cutting or gluing would be necessary, as the PCB itself would form the frame of the device, and loose wires wouldn't be a problem.

Making our own PCB

Designing and ordering a custom made PCB is surprisingly straight-forward. For the PCB design we used KiCad, a fully open source piece of software for PCB design.

Most of the components have associated PDF data-sheets that can be easily found online. These data sheets describe in detail how the component should be used in a circuit, what resistors and capacitors are required, etc.

Of course we did make some design mistakes here and there, which are described further down.

Hackerman designing the PCB, using KiCad

We ordered our PCBs through a company called JLCPCB. Ordering through their website is very easy; simply upload the design (exported from KiCad) and fill out some details, like thickness, number of layers, PCB color, etc., and then pay. The PCBs are produced and shipped within a few days. Cool beans!

The First Version

The first version of the PCB was meant to validate that our circuit kind of worked. Needless to say, it had some issues. The placement of the buttons and joypad were not optimal, as they were annoying to use. Some of the components like the LEDs and speaker were placed in odd spots. The connectors for the ESP32 microcontroller were through-hole instead of surface mounted, which made the pins poke into the back side of the display.

Despite all the issues, it confirmed that our idea worked! We charged onwards, and started work on version 2.

The PCB for version 1 of The Pad

The Second Version

The second version fixed some of the issues we found in the first version, like better placement of components and changing the ESP32 connectors to a surface-mounted variant. We also added a d-pad, which used a conductive rubber pad that makes contact with the PCB when pressed. In addition we 3D printed a holder for the rubber, something you can clearly see on the front of the Pad. After some fiddling with the 3D printed design, it ended up working surprisingly well!

However, this new version also had a few issues. In the picture below, eagle-eyed readers might be able to spot that the SD-card reader is mounted upside-down. That makes it necessary to remove the d-pad casing to be able to insert or remove the SD card. Also, due to a freak routing accident, some of the circuit traces to the push buttons partially overlapped. They had to be manually cut apart with a knife to avoid short circuits.

The Pad v2

Still, despite those issues, The Pad v2 worked well, and was used for our two-day workshop at NDC Oslo 2019!

Overall, the workshop was a great success! Everyone had a good time, judging from all the skipped coffee breaks, and lots of delicious MicroPython code was created.

It did take its toll though, as can be seen from the images below.

The third version

Our next goal was a shorter three hour workshop at Europython 2019 in Basel, Switzerland. We wanted to make a third version of the pad, in order to fix the remaining design issues. As usual we procrastinated for too long, and everything was done last minute before the conference. But thanks to a lot of work, messed up sleep schedules and many friendly helpers, 11 controllers were assembled in time!

Mass production!

EuroPython seemed to love The Pad! The workshop saw a record number of attendees, who had a great time writing MicroPython and playing around with our product. Due to device shortage, we had to cap the attendee count to around 35.

By popular request, we decided to arrange a full day Sprint later in the week. A "Sprint" is an impromptu coding meetup, aka "hackaton".

In addition to the workshop, we also held a poster presentation about The Pad, describing how we made it and how it works. It saw great interest from the conference participants. The poster can be seen here.

The latest version of The Pad has been shown to be a great tool for teaching about both hardware design and MicroPython. It is also a fun product to play around with - making useful programs or games in MicroPython is quick and easy, and there's a growing number of examples, demos and games that can be enjoyed or used for inspiration.

The Product

  • ESP32 microcontroller with WiFi and bluetooth​
  • 240x320 16-bit display​ with touch
  • 4 buttons, joypad, d-pad (3D-printed)​
  • BME280 environment sensor​ (temperature, pressure, humidity)
  • MPU-9250 motion sensor​ (9-axis)
  • microSD card reader​
  • Speaker and microphone​
  • Addressable RGB LEDs

MicroPython drivers and demo programs/games can be found at github

The PCB design is open source and available at github

Interested in owning a pad? Only €79.98 + shipping.

Send a mail to contact@bytebarista.com

The process, including problems, advice and lessons learned, is summed up in this presentation that was held at NDC TechTown 2019.