# androidvoc **Repository Path**: imzack/androidvoc ## Basic Information - **Project Name**: androidvoc - **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-06-14 - **Last Updated**: 2026-07-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Android 室内环境显示器 使用 ESP32-C3 SuperMini 和 AHT20 + BMP280 组合模块采集温度、湿度、气压, 通过 BLE 每秒发送到 Android 手机。App 将每条数据实时保存到本地 SQLite, 显示今日温湿度统计,并可导出 UTF-8 CSV。 ## 硬件与接线 - ESP32-C3 SuperMini - AHT20 + BMP280 温湿度气压组合模块 - Redmi K30 或 Android 7.0 以上、支持 BLE 的手机 | AHT20 + BMP280 | ESP32-C3 SuperMini | | --- | --- | | VDD | 3V3 | | GND | GND | | SDA | GPIO8 | | SCL | GPIO9 | AHT20 地址为 `0x38`。固件会依次探测 BMP280 的 `0x76` 和 `0x77` 地址。 组合模块支持更宽的输入电压,但连接 ESP32-C3 时建议统一使用 `3V3`。 ## 固件 Arduino IDE/CLI 选择 `MakerGO ESP32 C3 SuperMini`,编译并上传 [`voc/voc.ino`](voc/voc.ino)。 ```bash arduino-cli compile --fqbn esp32:esp32:makergo_c3_supermini voc arduino-cli upload --fqbn esp32:esp32:makergo_c3_supermini -p /dev/cu.xxx voc ``` 固件每 `1000 ms` 采集一次。AHT20 提供主温度和湿度,BMP280 提供气压及 芯片温度。BLE 广播名为 `ENV-Monitor-xxxxxx`,服务保持与旧版 App 相同: - Service: `8f140001-5d7a-4f6c-8a2b-7d9b6f42a001` - Data characteristic: `8f140002-5d7a-4f6c-8a2b-7d9b6f42a001` ### BLE v2 数据包 数据包固定 20 字节、小端格式,适配默认 ATT 通知负载: | 字节 | 内容 | | --- | --- | | 0 | 协议版本 `2` | | 1 | bit0=AHT20 有效,bit1=BMP280 有效 | | 2..3 | 采样序号 `uint16` | | 4..5 | AHT20 温度,`int16`,单位 0.01 °C | | 6..7 | 湿度,`uint16`,单位 0.01 %RH | | 8..11 | 气压,`uint32`,单位 Pa | | 12..15 | 设备运行时间,`uint32`,单位秒 | | 16..17 | BMP280 芯片温度,`int16`,单位 0.01 °C | | 18..19 | 采样间隔,`uint16`,单位 ms | ## Android App App 自动扫描目标 BLE 服务、订阅通知并断线重连。横屏和竖屏会随系统方向 自动切换,不会因为旋转重建蓝牙连接;屏幕保持常亮。仪表盘显示: - AHT20 实时温度、湿度 - BMP280 实时气压 - 今日温度最低值、平均值、最高值 - 今日湿度最低值、平均值、最高值 - 累计保存记录数和最后更新时间 每个有效 BLE v2 包都会进入单线程 SQLite 写入队列。相同采样序号和运行 时间的重复通知会被过滤。点击右上角“导出 CSV”,通过 Android 系统文件 选择器保存全部历史数据,无需存储权限。 ```bash cd androidapp ./gradlew testDebugUnitTest assembleDebug adb install -r app/build/outputs/apk/debug/app-debug.apk ``` 首次启动需授予“附近设备”权限;Android 11 及以下会请求定位权限,这是 旧版 Android BLE 扫描的系统要求。 ### CSV 字段 导出文件带 UTF-8 BOM,方便常见表格软件直接识别。字段为: ```text timestamp,temperature_c,humidity_rh,pressure_hpa,bmp_temperature_c,sequence,sensor_uptime_s,sample_interval_ms ``` 传感器无效的字段导出为空,不会用 `0` 冒充真实测量值。