use std::time::Duration;
use esp_idf_svc::{
eventloop::EspSystemEventLoop,
hal::peripherals::Peripherals,
wifi::{AccessPointConfiguration, AuthMethod, BlockingWifi, Configuration, EspWifi},
};
use log::info;
use heapless::String;
// 定义AP的SSID和密码
const SSID: &str = "ESP32-RUST-AP";
const PASSWORD: &str = "password123"; // 至少8个字符
fn main() -> anyhow::Result<()> {
// 初始化ESP-IDF
esp_idf_svc::sys::link_patches();
esp_idf_svc::log::EspLogger::initialize_default();
info!("Starting ESP32 WiFi AP...");
// 获取系统事件循环和外设
let peripherals = Peripherals::take()?;
let sys_loop = EspSystemEventLoop::take()?;
// 创建WiFi驱动
let mut wifi = BlockingWifi::wrap(
EspWifi::new(peripherals.modem, sys_loop.clone(), None)?,
sys_loop,
)?;
info!("Setting up WiFi in AP mode...");
// 创建heapless::String类型的SSID和密码
let mut ssid: String<32> = String::new();
let mut password: String<64> = String::new();
// 将&str转换为heapless::String
ssid.push_str(SSID).unwrap();
password.push_str(PASSWORD).unwrap();
// 配置AP模式
let wifi_configuration = Configuration::AccessPoint(AccessPointConfiguration {
ssid,
password,
auth_method: AuthMethod::WPA2Personal,
..Default::default()
});
// 应用配置并启动WiFi
wifi.set_configuration(&wifi_configuration)?;
wifi.start()?;
info!("WiFi AP started with SSID: {}", SSID);
info!("You can now connect to this AP with password: {}", PASSWORD);
info!("AP IP address: 192.168.4.1");
// 保持程序运行
loop {
std::thread::sleep(Duration::from_secs(10));
info!("WiFi AP is running... (SSID: {})", SSID);
}
}