# esp32std **Repository Path**: lflxp/esp32std ## Basic Information - **Project Name**: esp32std - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-17 - **Last Updated**: 2026-03-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ESP32-S3 Rust OLED + WiFi + 按钮控制 Demo 基于 ESP-IDF 模板的 Rust 嵌入式项目,实现 OLED 显示、WiFi 连接、时间同步和按钮控制功能。 ## 功能特性 - **SSD1306 OLED 显示** (128x32, I2C) - **WiFi 连接** (支持断线重连) - **网络时间同步** (重庆时区) - **本地时钟** (每秒自动递增) - **按钮控制** (上/中/下三键) - **多模式显示** (3 种显示模式) ## GPIO 引脚分配 | 功能 | GPIO | 说明 | |------|------|------| | I2C SDA | GPIO41 | OLED 数据线 | | I2C SCL | GPIO42 | OLED 时钟线 | | UP 按钮 | GPIO40 | 上拉输入 | | ZERO 按钮 | GPIO0 | 上拉输入(开发板 BOOT 按钮) | | DOWN 按钮 | GPIO39 | 上拉输入 | ## 按钮控制 | 按钮 | 功能 | |------|------| | UP | 计数器 +1,显示模式 +1 | | ZERO | 计数器重置为 0 | | DOWN | 计数器 -1,显示模式 -1 | ## 显示模式 ### 模式 0 - 时钟模式 ``` ┌──────────────────────┐ │ Chongqing Time │ │ 21:30:45 │ │ Uptime: 120s │ │ Count: 5 │ └──────────────────────┘ ``` ### 模式 1 - 计数器模式 ``` ┌──────────────────────┐ │ Counter Mode │ │ Count: 5 │ │ Mode: 1 │ │ UP/DOWN/ZERO │ └──────────────────────┘ ``` ### 模式 2 - 系统信息 ``` ┌──────────────────────┐ │ System Info │ │ Uptime: 120s │ │ WiFi: OK │ │ Count: 5 │ └──────────────────────┘ ``` ## 编译和烧录 ### 方法一:使用 cargo run(推荐) ```bash cargo run --release ``` 这会自动编译并使用 `espflash flash --monitor` 烧录到设备,同时打开串口监视器。 ### 方法二:使用项目脚本 ```bash bash scripts/flash.sh release # release 模式 bash scripts/flash.sh debug # debug 模式 ``` ### 方法三:手动使用 espflash ```bash # 先编译 cargo build --release # 烧录(需要指定串口设备) espflash flash --monitor -p /dev/cu.usbmodem3101 target/xtensa-esp32s3-espidf/release/esp32std2 ``` ## 查看可用串口 ```bash espflash board-info ``` 或 ```bash ls /dev/cu.usb* ``` ## WiFi 配置 在 `src/main.rs` 中修改以下常量: ```rust const WIFI_SSID: &str = "你的WiFi名称"; const WIFI_PASS: &str = "你的WiFi密码"; ``` ## 项目结构 ``` esp32std2/ ├── .cargo/ │ └── config.toml # Cargo 配置(包含烧录命令) ├── .embuild/ │ └── esp-idf/ # ESP-IDF 构建缓存 ├── scripts/ │ └── flash.sh # 烧录脚本 ├── src/ │ └── main.rs # 主程序 ├── Cargo.toml # Rust 依赖配置 ├── rust-toolchain.toml # Rust 工具链配置 └── sdkconfig.defaults # ESP-IDF 配置 ``` ## 依赖库 | 库 | 版本 | 用途 | |---|------|------| | esp-idf-svc | 0.52.1 | ESP-IDF 服务层 | | ssd1306 | 0.9 | SSD1306 OLED 驱动 | | embedded-graphics | 0.8 | 嵌入式图形库 | | display-interface-i2c | 0.5 | I2C 显示接口 | | anyhow | 1.0 | 错误处理 | | log | 0.4 | 日志 | ## 技术架构 ### 多线程设计 - **主线程**:WiFi 连接、时间同步、OLED 显示更新 - **按钮线程**:独立处理按钮输入,通过 `Arc>` 共享状态 ### 状态共享 使用 `Arc>` 实现线程间安全的状态共享: ```rust pub struct AppState { pub counter: u32, // 计数器值 pub hour: u32, // 小时 pub minute: u32, // 分钟 pub second: u32, // 秒 pub mode: u8, // 显示模式 (0-2) pub wifi_connected: bool, // WiFi 连接状态 } ``` ### WiFi 重连机制 - 连接超时:5 秒 - 重连间隔:2 秒 - 自动检测断线并重连 ### 时间同步 - 使用 WorldTimeAPI 获取重庆时间 - 本地每秒自动递增 - 无需频繁网络请求 ## 开发环境 - Rust (Xtensa 目标) - ESP-IDF v5.5.3 - espflash 工具 ## 参考资料 - [ESP-IDF 模板](https://github.com/esp-rs/esp-idf-template) - [esp-idf-svc 文档](https://docs.rs/esp-idf-svc) - [embedded-graphics 文档](https://docs.rs/embedded-graphics) - [SSD1306 驱动](https://docs.rs/ssd1306) ## 许可证 MIT