Upgrading to a giant breadboard for Raspberry Pi GPIO peripherals
I’ve outgrown the full-size breadboard included in my Raspberry Pi kit, so I decided to upgrade to a bigger breadboard, and tidy up the wiring while I’m at it. For what the circuit looked like before, see the second photo in Notes on prototyping circuit boards: breadboards, perfboards, and beyond; I won’t reproduce this “before” image here because it is too messy. But see the “after” image on the left, the complete rewiring onto this new huge breadboard.
In this article I’ll begin with an overview of various types of breadboards available, then cover the process of moving the circuit to a larger breadboard, and conclude with a comprehensive schematic of the circuit.
Breadboards, of all sizes and shapes
I’ll be upgrading to the Twin Industries TW-E41–1060 solderless breadboard:
Twin makes several variations, this model has 2,390 tie points, 4 binding posts (Va, Vb, Vc, GND), 3 separate 630-tie terminal strips, and 5 separate 100-tie distribution strips (usually used for power/ground).
Another similar board is the TW-E41-T2, same 2,390 tie points but 8 terminal blocks instead of the 4 binding posts. The binding posts aren’t shown in the above picture, but they are screw-on posts of red, yellow, green, and black; I’m not using them since I do not have any spare banana leads on hand. The large number of tie points is more useful.
Sparkfun sells a comparable product, Breadboard - Giant (PRT-12614), for cheaper and with 3,220 total tie points:
This may be a better option, but I have the TW-E41–1060 so I’ll be using it.
Then there’s your run-of-the-mill full-size breadboards (which the giant breadboards are composed of, as they interlock), this is what I’ll be upgrading from:
Distribution strips and power rails
Notice the difference in wiring on the two breadboards above: one has continuous rails along the edges, the other has a gap in the middle! This is indicated by the broken lines:
but can be an annoying gotcha when prototyping on a new breadboard. I have bridged the gap using some jumper wire, which I’ll likely leave bridged forever. Others have noted this shortcoming in the reviews:
Requiring four separate pairs of ground/power on a breadboard of this size is unlikely especially for digital circuits, I’d rather have no gap in distribution strips, but your mileage may vary. Also notice the Sparkfun giant breadboard has (many) gaps, but not the Twin — this means you have a total of 14 pairs of power/ground versus 5! If you try to any and they are not connected, unexpected behavior will occur, as in I²C interfacing on the Bus Pirate and Raspberry Pi to serial EEPROMs for a HAT: The Case of the Missing Ground.
Of the smallest, last I have is a 170-tie mini breadboard (excuse the dirt):
This is comparable to Breadboard — Mini Modular (White) PRT-12043. I had an ADC chip (MCP3304) and photodiode on this board, added in SPI interfacing experiments: EEPROMs, Bus Pirate, ADC/OPT101 with Raspberry Pi, then connecting back to the main breadboard (because it was full), so it will be nice to upgrade to a giant breadboard and remove the separate breakout.
Without further ado, I began to tear down the old circuit on the 830-tie breadboard and move it over to the giant. Some early progress:
First thing I added was the Pi Wedge, in the middle. This connects to the Raspberry Pi’s GPIO port and breaks it out so it can plug in to breadboards. One caveat: since the Pi Wedge hangs over the end, I flipped the breadboard upside-down, so it doesn’t collide with the terminal binding posts.
The LED display on the left was added to this circuit in Emerson MW8675W microwave oven teardown: salvaging the LED display, I did not have any breadboard space available then and resorted to attaching female-to-male jumper wires, but now it sits comfortably on the left. The mini breadboard with the ADC+photodiode, and the full-size breadboard with pushbuttons and LEDs added all the way back in Raspberry Pi 3 GPIO: pushbuttons, LEDs for RC and BARR, are both still present at this stage.
A Word on Precut Breadboard Wire
so I used them in my circuits, because that’s all I had at the time. (The male/female jumper wires it also came with are very useful too.)
It turns out you can buy color-coded breadboard wires, already pre-cut and pre-bent at right angles. The proper length can be chosen from the assortment of wires to produce a less messier circuit. One such kit:
I have two of these, but they are not my favorite. Much better is this 3M Jumper Wire Kit with 350 pieces, 25 of 14 lengths:
The inferior kit jumbles too many of the smaller pieces together; this 3M kit has distinct compartments for all but the larger lengths. It also comes with a handy legend, showing the exact lengths of each of the colors, so you can count the number of holes on the breadboard you want to jump (0.1" = each hole, standard 100 mil spacing) and choose the appropriate wire instead of guessing based on what fits or memorizing the colors:
A wider shot of the 3M kit plus the old circuit before it gets moved:
The other kits are useful as refills, however. Once transferred to the 3M, the cases can be used for other purposes like storing random wires:
There is some slight variation in color on the various kits:
but fortunately, the color scheme seems to be industry-standard:
- 0.1" no insulation
- 0.2" red
- 0.3" orange
- 0.4" yellow
- 0.5" green
- 0.6" blue
- 0.7" violet
- 0.8" gray
- 0.9" white
- 1.0" brown
- 2.0" red
- 3.0" orange
- 4.0" yellow
- 5.0" green
Adding a Level Shifter
As part of the rewiring, I took the opportunity to fix a problem with how I had been using the MCP3304 analog-to-digital converter. This chip is rated for 4.5V-5.5V, but since the Raspberry Pi natively uses 3.3V, I was getting away with powering it on 3.3V instead.
Technically this is out of spec (noted by @fivdi, developer of the mcp-spi-adc Node.js module I’m using in Home automation with Raspberry Pi + Homebridge), the ADC seemed to work just fine, but how about doing it right? That is, powering with 5V. But since the Pi is 3.3V, how can we do this?
The solution: a level shifter aka logic level converter. I picked up some of these on Aliexpress for a few bucks: 8 Channel I2C IIC Logic Level Converter Module Bi-Directional for Arduino 1pc (note: despite description, this part is a generic level shifter, works w/ Pi & SPI). Soldered on the included header:
then supply 5V to “HV” (= high voltage, though 5V is far from high voltage, it is higher voltage), 3.3V to “LV” (= low voltage), and tie GND to ground. Outputs will float high by default. But now you can connect the SPI bus:
- Raspberry Pi’s CE0 (BCM 8, physical #24) to LV1
- Raspberry Pi’s MOSI (BCM 10, physical #19) to LV2
- Raspberry Pi’s MISO (BCM 9, physical #21) to LV3
- Raspberry Pi’s SCK (BCM 11, physical #23) to LV4
then the HV outputs to the 5V chip, the MCP3304:
By convention, I’m using the right side of the board mostly for 5V (including the two power rails), and the left side for mostly 3.3V components.
Pushbuttons & LEDs
Once I moved over the pushbuttons and LEDs, things became crowded:
Ideally, a breadboard circuit could be wired such that no wires overlap, and with always the shortest wire possible. A planar graph is visually easier:
This is not always practical, of course. The Pi Wedge greatly helps in making the GPIO more accessible for prototyping, but there is only so much room on the board. Sometimes you have to overlap wires.
Adding & Removing I²C Chips
On the previous board, I had four EEPROMs but they served no purpose. For this rewiring I am only keeping two, one 24LC512 on the I2C-0 bus as a pseudo Raspberry Pi HAT, another on the I2C-1 bus for testing I²C. Both are now at address 0x50, instead of multiple chips wired at different addresses:
With everything off the old breadboards, I was able to recover a bunch of jumper wires, as well as the breadboards themselves:
These can be used for other projects, now that it is all on the giant board:
And here’s a complete schematic of the above photo of the board layout, mainly for my reference (built in KiCad, including custom schematic symbols: project files available at https://github.com/rxseger/myrpgpio):