使用的是 I2C SSD1306 0.96寸的OLED屏幕
1.在Cargo.toml中添加图形库依赖
# 处理ssd1306屏幕
ssd1306 = {version = "0.10.0",features = ["graphics"]}
embedded-graphics = "0.8.1"
完整配置 Cargo.toml
[package]
name = "esp32c3-oled-demo"
version = "0.1.0"
authors = ["suxii <m@suxii.cn>"]
edition = "2021"
resolver = "2"
rust-version = "1.77"
[[bin]]
name = "esp32c3-oled-demo"
harness = false # do not use the built in cargo test harness -> resolve rust-analyzer errors
[features]
default = []
experimental = ["esp-idf-svc/experimental"]
[dependencies]
log = "0.4"
esp-idf-svc = { version = "0.51", features = ["critical-section", "embassy-time-driver", "embassy-sync","experimental","std"] }
futures = "0.3.31"
anyhow = "1.0.98"
esp-idf-hal = "0.45.2"
# 处理ssd1306屏幕
ssd1306 = {version = "0.10.0",features = ["graphics"]}
embedded-graphics = "0.8.1"
[build-dependencies]
embuild = "0.33"
2.在main.rs
中编写rust代码
use esp_idf_hal::{
delay::FreeRtos,
i2c::*,
peripherals::Peripherals,
prelude::*,
};
use embedded_graphics::{
mono_font::{ascii::FONT_6X10, MonoTextStyle},
pixelcolor::BinaryColor,
prelude::*,
primitives::{Circle, Line, PrimitiveStyle, Rectangle},
text::Text
};
use ssd1306::{I2CDisplayInterface, Ssd1306, prelude::*, size::DisplaySize128x64};
fn main() -> anyhow::Result<()> {
esp_idf_hal::sys::link_patches();
// 初始化外设
let peripherals = Peripherals::take()?;
// 配置I2C
let i2c = peripherals.i2c0;
let sda = peripherals.pins.gpio5;
let scl = peripherals.pins.gpio6;
let config = I2cConfig::new().baudrate(400.kHz().into());
let i2c = I2cDriver::new(i2c, sda, scl, &config)?;
// 创建SSD1306接口
let interface = I2CDisplayInterface::new(i2c);
let mut display = Ssd1306::new(
interface,
DisplaySize128x64,
DisplayRotation::Rotate0
).into_buffered_graphics_mode();
// 初始化显示屏
display.init().expect("SSD1306 init failed");
display.flush().expect("Failed to flush display");
// 创建图形样式
let text_style = MonoTextStyle::new(&FONT_6X10, BinaryColor::On);
let line_style = PrimitiveStyle::with_stroke(BinaryColor::On, 1);
let mut run_x = 64;
loop {
// 清空屏幕
display.clear(BinaryColor::Off).unwrap();
// 绘制边框
Rectangle::new(Point::new(0, 0), Size::new(128, 64))
.into_styled(line_style)
.draw(&mut display).unwrap();
// 绘制文本
Text::new("Hello Rust!", Point::new(10, 15), text_style)
.draw(&mut display).unwrap();
// 绘制直线
Line::new(Point::new(10, 25), Point::new(118, 25))
.into_styled(line_style)
.draw(&mut display).unwrap();
// 绘制圆形
if run_x > 128 {
run_x = 0
}
run_x+=10;
Circle::new(Point::new(run_x, 40), 20)
.into_styled(line_style)
.draw(&mut display).unwrap();
// 更新显示
display.flush().expect("Failed to flush display");
// 间隔2秒
FreeRtos::delay_ms(2000);
}
}
3.接线 SSD1306
SDA -> io05
SCL -> io06
VCC -> 5v
GND -> GND
评论 (0)