[][src]Crate ssd1306

SSD1306 OLED display driver

The driver must be initialised by passing an I2C or SPI interface peripheral to the Builder, which will in turn create a driver instance in a particular mode. By default, the builder returns a DisplayProperties instance which is a low level interface to manipulate the display properties (e.g. rotation). The driver can be coerced into a more useful mode by calling into() and defining the type you want to coerce to. For example, to initialise the display with an I2C interface and GraphicsMode, you would do something like this:

use ssd1306::{mode::GraphicsMode, Builder, I2CDIBuilder};

// Configure an I2C interface on the target device; below line shown as example only
let i2c = I2cInterface;

let interface = I2CDIBuilder::new().init(i2c);
let mut disp: GraphicsMode<_, _> = Builder::new().connect(interface).into();
disp.init();

disp.set_pixel(10, 20, 1);

See the example for more usage. The entire embedded_graphics featureset is supported by this driver.

There is also TerminalMode which allows drawing of characters to the display without using a display buffer:

use ssd1306::{mode::TerminalMode, Builder, I2CDIBuilder};

// Configure an I2C interface on the target device; below line shown as example only
let i2c = I2cInterface;

let interface = I2CDIBuilder::new().init(i2c);
let mut disp: TerminalMode<_, _> = Builder::new().connect(interface).into();

disp.print_char('A');

See the example for more usage.

It's possible to customise the driver to suit your display/application. Take a look at the Builder for available options.

Examples

Examples can be found in the examples/ folder

Write text to the display without a framebuffer

Uses TerminalMode. See the complete example here.

use core::fmt::Write;
use ssd1306::{mode::TerminalMode, prelude::*, Builder, I2CDIBuilder};

let interface = I2CDIBuilder::new().init(i2c);
let mut disp: TerminalMode<_, _> = Builder::new().connect(interface).into();
disp.init().unwrap();
let _ = disp.clear();

// Spam some characters to the display
for c in 97..123 {
    let _ = disp.write_str(unsafe { core::str::from_utf8_unchecked(&[c]) });
}
for c in 65..91 {
    let _ = disp.write_str(unsafe { core::str::from_utf8_unchecked(&[c]) });
}

Draw some text to the display

Uses GraphicsMode and embedded_graphics. See the complete example here.

use embedded_graphics::{
    fonts::{Font6x8, Text},
    pixelcolor::BinaryColor,
    prelude::*,
    style::TextStyleBuilder,
};
use ssd1306::{mode::GraphicsMode, prelude::*, Builder, I2CDIBuilder};

let interface = I2CDIBuilder::new().init(i2c);
let mut disp: GraphicsMode<_, _> = Builder::new().connect(interface).into();

disp.init().unwrap();

let text_style = TextStyleBuilder::new(Font6x8)
    .text_color(BinaryColor::On)
    .build();

Text::new("Hello world!", Point::zero())
    .into_styled(text_style)
    .draw(&mut disp);

Text::new("Hello Rust!", Point::new(0, 16))
    .into_styled(text_style)
    .draw(&mut disp);

disp.flush().unwrap();

Re-exports

pub use crate::builder::Builder;
pub use crate::builder::I2CDIBuilder;

Modules

brightness

Display brightness

builder

Interface factory

command

Display commands.

displayrotation

Display rotation

displaysize

Display size

mode

Operating modes for the SSD1306

prelude

Crate prelude

properties

Container to store and set display properties

Enums

Error

Errors in this crate