运行在 Raspberry Pi 5 上的本地电话应用,搭配 Waveshare SIM7600CE-T 4G HAT 实现拨号、短信、通话音频。触控优化的 800x480 界面,无需 pip 安装任何包,仅依赖系统预装的 Python 环境。
- 拨号、通话记录、短信会话、联系人管理
- ModemManager D-Bus 实时来电/短信事件
- 浏览器 WebSocket 通话音频(桥接 SIM7600 USB PCM)
- 双线通话(来电等待、保持、拒接)
- 来电/短信桌面通知(mako)
- 系统托盘常驻,后台运行
- 800x480 DSI 触摸屏优化
- 主题切换(多套配色预设)
- 内嵌终端,设备端调试
- 无需 pip,仅依赖系统预装 Python 包(PyGObject、pyserial 可选)
| 组件 | 型号 |
|---|---|
| 主板 | Raspberry Pi 5 (4GB/8GB) |
| 模块 | Waveshare SIM7600CE-T 4G HAT (USB) |
| 屏幕 | 800x480 DSI 触摸屏 |
| 系统 | Raspberry Pi OS (Bookworm, 64-bit) |
| 合成器 | labwc (Wayland/wlroots) |
# 克隆
git clone https://github.com/krismint/Pi-Phone.git
cd Pi-Phone
# 直接运行
python3 backend/server.py --port 8765
# 或使用桌面启动器(后端 + 全屏 Chromium + 托盘图标)
./start.sh浏览器打开 http://127.0.0.1:8765,或让 start.sh 自动处理。
在 Raspberry Pi OS + labwc 环境下,Pi Phone 以原生应用形态运行:
- 一键启动:双击桌面图标或运行
start.sh - 系统托盘:关闭浏览器窗口后后端继续运行
- 桌面通知:来电和短信通过 mako 弹出原生通知
- 全屏 Chromium:无地址栏、无浏览器边框
backend/
server.py HTTP API、SSE、ModemManager 集成、通话状态
db.py SQLite 数据层
modem_events.py D-Bus 通话事件监听
modem_sms_events.py D-Bus 短信事件监听
audio_bridge.py WebSocket <-> SIM7600 USB PCM 音频桥
frontend/
index.html 前端入口
app.js UI 逻辑、SSE 客户端、音频 WebSocket 客户端
styles.css 触控优化样式 (800x480)
assets/icons/ 图标资源
start.sh 一键启动脚本(后端 + Chromium + 托盘)
tray.py 系统托盘图标(AyatanaAppIndicator3)
notify-click.sh 通知点击回调
deployment/ 桌面启动器、udev 规则
docs/ 架构、硬件、Bug 修复手册
┌─────────────────────────────────────────────────┐
│ Frontend (Chromium app mode) │
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ REST API │ │ SSE │ │ Audio WS │ │
│ └────┬─────┘ └─────┬────┘ └───────┬──────┘ │
└───────┼──────────────┼───────────────┼──────────┘
│ │ │
┌───────┼──────────────┼───────────────┼──────────┐
│ Backend (Python stdlib) │
│ ┌────┴─────┐ ┌────┴─────┐ ┌──────┴───────┐ │
│ │ HTTP API │ │ SSE push │ │ audio bridge │ │
│ └──────────┘ └──────────┘ └──────────────┘ │
│ │ │ │ │
│ ┌────┴──────────────┴───────────────┴───────┐ │
│ │ ModemManager (D-Bus + mmcli) │ │
│ └────────────────────┬──────────────────────┘ │
│ │ │
│ ┌────────────────────┴──────────────────────┐ │
│ │ SQLite (phone.db) │ │
│ └───────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
│
┌───────┴─────────────────────────────────────────┐
│ SIM7600CE-T USB (AT commands + PCM audio) │
└─────────────────────────────────────────────────┘
- docs/ARCHITECTURE.md — 后端/前端架构、D-Bus、SSE、WebSocket 音频、轮询策略
- docs/HARDWARE.md — 硬件接线、SIM7600 USB 接入、ModemManager 权限、音频桥
- docs/BUG_FIXES.md — Bug 修复手册,按症状索引(音频音调、双线切换、通知)
- Raspberry Pi OS Bookworm (64-bit) + labwc
- Python 3.11+(无需 pip 安装任何包)
- ModemManager + libqmi
- SIM7600CE-T 通过 USB 连接
- 桌面集成需要:
mako-notifier、gir1.2-ayatanaappindicator3-0.1
个人项目,许可证待定。
