Skip to main content

Crate embassy_piezo

Crate embassy_piezo 

Source
Expand description

§embassy-piezo

Driver asynchrone no_std pour capteur de vibration piézoélectrique (DO).

Portage esp-hal (ESP32 / ESP32-Cx / ESP32-Sx). La logique métier est inchangée par rapport à la version embassy-rp : seul le type Input provient désormais de esp_hal::gpio au lieu de embassy_rp::gpio.

§Caractéristiques

  • Async natif via GPIO esp-hal (trait embedded-hal-async Wait)
  • Détection front montant sans polling (zéro CPU en attente)
  • Comptage d’événements avec timeout configurable
  • Debounce configurable pour filtrer les rebonds électriques
  • Compatible signaux globaux inter-tâches
  • Zéro allocation, zéro unsafe

§Pré-requis (Cargo.toml)

[dependencies]
esp-hal          = { version = "1", features = ["esp32"] } # adapter la cible
esp-hal-embassy  = "0.99"   # fournit l'executor + le time-driver embassy
embassy-executor = "0.7"
embassy-time     = "0.4"

embassy-time reste utilisé tel quel : esp-hal-embassy fournit l’implémentation de l’horloge (embassy_time::Timer / with_timeout) pour toutes les puces supportées par esp-hal, exactement comme embassy-rp le fait pour le RP2040.

§Exemple minimal

use esp_hal::gpio::{Input, InputConfig, Pull};

let pin = Input::new(peripherals.GPIO15, InputConfig::default().with_pull(Pull::Down));
let mut piezo = PiezoVibration::new(pin);

piezo.wait_for_vibration().await;
let count = piezo.count();

§Exemple avec debounce

use esp_hal::gpio::{Input, InputConfig, Pull};

// Chocs humains : ignorer les rebonds électriques sous 100 ms
let pin = Input::new(peripherals.GPIO15, InputConfig::default().with_pull(Pull::Down));
let mut piezo = PiezoVibration::new_with_debounce(pin, 100);

let event = piezo.wait_for_vibration().await;
defmt::info!("choc #{}", event.count);

§Initialisation requise côté application

use esp_hal::timer::timg::TimerGroup;

let peripherals = esp_hal::init(esp_hal::Config::default());
let timg0 = TimerGroup::new(peripherals.TIMG0);
esp_hal_embassy::init(timg0.timer0); // requis avant tout Timer::after / with_timeout

Re-exports§

pub use error::PiezoError;

Modules§

error
Types d’erreur du driver Piezo.
signals
Signaux globaux asynchrones pour le partage d’événements piézo.

Structs§

PiezoVibration
Driver pour capteur de vibration piézoélectrique (sortie numérique DO).
VibrationEvent
Événement de vibration horodaté.

Enums§

Level
Digital input or output level.