#![no_std]
#![no_main]
use embedded_hal::digital::v2::OutputPin;
use esp32_hal::{dht::Dht22, gpio::Pin, prelude::*, pwm::Servo, timer::TimerGroup, Delay};
use esp32c3_hal::prelude::*;
use hal::i2c::{I2C, I2CConfig};
use lcd::Lcd;
use panic_halt as _;
use esp32_hal::ultrasonic::Ultrasonic;
#[entry]
fn main() -> ! {
let peripherals = esp32c3::Peripherals::take().unwrap();
let mut pins = peripherals.pins.split();
// Set up components
let mut relay1 = pins.gpio4.into_output().unwrap();
let mut relay2 = pins.gpio5.into_output().unwrap();
let mut led = pins.gpio2.into_output().unwrap();
let mut buzzer = pins.gpio17.into_output().unwrap(); // Assuming buzzer on GPIO 17
let dht22 = Dht22::new(pins.gpio19); // DHT22 on GPIO 19
let mut servo = Servo::new(pins.gpio18); // Servo on GPIO 18
let ultrasonic = Ultrasonic::new(pins.gpio21, pins.gpio20); // TRIG: GPIO 21, ECHO: GPIO 20
// Set up LCD I2C
let i2c = I2C::new(
peripherals.i2c0,
pins.gpio9,
pins.gpio10,
I2CConfig::default(),
);
let mut lcd = Lcd::new(i2c).unwrap();
lcd.init().unwrap();
lcd.backlight().unwrap();
let mut delay = Delay::new(TimerGroup::new(peripherals.timer_group)); // Initialize Delay
loop {
// Read DHT22 sensor
let (temperature, humidity) = dht22.read().unwrap();
// Read distance from ultrasonic sensor
let distance = ultrasonic.measure().unwrap();
// Display data on LCD
lcd.clear().unwrap();
lcd.print(format!("Temp: {:.1}C\nHumidity: {:.1}%\nDistance: {}cm", temperature, humidity, distance)).unwrap();
// Control relays based on temperature
if temperature > 30.0 {
relay1.set_high().unwrap();
led.set_high().unwrap();
lcd.print("AC/Kipas: ON").unwrap();
} else {
relay1.set_low().unwrap();
led.set_low().unwrap();
lcd.print("AC/Kipas: OFF").unwrap();
}
// Fire alarm
if temperature > 50.0 {
buzzer.set_high().unwrap();
lcd.print("Warning: Fire!").unwrap();
} else {
buzzer.set_low().unwrap();
}
// Door security
if distance < 10 {
servo.set_angle(90).unwrap(); // Open door
lcd.print("Door: Open").unwrap();
} else {
servo.set_angle(0).unwrap(); // Close door
lcd.print("Door: Closed").unwrap();
}
// Add some delay
delay.delay_ms(2000_u32);
}
}
Loading
esp32-c3-rust-1
esp32-c3-rust-1