working pressure sensor
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
reason = "mem::forget is generally not safe to do with esp_hal types"
|
||||
)]
|
||||
|
||||
use core::fmt::Write;
|
||||
use defmt::error;
|
||||
use embassy_executor::Spawner;
|
||||
use embassy_futures::select::{select, Either};
|
||||
@@ -79,30 +80,19 @@ async fn main(spawner: Spawner) -> ! {
|
||||
.into_async();
|
||||
|
||||
let mut buffer = [0u8; 1];
|
||||
let mut devices_count = 0;
|
||||
const SENSOR_ADDR: u8 = 0x5D;
|
||||
i2c.write_read_async(SENSOR_ADDR, &[0x0F], &mut buffer)
|
||||
.await
|
||||
.unwrap();
|
||||
i2c.write_async(SENSOR_ADDR, &[0x10, 0x22]).await.unwrap();
|
||||
|
||||
info!("Starting I2C bus scan...");
|
||||
let mut data = [0u8; 3];
|
||||
i2c.write_read_async(SENSOR_ADDR, &[0x28], &mut data)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
for addr in 0x08..=0x77 {
|
||||
match i2c.write_read_async(addr, &[0x0F], &mut buffer).await {
|
||||
Ok(_) => {
|
||||
info!(
|
||||
"Found device at address: 0x{:02X} (WHO_AM_I: 0x{:02X})",
|
||||
addr, buffer[0]
|
||||
);
|
||||
devices_count += 1;
|
||||
}
|
||||
Err(_) => {
|
||||
// No device responded at this address, continue silently
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if devices_count == 0 {
|
||||
info!("Scan complete: No devices found.");
|
||||
} else {
|
||||
info!("Scan complete: {} device(s) found.", devices_count);
|
||||
}
|
||||
let raw_pa = (data[0] as i32) | ((data[1] as i32) << 8) | ((data[2] as i32) << 16);
|
||||
let pa = raw_pa as f32 / 4096.0;
|
||||
|
||||
info!("Initializing WiFi...");
|
||||
let timg0 = TimerGroup::new(peripherals.TIMG0);
|
||||
@@ -144,12 +134,36 @@ async fn main(spawner: Spawner) -> ! {
|
||||
NETWORK_READY.wait().await;
|
||||
info!("Network ready");
|
||||
|
||||
let mut payload: heapless::String<16> = heapless::String::new();
|
||||
write!(payload, "{:.2}", pa).unwrap();
|
||||
// mqtt_publish("esp32/post", b"online", QualityOfService::QoS1, false).await;
|
||||
// mqtt_publish("esp32/post", &whoami, QualityOfService::QoS1, false).await;
|
||||
mqtt_publish(
|
||||
"esp32/post",
|
||||
payload.as_bytes(),
|
||||
QualityOfService::QoS1,
|
||||
false,
|
||||
)
|
||||
.await;
|
||||
|
||||
loop {
|
||||
Timer::after(Duration::from_secs(10)).await;
|
||||
mqtt_publish("esp32/post", b"aaaa", QualityOfService::QoS1, false).await;
|
||||
let mut data = [0u8; 3];
|
||||
i2c.write_read_async(SENSOR_ADDR, &[0x28], &mut data)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let raw_pa = (data[0] as i32) | ((data[1] as i32) << 8) | ((data[2] as i32) << 16);
|
||||
let pa = raw_pa as f32 / 4096.0;
|
||||
|
||||
Timer::after(Duration::from_millis(400)).await;
|
||||
let mut payload: heapless::String<16> = heapless::String::new();
|
||||
write!(payload, "{:.2}", pa).unwrap();
|
||||
mqtt_publish(
|
||||
"esp32/post",
|
||||
payload.as_bytes(),
|
||||
QualityOfService::QoS1,
|
||||
false,
|
||||
)
|
||||
.await;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user