esp-idf-hal/examples/temperature_sensor.rs
GamerBene19 a619f13871
Add support for ESP internal temperature sensor (#337)
* Add first version of temp sensor driver

Code is very rudimentary and still suspect to change.
Notably, error handling is not implemented yet.

* Change cfg attribute to not any

* Rename TemperatureSensor to TemperatureSensorDriver

* Switch to `core::ptr`

* Add error handling

* Build the internal temperature sensor only on supported targets

* Fix the derives in TemperatureSensorConfig, TemperatureSensorClockSource

* Implement From<TemperatureSensorConfig> for temperature_sensor_config_t

* Use right clocks for temperature sensor depending on target

* Rename config and move it into own module

* Provide const new constructor for temperature sensor config

* Change config argument to be a reference

* Rename TemperatureSensor to TempSensor

* Avoid cloning config in temp driver constructor

* Add back derived Copy trait for TempSensorClockSource

* Add non_exhaustive option to TempSensorConfig

* Add temp sensor peripheral

* Cause panic if uninstalling the temp driver fails

* Implement Send for TempSensorDriver

* Make use of esp_idf_soc_temp_sensor_supported

* Add an example for temperature_sensor

---------

Co-authored-by: Luca Barbato <lu_zero@gentoo.org>
2024-09-09 19:46:26 +03:00

29 lines
869 B
Rust

use esp_idf_hal::delay::FreeRtos;
use esp_idf_hal::peripherals::Peripherals;
#[cfg(all(esp_idf_soc_temp_sensor_supported, esp_idf_version_major = "5"))]
fn main() -> anyhow::Result<()> {
use esp_idf_hal::temp_sensor::*;
esp_idf_hal::sys::link_patches();
let peripherals = Peripherals::take()?;
let cfg = TempSensorConfig::default();
let mut temp = TempSensorDriver::new(&cfg, peripherals.temp_sensor)?;
temp.enable()?;
loop {
let t = temp.get_celsius()?;
println!("Temperature {t}C");
FreeRtos::delay_ms(1000);
}
}
#[cfg(not(all(esp_idf_soc_temp_sensor_supported, esp_idf_version_major = "5")))]
fn main() -> anyhow::Result<()> {
println!("This example requires feature `esp_idf_soc_temp_sensor_supported` enabled");
loop {
std::thread::sleep(std::time::Duration::from_millis(1000));
}
}