#![no_std]
#![no_main]
use esp_backtrace as _;
use esp_hal::{
clock::ClockControl,
delay::Delay,
gpio::Io,
peripherals::Peripherals,
prelude::*,
system::SystemControl,
uart::{config::Config, Uart},
};
use esp_println::println;
use pmsx003::PmsX003Sensor;
#[entry]
fn main() -> ! {
let peripherals = Peripherals::take();
let system = SystemControl::new(peripherals.SYSTEM);
let clocks = ClockControl::boot_defaults(system.clock_control).freeze();
let io = Io::new(peripherals.GPIO, peripherals.IO_MUX);
let delay = Delay::new(&clocks);
let config = Config {
baudrate: 9600,
data_bits: esp_hal::uart::config::DataBits::DataBits8,
parity: esp_hal::uart::config::Parity::ParityNone,
stop_bits: esp_hal::uart::config::StopBits::STOP1,
clock_source: esp_hal::uart::config::ClockSource::default(),
};
let uart = Uart::new_with_config(
peripherals.UART1,
config,
Some(io.pins.gpio17), Some(io.pins.gpio16), &clocks,
).unwrap();
let mut sensor = PmsX003Sensor::new(uart);
println!("PMS5003 sensor initialized");
println!("Starting continuous readings...");
loop {
match sensor.read() {
Ok(frame) => {
println!("PM1.0: {} μg/m³", frame.pm1_0);
println!("PM2.5: {} μg/m³", frame.pm2_5);
println!("PM10: {} μg/m³", frame.pm10);
println!("---");
}
Err(e) => {
println!("Error reading sensor: {:?}", e);
}
}
delay.delay_ms(2000u32); }
}