ri-esp-board-profiles 0.1.1

no_std board/pin profiles and known hardware pitfalls for ESP32 and ESP32-S3
Documentation
#![no_std]

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct I2cPins {
    pub sda: u8,
    pub scl: u8,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Ili9341Pins {
    pub mosi: u8,
    pub sck: u8,
    pub cs: u8,
    pub dc: u8,
    pub rst: u8,
    pub bl: u8,
}

pub mod original_esp32_devkit {
    use super::I2cPins;
    pub const DEFAULT_I2C: I2cPins = I2cPins { sda: 21, scl: 22 };
    pub const COMMON_DHT_PIN: u8 = 4;
}

pub mod esp32_2432s028 {
    use super::Ili9341Pins;
    pub const TFT: Ili9341Pins = Ili9341Pins {
        mosi: 13,
        sck: 14,
        cs: 15,
        dc: 2,
        rst: 4,
        bl: 21,
    };
    pub const TOUCH_CS: u8 = 5;
    pub const CHIP: &str = "esp32";
}

pub mod esp32s3_wroom1_n16r8 {
    use super::I2cPins;
    pub const SAFE_I2C: I2cPins = I2cPins { sda: 21, scl: 47 };
    pub const GPIO8_USED_BY_OCTAL_PSRAM: bool = true;
    pub const GPIO9_USED_BY_OCTAL_PSRAM: bool = true;
    pub fn is_known_bad_i2c_pin(pin: u8) -> bool {
        pin == 8 || pin == 9
    }
}

#[cfg(test)]
mod tests {
    #[test]
    fn s3_gpio8_9_blocked() {
        assert!(crate::esp32s3_wroom1_n16r8::is_known_bad_i2c_pin(8));
        assert!(crate::esp32s3_wroom1_n16r8::is_known_bad_i2c_pin(9));
        assert!(!crate::esp32s3_wroom1_n16r8::is_known_bad_i2c_pin(21));
    }
}