6 个版本

0.1.5 2024年7月3日
0.1.4 2024年4月21日

#467 in 嵌入式开发

MIT/Apache

46KB
726

SSD1306 I2C  

crates.io License Documentation

用于通过I2C控制SSD1306 LCD显示屏的Rust crate

https://github.com/marvinrobot42/ssd1306-i2c.git

文档

这个crate是James Waples的SH1106 crate的分支,修改后用于SSD1306,更新为使用embedded-hal 1.0。

SSD1306 OLED包含老式的8位并行接口,SPI和I2C接口。此crate仅使用I2C接口。另外,请注意,此驱动程序支持多种显示屏尺寸,但SSD1306仅提供128 x 64(据我所知)。

特性

  • 更新为使用embedded-hal版本1.0.x
  • 支持embedded-hal-bus 0.1.0进行I2C总线共享
  • 使用embedded-graphics crate进行图形抽象
  • 专为嵌入式使用设计(ESP32-C3、-C6和-S3等)
  • 支持主次SSD1306 I2C地址(默认为主地址=0x3c)
  • 与无std嵌入式兼容

注意

我想在我的家庭自动化环境传感器物联网创作中添加一个LCD/OLED显示屏,但我找不到一个依赖嵌入式-hal 1.0的SSD1306 crate。它需要在同一个I2C总线上有多个设备,由于我的传感器是基于嵌入式-hal 1.0的,因此SSD1306 crate也需要。所以我将James的SH1106 crate从嵌入式-hal 0.2.x迁移到1.0,并修改它以支持SSD1306 OLED。为什么从SH1106开始而不是他的SSD1306 crate:因为SH1106看起来更现代,并且不依赖于其他嵌入式-hal 0.2 crate,如display-interface-i2c(现在已经四岁了)。请注意,此ssd1306-i2c crate不支持SH1106显示屏,因为初始化不兼容。

我的Sparkfun SSD1306 OLED(LCD-23453)仅支持I2C,因此我无法与之或测试SPI。

近期版本历史

  • 0.1.5 在README.md中修复另一个拼写错误(感谢Stelter先生)
  • 0.1.4 更多的文档
  • 0.1.1 修复一些文档中的拼写错误
  • 0.1.0 初始版本

使用方法


将依赖项添加到Cargo.toml

[dependencies]
ssd1306-i2c version = "0.1"
embedded-graphics = "0.8.1" 
esp-idf-hal = "0.43.0"  # an embedded-hal for your platform

简单示例

更完整的示例可以在存储库的 examples 路径下找到。请参考 James 的 SSH1106 crate 存储库示例文件夹以获取更多示例:[https://github.com/jamwaffles/sh1106/tree/master/examples](https://github.com/jamwaffles/sh1106/tree/master/examples)。


use ssd1306_i2c::{prelude::*, Builder}; 

use embedded_graphics::{
    mono_font::{ascii::FONT_6X10, ascii::FONT_6X13_BOLD, MonoTextStyleBuilder},
    image::{Image, ImageRawLE},
    pixelcolor::BinaryColor,
    prelude::*,
    text::{Baseline, Text},
};

use log::info;

...


fn main() -> Result<()> {
  // Bind the log crate to the ESP Logging facilities
  esp_idf_svc::log::EspLogger::initialize_default();
  ...

  let peripherals = Peripherals::take().unwrap();
  let pins = peripherals.pins;
  let sda = pins.gpio0;
  let scl = pins.gpio1;
  let i2c = peripherals.i2c0;
  let config = I2cConfig::new().baudrate(400.kHz().into());
  let i2c_dev = I2cDriver::new(i2c, sda, scl, &config)?;

  let mut display: GraphicsMode<_> = Builder::new()
    .with_size(DisplaySize::Display128x64NoOffset)
    .with_i2c_addr(0x3d)  //or 0x3c
    .with_rotation(DisplayRotation::Rotate0)
    .connect_i2c(i2c_dev)
    .into();

  info!("calling display.init()");
  FreeRtos::delay_ms(100);
  display.init().unwrap();

  display.flush().unwrap();
 
  display.clear();

  //********* display some text

  // creating MonoTextStyleBuilder
  let text_style = MonoTextStyleBuilder::new()
    .font(&FONT_6X10)
    .text_color(BinaryColor::On)
    .build();

  let text_style_bold = MonoTextStyleBuilder::new()
    .font(&FONT_6X13_BOLD)
    .text_color(BinaryColor::On)
    .build();

  info!("displaying Hello world! on LCD-OLED");
  Text::with_baseline("Hello Rust World!....", Point::zero(), text_style_bold, Baseline::Top)
    .draw(&mut display)
    .unwrap();
  info!("displaying Hello Rust! on LCD-OLED");
  Text::with_baseline("SSD1306-I2C", Point::new(0, 19), text_style, Baseline::Top)
    .draw(&mut display)
    .unwrap();

  display.flush().unwrap();


  loop {
    info!("looping with delay so ESP32 watchdog does not restart controller");

    FreeRtos::delay_ms(10000);
  }

}
    

许可证


您可以在署名的情况下自由复制、修改和分发此应用程序,前提是符合以下任一许可证的条款:

  • Apache 许可证 2.0 ([Apache 许可证 2.0](https://github.com/marvinrobot42/ssd1306-i2c/blob/896e2b2bc3ebe88a5c7b846c6b3f7791769c5b9c/LICENSE-Apache-2.0) 或 [Apache 许可证 2.0](https://opensource.org/licenses/Apache-2.0))
  • MIT 许可证 ([MIT 许可证](https://github.com/marvinrobot42/ssd1306-i2c/blob/896e2b2bc3ebe88a5c7b846c6b3f7791769c5b9c/LICENSE-MIT) 或 [MIT 许可证](https://opensource.org/licenses/MIT))

任选其一。

本项目与 Sparkfun 没有联系,也没有获得任何形式的认可或支持。

依赖关系

~0.1–1MB
~10K SLoC