embassy-ssd1306-graphics
Primitives graphiques no_std pour écrans OLED SSD1306,
construites au-dessus de embassy-ssd1306.
Rôle exact de ce crate
Le driver embassy-ssd1306 fournit déjà :
| Déjà dans le driver | Utilisation |
|---|---|
draw_pixel() |
Pixel individuel |
draw_hline() / draw_vline() |
Lignes directionnelles |
draw_rect() / draw_filled_rect() |
Rectangles |
draw_char() / draw_str() / draw_i16() |
Texte et nombres |
draw_bitmap() |
Bitmap 1bpp |
clear() / fill() / flush() |
Framebuffer et I2C |
Ce crate n'en duplique aucun. Il ajoute uniquement les primitives que le driver ne propose pas :
| Fonction | Algorithme | Apport |
|---|---|---|
line() |
Bresenham integer-only | Lignes obliques quelconques |
circle() |
Midpoint integer-only | Cercle contour |
fill_circle() |
Midpoint + hlines | Disque plein |
triangle() |
3 × line() |
Triangle contour |
ellipse() |
Midpoint généralisé | Contour d'ellipse |
bezier_quad() |
De Casteljau integer-only | Courbe de Bézier quadratique |
fill_triangle() |
Scanline integer-only | Triangle plein |
Philosophie
| Principe | Détail |
|---|---|
| Zéro duplication | Délègue tout ce que le driver sait faire |
| Zéro allocation | Pas de Vec, pas de Box |
| Integer-only | Aucun flottant dans les algorithmes |
#![forbid(unsafe_code)] |
Garanti à la compilation |
Installation
[]
= "0.6.0"
= "0.1.0"
Démarrage rapide
use Ssd1306;
use ;
async
⚠ Borrow :
Graphicstient un borrow mutable exclusif suroled. Encadrez-le dans un bloc{}pour pouvoir appeleroled.draw_str(),oled.clear()etoled.flush()en dehors.
Architecture
┌──────────────────────────────────────────┐
│ Votre application │
│ line() / circle() / triangle() │ ← ce crate
│ oled.draw_str() / oled.draw_i16() … │ ← driver direct
└──────────┬───────────────────────────────┘
│ &mut Graphics
┌──────────▼──────────────┐
│ Graphics (ce crate) │
│ clipping i32 · pixel() │
└──────────┬──────────────┘
│ draw_pixel(u8, u8)
┌──────────▼──────────────────────────────┐
│ embassy-ssd1306 (driver) │
│ framebuffer · I2C · flush() │
└─────────────────────────────────────────┘
API
Graphics<'a, I>
/// Crée le contexte graphique.
line
Trace une ligne entre deux points quelconques.
Algorithme de Bresenham integer-only aucune division flottante, safe sans FPU.
circle
Trace le contour d'un cercle.
Algorithme midpoint 8-octants 8 pixels symétriques par itération.
fill_circle
Remplit un disque par balayage de lignes horizontales symétriques.
triangle
Trace le contour d'un triangle via trois appels à line().
ellipse
Trace le contour d'une ellipse. Algorithme midpoint généralisé, integer-only.
bezier_quad
Trace une courbe de Bézier quadratique via De Casteljau integer-only.
fill_triangle
Remplit un triangle plein par scanline integer-only.
Exemples
Animation bras rotatif (avec embedded-trig-f32)
use ;
let mut angle: f32 = 0.0;
loop
Barre de progression (driver seul, pas besoin de ce crate)
// draw_filled_rect est déjà dans le driver
oled.draw_rect;
oled.draw_filled_rect;
Compatibilité
| Crate | Version |
|---|---|
embassy-ssd1306 |
0.6.0 |
embedded-hal-async |
1.0 |
| Rust edition | 2024 |
Testé sur : RP2040, RP2350, (via Embassy).
Licence
Distribué sous licence GNU GPL v2.0 ou ultérieure.
Voir LICENSE pour le texte complet.
Auteur
Jorge Andre Castro