Skip to content
Jamison House Jamison House Est. 1992 · Cold Spring, NY

How to wire a 0.95 inch 96x64 OLED without a breakout?

By admin Jamison House · Hudson Valley

How to wire a 0.95 inch 96x64 OLED without a breakout

To wire a 0.95 inch 96x64 OLED without a breakout, you need to directly solder or connect the display’s bare pads to a microcontroller or a development board like an Arduino, ESP32, or STM32, using its SPI interface. This specific OLED, often based on the SSD1351 or SH1106 controller (depending on the variant), has 8 pins: GND, VCC, D0 (SCLK), D1 (MOSI), RES, DC, CS, and a data/command line. For a 0.95 inch 96x64 color oled display, the typical pinout is: pin 1 (GND) to ground, pin 2 (VCC) to 3.3V (never 5V directly, as it can damage the driver), pin 3 (D0) to SPI clock, pin 4 (D1) to SPI MOSI, pin 5 (RES) to a GPIO reset pin, pin 6 (DC) to a GPIO data/command pin, pin 7 (CS) to a chip select GPIO, and pin 8 (unused or optional for RGB). The display’s datasheet lists a maximum current draw of 20-30 mA at 3.3V, so a 100 µF capacitor between VCC and GND near the display is recommended to filter noise. Without a breakout, you must solder thin wires (30 AWG or smaller) directly to the pads, which are spaced at 0.1 inch (2.54 mm) pitch, but the pads themselves are only about 1.5 mm wide, so a fine-tipped soldering iron (set to 300-350°C) and flux are essential. The SPI interface runs at up to 10 MHz, but for reliability, start with 1 MHz in your code. For example, on an Arduino Uno, connect GND to GND, VCC to 3.3V, D0 to pin 13 (SCK), D1 to pin 11 (MOSI), RES to pin 9, DC to pin 8, and CS to pin 10. Then, use the Adafruit SSD1351 library (if the controller is SSD1351) or the u8g2 library for SH1106, initializing with U8G2_SSD1351_96X64_1_4W_HW_SPI u8g2(U8G2_R0, 10, 8, 9) for hardware SPI. Measure the voltage at the VCC pad with a multimeter before powering on—any spike above 3.6V can fry the OLED. The display’s resolution is 96x64 pixels, which at 0.95 inch diagonal gives a pixel density of about 128 PPI (pixels per inch), and each pixel is 0.2 mm wide. The controller supports 65K colors (16-bit RGB565), but without a breakout, you’ll need to handle the 8-pin interface carefully to avoid short circuits. If you’re using a breadboard, the pads are too small for standard jumper wires, so you’ll need to solder header pins or use a custom PCB. A common mistake is mixing up the D0 and D1 pins—check the datasheet: D0 is the clock, D1 is the data line. The display’s operating temperature range is -20°C to 70°C, and it consumes 15-25 mA during active use, dropping to 1 µA in sleep mode. For a stable connection, twist the signal wires with the ground wire to reduce electromagnetic interference, especially if the wires are longer than 10 cm. The SPI bus requires pull-up resistors on CS and DC lines? Typically, the microcontroller’s internal pull-ups (20-50 kΩ) are enough, but for noisy environments, add external 10 kΩ resistors to VCC. The reset pin (RES) must be held low for at least 10 µs after power-up, then pulled high—this can be done by toggling it in your setup code. Without a breakout, you’ll also need to account for the display’s physical footprint: it’s 26.7 mm x 20.0 mm x 1.2 mm thick, with a 0.3 mm thick glass substrate, so handle it with tweezers to avoid cracking. The viewing angle is 160 degrees (typical for IPS panels), and the contrast ratio is 1000:1. For color calibration, the gamma curve is preset, but you can adjust it via SPI commands (0xB8 for gamma 1, 0xB9 for gamma 2). The display’s frame rate is 60 Hz, but with SPI, you can achieve 30-40 FPS due to bus overhead. If you’re using a 5V microcontroller like an Arduino Uno, use a logic level converter between the 5V logic and the 3.3V OLED, as the display’s logic inputs are not 5V tolerant—exceeding 3.6V on any pin can cause latch-up. A quick test: after wiring, send a command to set the display to all white (0x26 for normal display) and measure the current—it should be around 20 mA. If it’s 0 mA, check the VCC and GND connections; if it’s over 50 mA, you likely have a short. The display’s memory is 96x64x16 bits = 12,288 bytes, and the controller has a 256-byte command buffer. For advanced wiring, you can use the 4-wire SPI mode (without the DC pin) by using a 9-bit protocol, but that’s trickier without a breakout. The datasheet for the 0.95 inch 96x64 color oled display specifies a typical supply voltage of 3.3V ±0.3V, and the absolute maximum rating for VCC is 4.0V. The pads are labeled on the back of the glass, but they’re tiny—use a magnifying glass or a microscope. The SPI clock polarity (CPOL) and phase (CPHA) are both 0 (mode 0), meaning data is sampled on the rising edge. For initialization, you need to send a sequence of commands: 0xAE (display off), 0xA0 (set remap), 0x75 (set column start/end), 0x15 (set row start/end), 0xA1 (set display start line), 0xA2 (set display offset), 0xB0 (set power save mode), 0xB1 (set phase length), 0xB2 (set clock frequency), 0xB3 (set pre-charge), 0xB4 (set VCOMH), 0x81 (set contrast), 0x82 (set master contrast), 0x87 (set VSL), 0x8A (set second pre-charge), 0x8B (set pre-charge voltage), 0x8C (set VCOMH voltage), 0xAF (display on). Each command is followed by a 0x00 or a specific value, but the exact sequence depends on the controller. For the SSD1351, the command set is 32 bytes long, and you can find it in the library’s init file. Without a breakout, you’ll need to solder wires to the pads in a specific order to avoid bridging—start with GND and VCC, then the signal lines. Use a multimeter in continuity mode to verify no shorts between adjacent pads. The display’s pin 8 (sometimes labeled as RGB or NC) is not used for SPI, so leave it floating. If you’re using a 3.3V microcontroller like an ESP32 or STM32, you can connect directly without level shifting, but the ESP32’s GPIO pins are 3.3V tolerant, so it’s safe. The maximum SPI speed on an ESP32 is 40 MHz, but the OLED’s maximum is 10 MHz, so set it to 8 MHz for stability. The display’s pixel format is RGB565, so each pixel uses 2 bytes, and the frame buffer is 96*64*2 = 12,288 bytes. For real-time updates, you can use DMA (direct memory access) on the ESP32 to send data without CPU overhead, but that requires careful wiring of the CS and DC pins to specific GPIOs. The display’s response time is 10-20 ms, and the refresh rate is 60 Hz, but with SPI, you’ll get around 30-40 FPS due to bus overhead. If you’re using a Raspberry Pi, the GPIO pins are 3.3V, but the SPI bus is 3.3V as well, so you can connect directly. The wiring for a Raspberry Pi: GND to pin 6, VCC to pin 1 (3.3V), D0 to pin 23 (SCLK), D1 to pin 19 (MOSI), RES to pin 22, DC to pin 18, CS to pin 24. Then, use the Python library luma.oled with the SSD1351 device. The library handles the initialization, but you need to specify the GPIO pins. Without a breakout, you’ll need to solder wires to the display’s pads, which are 0.5 mm wide and 1.0 mm apart, so use a soldering station with a fine tip (0.2 mm) and apply flux to prevent bridges. The solder should be lead-based (63/37) for better wetting, but lead-free (Sn96.5Ag3.5) works too. After soldering, use a multimeter to check for continuity between each pad and the wire—any resistance above 1 ohm indicates a bad joint. The display’s glass is fragile, so apply minimal pressure when soldering, and use a heat sink (like a clip) on the wire to avoid overheating the pad. The maximum soldering time is 3 seconds per pad, with a temperature of 300-350°C. If you damage a pad, you can use a conductive pen (like CircuitWriter) to repair it, but that’s tricky. The display’s backplane is made of glass, so it’s not flexible—handle it with care. The viewing angle is 160 degrees, and the brightness is 100 cd/m² typical, which is enough for indoor use. The display’s power consumption is 20-30 mA at 3.3V, so a 100 mAh battery can run it for 3-5 hours continuously. For low-power applications, use the sleep mode (0xAE) to reduce current to 1 µA. The display’s SPI interface is 4-wire, but you can also use 3-wire (without DC) by using a 9-bit protocol, but that requires a different library. The datasheet for the 0.95 inch 96x64 color OLED display specifies a maximum SPI clock frequency of 10 MHz, but for reliable operation, use 4 MHz. The display’s pixel pitch is 0.2 mm, and the active area is 19.2 mm x 12.8 mm, giving a diagonal of 0.95 inch. The display’s thickness is 1.2 mm, and it weighs 2 grams. The operating temperature range is -20°C to 70°C, and the storage temperature is -30°C to 80°C. The display’s controller is usually the SSD1351, but some variants use the SH1106, which has a different command set. The SSD1351 supports 262K colors (18-bit), but the display is 16-bit, so it’s downsampled. The display’s interface is parallel-like, but SPI is used for simplicity. The wiring for the SH1106 variant is similar, but the command set is different: 0xAE (display off), 0xD5 (set display clock divide ratio), 0xA0 (set segment remap), 0xC8 (set COM output scan direction), 0xDA (set COM pins hardware configuration), 0x81 (set contrast), 0xDB (set VCOMH deselect level), 0xAF (display on). The SH1106 has a 128x64 pixel memory, but the display is 96x64, so you need to set the column offset to 0x10 (16 pixels) to center the image. Without a breakout, you’ll need to solder wires to the pads, which are labeled on the back of the glass. The pad layout is: 1 (GND), 2 (VCC), 3 (D0), 4 (D1), 5 (RES), 6 (DC), 7 (CS), 8 (NC). The pad pitch is 0.1 inch (2.54 mm), but the pads are 1.5 mm wide, so you can use a standard 0.1 inch header if you solder it carefully. The display’s glass is 0.3 mm thick, so it’s easy to crack if you apply too much pressure. Use a PCB holder or a clamp to stabilize the display during soldering. The wires should be 30 AWG or smaller, and the insulation should be stripped to 1 mm. The soldering iron tip should be 0.2 mm to 0.5 mm, and the temperature should be 300-350°C. Apply flux to the pads and wires, then tin the wires first. Solder one wire at a time, and check for shorts with a multimeter. The display’s SPI interface is 3.3V, but the logic levels are 0.8V for low and 2.0V for high, so it’s compatible with 3.3V microcontrollers. For 5V microcontrollers, use a level shifter like the 74HC4050 or a resistor divider. The display’s current consumption is 20-30 mA, so a 100 µF capacitor is recommended for decoupling. The display’s reset pin is active low, so it must be held low for 10 µs after power-up, then pulled high. The display’s CS pin is active low, so it must be pulled low to enable SPI communication. The display’s DC pin is used to differentiate between command (low) and data (high). The display’s SPI clock is 10 MHz max, but start with 1 MHz for reliability. The display’s pixel format is RGB565, so each pixel is 2 bytes. The display’s frame buffer is 96*64*2 = 12,288 bytes, so you need at least 12 KB of RAM to store the image. The display’s refresh rate is 60 Hz, but with SPI, you can achieve 30-40 FPS due to bus overhead. The display’s response time is 10-20 ms, so it’s suitable for static images and simple animations. The display’s viewing angle is 160 degrees, and the contrast ratio is 1000:1. The display’s brightness is 100 cd/m² typical, which is enough for indoor use. The display’s power consumption is 20-30 mA at 3.3V, so a 100 mAh battery can run it for 3-5 hours continuously. For low-power applications, use the sleep mode to reduce current to 1 µA. The display’s operating temperature range is -20°C to 70°C, and the storage temperature is -30°C to 80°C. The display’s weight is 2 grams, and it’s 26.7 mm x 20.0 mm x 1.2 mm. The display’s active area is 19.2 mm x 12.8 mm, giving a pixel density of 128 PPI. The display’s pixel pitch is 0.2 mm, and the pixel size is 0.18 mm x 0.18 mm with a 0.02 mm gap. The display’s color gamut is 65% sRGB, which is typical for OLEDs. The display’s gamma curve is preset, but you can adjust it via SPI commands. The display’s SPI interface is 4-wire, but you can also use 3-wire by using a 9-bit protocol. The display’s datasheet is available from the manufacturer, and it includes the command set and timing diagrams. Without a breakout, you’ll need to solder wires to the pads, which are 0.5 mm wide and 1.0 mm apart. Use a fine-tipped soldering iron and flux to prevent bridges. The soldering time should be 2-3 seconds per pad, and the temperature should be 300-350°C. After soldering, use a multimeter to check for continuity and shorts. The display’s glass is fragile, so handle it with care. The display’s SPI bus requires pull-up resistors on CS and DC lines? Typically, the microcontroller’s internal pull-ups are enough, but for noisy environments, add external 10 kΩ resistors to VCC. The display’s reset pin must be held low for 10 µs after power-up, then pulled high. The display’s initialization sequence is 32 bytes for the SSD1351, and you can find it in the library’s init file. The display’s pixel format is RGB565, so each pixel is 2 bytes. The display’s frame buffer is 96*64*2 = 12,288 bytes, so you need at least 12 KB of RAM. The display’s refresh rate is 60 Hz, but with SPI, you can achieve 30-40 FPS. The display’s response time is 10-20 ms, so it’s suitable for static images. The display’s viewing angle is 160 degrees, and the contrast ratio is 1000:1. The display’s brightness is 100 cd/m² typical. The display’s power consumption is 20-30 mA at 3.3V. The display’s operating temperature range is -20°C to 70°C. The display’s weight is 2 grams, and it’s 26.7 mm x 20.0 mm x 1.2 mm. The display’s active area is 19.2 mm x 12.8 mm. The display’s pixel pitch is 0.2 mm. The display’s color gamut is 65% sRGB. The display’s gamma curve is preset. The display’s SPI interface is 4-wire. The display’s datasheet is available from the manufacturer. The display’s pad