What is the pinout of a 0.96 inch 128x64 I2C OLED display?

If you’re wiring up a 0.96 inch 128x64 I2C OLED display, the pinout is dead simple: four pins—VCC, GND, SCL, and SDA. That’s it. VCC takes 3.3V or 5V (most modules have an onboard regulator), GND goes to ground, SCL is the I2C clock line, and SDA is the I2C data line. No extra pins for reset or chip select because the I2C protocol handles everything through those two wires. This specific module, the 0.96 inch 128x64 i2c oled display, uses the SSD1306 driver chip, which is the industry standard for small monochrome OLEDs. The I2C address is typically 0x3C or 0x3D, depending on how the manufacturer set the SA0 pin—most modules default to 0x3C. You can check the back of the PCB; if there’s a resistor jumper near the IC, moving it swaps the address. The display itself is 0.96 inches diagonal, with a resolution of 128x64 pixels, which gives you about 8,192 individually addressable pixels. Each pixel is an organic LED that emits light when current passes through, so no backlight is needed—contrast is infinite, and black levels are truly black. The I2C bus operates at standard speeds up to 400 kHz (fast mode), but many libraries push it to 800 kHz or even 1 MHz without issues, as long as your pull-up resistors are right. The module usually comes with 4.7kΩ or 10kΩ pull-ups on the SDA and SCL lines, but if you’re running long wires or multiple devices, you might need to adjust those values. Power consumption is around 20 mA with all pixels on, but typical usage (text or icons) pulls 10-15 mA. Standby current is under 1 µA if you use the sleep command in the SSD1306 datasheet. The display controller supports 128x64, 128x32, and 96x16 modes, but the physical panel is fixed at 128x64. The pixel pitch is about 0.17 mm, which gives a crisp image at normal viewing distances. The viewing angle is rated at 160 degrees, but in practice, it’s closer to 170 degrees because the OLED emits light in a Lambertian pattern. The response time is under 10 µs, so there’s no ghosting even with fast animations. The module itself is about 27.3 mm wide by 27.8 mm tall, with a PCB thickness of 1.2 mm. The active area is 21.7 mm by 10.8 mm. The I2C interface uses a 4-pin header with a 2.54 mm pitch, which is breadboard-friendly. Some variants have a fifth pin for reset, but that’s rare on the I2C version—if you see a pin labeled RST, it’s usually pulled high internally and can be left floating. The display can operate from -40°C to +85°C, making it suitable for outdoor or industrial use. The SSD1306 driver has 128x64 bits of SRAM, which is exactly 1 KB. That SRAM is mapped directly to the pixels, so writing to a specific byte updates 8 vertical pixels. The I2C protocol requires a start condition, a 7-bit address plus a read/write bit, then an acknowledge from the slave, followed by data bytes. The SSD1306 expects a control byte after the address: 0x00 for commands, 0x40 for data. Commands set things like contrast, display orientation, charge pump voltage, and memory addressing mode. The default contrast is 0x7F (127 out of 255), but you can boost it to 0xFF for outdoor readability. The charge pump voltage is typically 7.5V to 8.5V, which is generated internally from the 3.3V or 5V supply. The display has a built-in DC-DC converter that can be disabled if you’re using an external supply, but that’s not common on these modules. The I2C bus capacitance should be kept under 400 pF for reliable operation at 400 kHz. Each module adds about 10-20 pF of capacitance, so you can chain up to 10-20 devices before needing a repeater or slower speed. The pull-up resistors create an RC time constant with the bus capacitance, which limits the maximum speed. For a 4.7kΩ resistor and 100 pF bus capacitance, the rise time is about 0.47 µs, which is fine for 400 kHz. If you’re using 10kΩ resistors, the rise time doubles, so you might need to drop the speed to 100 kHz. The display’s I2C address can be changed by modifying the SA0 pin on the SSD1306. On the module, that pin is usually connected to ground through a resistor or a solder jumper. If you lift that jumper, the address becomes 0x3D. Some modules have a 0-ohm resistor that you can move to switch addresses. This is useful if you’re using two displays on the same bus. The I2C protocol allows multiple slaves with different addresses, so you can control up to 127 devices theoretically, but in practice, the bus capacitance limits you to about 20. The display’s driver supports horizontal, vertical, and page addressing modes. Page mode is the default, where each page is 8 pixels tall. Horizontal mode wraps around the columns, which is useful for scrolling. Vertical mode wraps around the rows, which is less common. The memory can be accessed sequentially or randomly. Random access is slower because you have to set the column and page address for each byte. The display has a built-in 128x64 pixel RAM, but you can also use it in 128x32 mode by ignoring the lower half. The SSD1306 supports 256 contrast steps, from 0x00 to 0xFF. The contrast is controlled by an internal current source, which is proportional to the display brightness. The default contrast is 0x7F, which gives about 100 cd/m². At 0xFF, it’s about 200 cd/m². The display can be dimmed to near zero, which is useful for battery-powered devices. The charge pump can be enabled or disabled via command. If you’re using a 3.3V supply, the charge pump must be enabled to generate the 7.5V to 8.5V needed for the OLED pixels. If you’re using a 5V supply, the charge pump can be disabled, which saves about 1 mA of current. The display’s I2C interface is compatible with 3.3V and 5V logic levels. The SSD1306 has a 3.3V VDD pin, but the module usually has a voltage regulator that drops 5V to 3.3V. The I2C pins are 5V tolerant, so you can connect them directly to a 5V microcontroller without level shifters. The display’s power consumption is about 0.08W at 20 mA and 4V. That’s about 0.08W, which is negligible for most applications. The display can be turned off entirely by sending a sleep command, which drops current to under 1 µA. The wake-up time from sleep is about 100 ms, which is fine for most applications. The display has a built-in oscillator that generates the clock for the internal operations. The oscillator frequency is about 500 kHz, which determines the frame rate. The default frame rate is about 100 Hz, but you can adjust it by changing the clock divide ratio. The display supports hardware scrolling, which can scroll the entire display or a specific area. The scrolling is done by the hardware, so it doesn’t require CPU cycles. The display has a built-in charge pump that generates the negative voltage for the OLED pixels. The charge pump uses a capacitor and a switching frequency of about 500 kHz. The output voltage is regulated to about 7.5V to 8.5V. The display’s I2C interface is standard, but some modules use a different pin order. Always check the silkscreen on the PCB. The most common pinout is VCC, GND, SCL, SDA from left to right when the display is facing you. Some modules have the pins in a different order, so don’t assume. The display’s I2C address is 0x3C for most modules, but if you’re using a library, you can scan the I2C bus to find the address. The display’s driver supports 128x64, 128x32, and 96x16 modes. The 128x64 mode uses the full panel. The 128x32 mode uses only the top half. The 96x16 mode is for small displays. The display’s memory is organized as 128 columns by 8 pages. Each page is 8 pixels tall. The memory is accessed by setting the column and page address. The display’s I2C interface uses a 7-bit address, which is 0x3C for write and 0x3D for read. The read address is rarely used because the display doesn’t have a readable register. The display’s driver supports a command set that includes 0xAF for display on, 0xAE for display off, 0x81 for contrast, 0x20 for memory addressing mode, 0x21 for column address, 0x22 for page address, 0x40 for display start line, 0xA0 for segment remap, 0xA8 for multiplex ratio, 0xA4 for display on resume, 0xA5 for display on fade, 0xA6 for normal display, 0xA7 for inverse display, 0xA8 for multiplex ratio, 0xAD for charge pump, 0xB0 for page address, 0xC0 for COM output scan direction, 0xC8 for COM output scan direction, 0xD3 for display offset, 0xD5 for display clock divide, 0xD9 for pre-charge period, 0xDA for COM pins hardware configuration, 0xDB for VCOMH deselect level, 0xE0 for start of horizontal scroll, 0xE1 for stop scroll, 0xE2 for start of vertical and horizontal scroll, 0xE3 for stop scroll, 0xE4 for start of vertical scroll area, 0xE5 for stop scroll, 0xE6 for start of vertical scroll area, 0xE7 for stop scroll, 0xE8 for start of vertical scroll area, 0xE9 for stop scroll, 0xEA for start of vertical scroll area, 0xEB for stop scroll, 0xEC for start of vertical scroll area, 0xED for stop scroll, 0xEE for start of vertical scroll area, 0xEF for stop scroll. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer, which is 1024 bytes. The buffer is updated by writing to the I2C bus. The display’s driver supports a 128x64 pixel buffer