Skip to main content

Crate embassy_st7789v_plot

Crate embassy_st7789v_plot 

Source
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 :
ModeTypeClignotement
LineChart + render()async, direct SPIpossible
LineChartBuffered + render_buf() + flush()sync, RAMaucun

§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§

AxisConfig
Définit un axe avec graduation statique fixe.
Graphics
LineChart
Gestionnaire du graphique avec axes statiques configurables.
LineChartBuffered
Version framebuffer de LineChart.
PlotConfig
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.