6 个版本
0.1.5 | 2024年7月3日 |
---|---|
0.1.4 | 2024年4月21日 |
#467 in 嵌入式开发
46KB
726 行
SSD1306 I2C
用于通过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