☰
用Python+Termux将旧手机改造成智能家居中枢
2026/10/14 9:17:51 网站建设 项目流程

1. 项目概述与核心价值

每次换新手机后,那台旧设备往往就成了抽屉里的常驻居民。作为一名折腾过十几台旧设备的极客,我发现这些被淘汰的机器其实都还有着不错的性能表现。最近用Python+Termux打造的这个PhonePhoenix项目,成功让我的旧小米6焕发新生,现在它已经成为我家里的智能中枢,每天负责播放音乐、看护宠物,还能随时陪我聊天。

这个方案最吸引人的地方在于完全开源免费,而且所有功能都集中在一个简洁的Web界面里管理。你不需要购买任何智能音箱或监控设备,只要有一台能正常开机的安卓手机(Android 7.0以上),跟着我的步骤操作,两小时内就能搭建完成。实测运行半年多,日均内存占用不到500MB,比很多商业解决方案都轻量。

2. 环境准备与工具选型

2.1 硬件选择建议

我测试过从红米Note 4X到三星S20多款机型,总结出几个选机要点:

  • 优先选择支持OTG供电的机型(避免电池鼓包风险)
  • 摄像头完好的中端机最适合(如小米6、华为P20)
  • 2GB内存是底线,4GB更佳(语音识别时内存占用会飙升)

特别提醒:长期插电使用时,建议卸掉电池或使用充电保护插座。我的一台荣耀8就因持续充电导致电池膨胀,把后盖都顶开了。

2.2 Termux环境配置

官方F-Droid仓库的Termux版本最稳定,按这个顺序安装:

pkg install git python pulseaudio termux-api sox ffmpeg

几个关键包的作用:

  • pulseaudio:音频服务核心
  • termux-api:硬件调用桥梁
  • sox:音频处理(降噪、格式转换)
  • ffmpeg:音乐文件解码

遇到包冲突时,先运行:

pkg upgrade pkg clean

3. 核心功能实现细节

3.1 语音助手模块

唤醒机制优化

原始代码使用简单的语音能量检测,我在实践中发现这些改进很有效:

  1. 增加静音检测阈值动态调整
# 在assistant.py中修改 noise_floor = np.mean(np.abs(audio_data[-2000:])) * 1.5 # 动态基线 if current_volume > noise_floor * 3: # 触发阈值 start_recording()
  1. 双唤醒词验证(防误触发)
if wake_word in text and confirm_word in text: # 如"小爱同学""在呢" process_command()
音频响应策略

在config.json中可以配置多级响应:

"audio_commands": { "播放音乐": {"file": "play.mp3", "tts_backup": true}, "停止": {"file": "stop.mp3", "tts_backup": false} }

我的经验是高频指令用预录音频(响应快),长文本用TTS(节省存储)。

3.2 摄像头监控方案

图像传输优化

原项目直接传输原始图片,我在app.py中增加了压缩逻辑:

from io import BytesIO from PIL import Image def compress_image(img_path): with Image.open(img_path) as img: img = img.resize((800, 600)) buffer = BytesIO() img.save(buffer, format='JPEG', quality=60) return buffer.getvalue()

这样网页加载速度从3s降到0.5s,特别适合移动网络查看。

定时抓拍实现

在assistant.py中添加:

import schedule def job(): filename = f"/sdcard/DCIM/snapshot_{datetime.now().strftime('%Y%m%d_%H%M%S')}.jpg" subprocess.run(f"termux-camera-photo -c 1 {filename}", shell=True) schedule.every(30).minutes.do(job) while True: schedule.run_pending() time.sleep(1)

4. 音乐播放器深度改造

4.1 播放列表管理

原始版本只能随机播放,我扩展了这些功能:

  1. 按文件夹分类
music_library = { "轻音乐": "/sdcard/Music/Relaxing", "摇滚": "/sdcard/Music/Rock" }
  1. 记忆播放位置
with open('/data/data/com.termux/files/home/.playback_state', 'w') as f: f.write(f"{current_track}|{current_position}")

4.2 音频处理技巧

使用sox提升播放质量:

# 在播放前实时处理 play "input.mp3" rate -L 48k gain -n -3 bass +5

参数说明:

  • rate:统一采样率
  • gain:标准化音量
  • bass:增强低频

5. 系统优化与稳定性

5.1 后台保活方案

Android系统会严格限制后台进程,这些设置缺一不可:

  1. 在Termux中执行:
termux-wake-lock termux-notification --id keepalive --content "服务运行中"
  1. 手机设置中:
  • 电池优化 → Termux → 不优化
  • 自启动管理 → 允许Termux自启

5.2 资源监控脚本

创建monitor.sh:

#!/bin/bash while true; do MEM=$(free -m | awk '/Mem:/ {print $3}') [ $MEM -gt 1500 ] && pkill -f "python assistant.py" && sleep 30 sleep 60 done

当内存超过1.5GB时自动重启语音模块。

6. 安全加固措施

6.1 Web接口防护

修改app.py增加基础认证:

from flask_httpauth import HTTPBasicAuth auth = HTTPBasicAuth() @auth.verify_password def verify_password(username, password): return username == 'admin' and password == '你设置的强密码' @app.route('/admin') @auth.login_required def admin(): return render_template('admin.html')

6.2 摄像头隐私保护

在config.json中增加:

"camera": { "enable": true, "auth_required": true, "schedule": { "disable": ["22:00-06:00"] } }

7. 扩展功能实践

7.1 智能家居控制

通过HTTP请求控制米家设备(需安装miio):

import miio plug = miio.Device("192.168.1.100", "your_token") plug.on() # 打开插座

7.2 语音备忘录功能

新增voice_note.py:

def save_note(text): filename = f"/sdcard/VoiceNotes/{datetime.now().strftime('%Y%m%d_%H%M')}.txt" with open(filename, 'w') as f: f.write(text) return f"已保存备忘:{text}"

8. 故障排查手册

8.1 音频问题速查

现象排查步骤解决方案
无唤醒反应1. 执行termux-microphone-record -l
2. 检查pulseaudio服务状态
pulseaudio --start
重装termux-api
播放卡顿1. 查看CPU使用率
2. 检查音频文件格式
转码为MP3 128kbps
关闭其他进程

8.2 摄像头异常处理

遇到CAMERA_ERROR时:

  1. 重启termux-api服务
pkill termux-api termux-api &
  1. 检查相机ID是否正确
termux-camera-info # 通常后置是1,前置是0

9. 性能调优记录

9.1 内存优化方案

在低配设备上(2GB内存):

  1. 修改Python垃圾回收阈值
import gc gc.set_threshold(700, 10, 5) # 提高回收频率
  1. 使用轻量级WSGI服务器
pip install bjoern python -m bjoern app:app -b 127.0.0.1:5000

9.2 唤醒响应加速

通过预加载模型提升20%响应速度:

# 在assistant.py开头加载 from vosk import Model model = Model(lang="zh-cn")

10. 实际使用体验

经过三个月的持续改进,我的旧手机现在可以:

  • 早上7点自动播放新闻简报(通过RSS订阅)
  • 宠物靠近摄像头时自动拍照并推送到Telegram
  • 语音控制客厅的智能灯具
  • 作为临时监控看护老人房间

最惊喜的是耗电量——持续运行24小时仅耗电15%(飞行模式+WiFi连接)。建议把手机固定在充电座上,放在客厅中央位置,麦克风和摄像头都能获得最佳覆盖范围。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询