Expand description
§embassy-st7789v-plot
Moteur de tracé de graphiques cartésiens (X, Y) adaptatifs et configurables
pour écrans TFT LCD ST7789V, s’appuyant sur embassy-st7789v.
§Caractéristiques principales
#![no_std]+#![forbid(unsafe_code)]: Sûr et optimisé pour le bare-metal.- Zéro allocation dynamique : Buffers statiques uniquement (ring buffer).
- Rendu intelligent (Double Phase) : Cadre, étiquettes et titres tracés une seule fois. Seuls la grille interne et le signal sont rafraîchis dynamiquement.
- Axes configurables : Graduations statiques avec labels personnalisés et détection automatique / coloration du zéro.
- Historique circulaire : Jusqu’à 240 points (limite physique de l’écran).
- Protection stricte des bordures : Clamping des primitives à l’espace interne utile.
- Deux modes de rendu :
| Mode | Type | Clignotement |
|---|---|---|
LineChart + render() | async, direct SPI | possible |
LineChartBuffered + render_buf() + flush() | sync, RAM | aucun |
§Structures principales
Graphics: Contexte graphique async (direct SPI).AxisConfig: Configuration d’un axe (min, max, pas, label).PlotConfig: Configuration complète (position, marges, couleurs, axes).LineChart: Graphique async avec rendu direct SPI.LineChartBuffered: Graphique sync avec rendu framebuffer — zéro clignotement.
§Exemple — mode direct async
use embassy_st7789v_plot::{Graphics, AxisConfig, PlotConfig, LineChart};
let x_axis = AxisConfig::new(0.0, 10.0, 2.0, b"Time (s)");
let y_axis = AxisConfig::new(-50.0, 50.0, 20.0, b"Volt (mV)");
let config = PlotConfig {
x: 10, y: 10, width: 220, height: 200,
margin_left: 30, margin_right: 10,
margin_top: 10, margin_bottom: 30,
x_axis, y_axis,
bg_color: Color::BLACK,
line_color: Color::GREEN,
axis_color: Color::WHITE,
grid_color: Color::GRAY,
text_color: Color::WHITE,
label_color: Color::CYAN,
};
let mut chart: LineChart<100> = LineChart::new(config);
chart.push(12.4);
chart.push(-5.2);
chart.push(22.1);
let mut gfx = Graphics::new_no_rst(display);
chart.render(&mut gfx).await;§Exemple : mode framebuffer sync (zéro clignotement)
use embassy_st7789v_plot::{AxisConfig, PlotConfig, LineChartBuffered};
let config = PlotConfig {
x: 10, y: 10, width: 220, height: 200,
margin_left: 30, margin_right: 10,
margin_top: 10, margin_bottom: 30,
x_axis: AxisConfig::new(0.0, 10.0, 2.0, b"Time (s)"),
y_axis: AxisConfig::new(-50.0, 50.0, 20.0, b"Volt (mV)"),
bg_color: Color::BLACK,
line_color: Color::GREEN,
axis_color: Color::WHITE,
grid_color: Color::GRAY,
text_color: Color::WHITE,
label_color: Color::CYAN,
};
let mut ecran = St7789vBuffered::new(St7789v::new(spi, dc, rst));
ecran.driver().init().await.unwrap();
let mut chart: LineChartBuffered<100> = LineChartBuffered::new(config);
loop {
chart.push(12.4);
chart.render_buf(&mut ecran); // tout en RAM, synchrone
ecran.flush().await.unwrap(); // envoi unique → zéro clignotement
}§Patron de borrow : mode direct
Graphics tient un &mut St7789v pour toute sa durée de vie.
Pour appeler les méthodes du driver (texte, orientation…),
gfx doit être sorti de portée au préalable.
{
let mut gfx = Graphics::new_no_rst(&mut display);
chart.render(&mut gfx).await;
} // ← borrow libéré
display.draw_str(8, 8, b"OK", Color::WHITE, Color::BLACK).await.unwrap();§Patron de borrow : mode framebuffer
render_buf prend &mut St7789vBuffered directement.
Appeler flush() après le rendu.
chart.render_buf(&mut ecran); // sync
ecran.flush().await.unwrap(); // async, envoi SPI unique§Note sur les erreurs SPI
Les fonctions de ce crate ignorent silencieusement les erreurs SPI.
Si votre application requiert une gestion d’erreur fine, utilisez
directement ecran.draw_pixel().
Les primitives render_buf n’accèdent jamais au SPI — aucune erreur possible.
Structs§
- Axis
Config - Définit un axe avec graduation statique fixe.
- Graphics
- Line
Chart - Gestionnaire du graphique avec axes statiques configurables.
- Line
Chart Buffered - Version framebuffer de
LineChart. - Plot
Config - Configuration complète du tracé graphique.
Constants§
- PLOT_
HISTORY_ LIMIT - Taille maximale de l’historique des données du graphique.
Functions§
- line
- Trace une ligne entre deux points en utilisant l’algorithme de Bresenham.