树莓派部署AI助手OpenClaw实战
这篇文章,记录了我在树莓派上安装和配置OpenClaw的真实过程。真实体验总结:安装不轻松:踩了不少坑,但都解决了学习曲线陡:需要时间熟悉,但值得功能很强大:超出了我的预期主动性很强:像一个真正的"队友"性能需要优化:树莓派性能有限,需要调整配置硬件集成很有趣:摄像头、蓝牙等,探索空间很大选择合适的设备:树莓派4B(4GB或8GB内存)耐心安装:会遇到各种问题,慢慢解决关注性能:注意内存、CPU、
引言
作为一名后端开发者,我的技术栈从C#开始,逐渐学会了VUE,变成了全栈开发。后来也学习了Python,也用Java开发企业级应用。但是最近这几年,随着AI的发展,从ChatGPT到Kimi,从在VsCode中对话,到在Cursor中编程,从学会使用Claude Code开始,我已经变成了AI全栈开发者。最近OpenClaw也很火,而我也很羡慕钢铁侠中的贾维斯,于是我开始探索一个不同的方向:把AI助手部署在自己的树莓派上。
为什么是树莓派?
- 数据隐私:AI助手运行在自己的设备上,数据不出本地
- 硬件集成:树莓派支持GPIO、摄像头、蓝牙等硬件
- 7x24小时运行:低功耗,可以一直待命
- 多渠道集成:直接在钉钉、Discord等通讯工具中使用
- 自动化能力强:内置Cron调度器,各种定时任务
听起来很完美,对吧?
但实际在树莓派上安装和配置OpenClaw的过程中,我踩了不少坑。下面,我想记录真实的探索过程。
为什么选择在树莓派上部署OpenClaw?
我的树莓派配置
- 型号:树莓派4B(4GB内存)
- 系统:Linux 6.12.62+rpt-rpi-v8(ARM64架构)
- Python版本:3.8+
- Node.js版本:v24.13.0
选择OpenClaw的原因
- 本地化部署:完全在树莓派上运行,数据更安全
- 硬件友好:支持摄像头、蓝牙等硬件设备
- 多渠道集成:支持钉钉、Discord等,直接在聊天中使用
- 技能扩展:可以自己写Python/Shell脚本扩展功能
- 定时任务:内置Cron调度器,自动化更方便
在树莓派上安装OpenClaw:从"一键安装"到"慢慢摸索"
第一步:环境准备
树莓派的系统环境和普通的x86服务器不太一样,这点在安装时给了我不少惊喜。
坑1:Python版本不兼容
树莓派默认安装的是Python 3.7,但OpenClaw需要Python 3.8+。
# 检查Python版本
python3 --version
# Python 3.7.3
# 安装Python 3.8+
sudo apt update
sudo apt install python3.8 python3.8-venv python3-pip
坑2:ARM64架构的Node.js安装
OpenClaw需要Node.js,但树莓派是ARM64架构,普通的x86版本不能用。
解决:
# 下载ARM64版本的Node.js
wget https://nodejs.org/dist/v24.13.0/node-v24.13.0-linux-arm64.tar.xz
# 解压
tar -xf node-v24.13.0-linux-arm64.tar.xz
# 移动到系统目录
sudo mv node-v24.13.0-linux-arm64 /usr/local/node
# 配置环境变量
echo 'export PATH=/usr/local/node/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 验证安装
node --version
# v24.13.0
第二步:安装OpenClaw CLI
官方文档说一行命令就能安装:
npm install -g @openclaw/cli
但在树莓派上,遇到了几个问题。
坑3:npm权限问题
第一次安装时报错:EACCES: permission denied
解决:
# 配置npm全局目录
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
npm install -g @openclaw/cli
坑4:npm安装速度慢
树莓派的性能有限,npm安装速度很慢,甚至会超时。
解决:
# 使用国内镜像
npm config set registry https://registry.npmmirror.com
第三步:初始化配置
openclaw init
这步比较顺利,但有个小细节:
坑5:时区配置错误
一开始我没注意时区设置,结果定时任务总是比我预期的时间晚8小时(UTC vs 北京时间)。
解决:
# 检查系统时区
timedatectl status
# 显示:Time zone: UTC
# 设置时区为Asia/Shanghai
sudo timedatectl set-timezone Asia/Shanghai
# 验证
timedatectl status
# 显示:Time zone: Asia/Shanghai (CST, +0800)
第四步:安装DingTalk插件
我想用钉钉作为主要通讯工具,所以安装了DingTalk插件:
openclaw plugins install dingtalk
坑6:插件配置复杂
安装后需要配置AppKey、AppSecret、企业ID等信息。我在钉钉开发者后台折腾了很久才搞清楚这些参数从哪里获取。
解决:
- 登录钉钉开放平台:https://open.dingtalk.com/
- 创建应用(机器人应用)
- 获取AppKey、AppSecret
- 配置企业ID
- 在
~/.openclaw/openclaw.json中填入这些信息
配置文件示例:
{
"channels": {
"dingtalk": {
"enabled": true,
"clientId": "你的AppKey",
"clientSecret": "你的AppSecret",
"robotCode": "你的机器人编码",
"corpId": "你的企业ID",
"dmPolicy": "open",
"groupPolicy": "open",
"messageType": "card"
}
}
}
第五步:启动Gateway服务
openclaw gateway start
坑7:端口冲突
第一次启动时报错:Error: listen EADDRINUSE: address already in use :::18789
检查发现是其他服务占用了端口。
解决:
# 检查端口占用
lsof -i :18789
# 停止占用端口的进程
sudo kill <进程ID>
# 或者修改配置文件中的端口
坑8:树莓派性能限制
启动Gateway后,树莓派的内存占用很高,系统变得卡顿。
解决:
# 在~/.openclaw/openclaw.json中调整并发参数
"agents": {
"defaults": {
"maxConcurrent": 2, // 降低并发数
"subagents": {
"maxConcurrent": 4 // 降低子任务并发数
}
}
}
在树莓派上的实用场景
场景1:蓝牙TTS语音播放
我想让OpenClaw通过蓝牙音箱播放语音。这在树莓派上实现起来很有意思。
坑9:蓝牙音箱配对
树莓派的蓝牙配置和普通电脑不太一样。
# 安装蓝牙工具
sudo apt install bluez bluez-tools pulseaudio pulseaudio-module-bluetooth
# 启动蓝牙服务
sudo systemctl start bluetooth
# 配置蓝牙
sudo bluetoothctl
# 进入交互模式
[bluetooth]# power on
[bluetooth]# agent on
[bluetooth]# scan on
# 找到设备后
[bluetooth]# pair <设备MAC地址>
[bluetooth]# connect <设备MAC地址>
[bluetooth]# trust <设备MAC地址>
[bluetooth]# exit
问题:配对成功了,但音频输出不到蓝牙音箱。
解决:
# 检查音频输出设备
pactl list sinks short
# 设置默认输出为蓝牙设备
pactl set-default-sink <蓝牙设备名称>
# 测试音频播放
paplay /usr/share/sounds/alsa/Front_Center.wav
现在,我可以对OpenClaw说:
请播放语音:"现在是下午三点,记得休息一下"
它就会通过蓝牙音箱播放出来。
树莓派上的特别之处:
- 蓝牙配置需要手动操作,不像PC那样图形界面方便
- 脉冲音频(PulseAudio)的配置需要熟悉
- 但一旦配置好,可以7x24小时待命,随时播报
场景2:摄像头拍照和控制
我想让OpenClaw帮我拍照并发送到钉钉。树莓派上接USB摄像头很方便。
坑10:摄像头被占用
树莓派上有个监控服务 motion,它占用了摄像头设备 /dev/video0。
第一次拍照时报错:Could not open video device /dev/video0
解决:
# 停止motion服务
sudo pkill motion
sudo systemctl stop motion
# 检查摄像头
ls /dev/video*
# /dev/video0 /dev/video1
# 拍照
ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -frames:v 1 /tmp/photo.jpg -y
# 拍照后重启motion(如果需要)
sudo systemctl start motion
坑11:摄像头分辨率限制
树莓派支持的摄像头格式和分辨率有限。
# 查看摄像头支持的格式
v4l2-ctl --list-formats
# 查看支持的分辨率
v4l2-ctl --list-formats-ext
# 我的icspring camera最高只支持640x480,YUYV格式
拍摄命令需要指定正确的格式:
ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -pix_fmt yuyv422 -frames:v 1 /tmp/photo.jpg -y
现在,我可以对OpenClaw说:
请拍一张照片,并发送到钉钉
几秒后,我就能在钉钉聊天中看到刚刚拍的照片。
https://avg.163.com/topic/detail/11357497
https://avg.163.com/topic/detail/11357467
https://avg.163.com/topic/detail/11357457
https://avg.163.com/topic/detail/11357447
https://avg.163.com/topic/detail/11357434
https://avg.163.com/topic/detail/11357418
https://avg.163.com/topic/detail/11357417
https://avg.163.com/topic/detail/11356191
https://avg.163.com/topic/detail/11357412
https://avg.163.com/topic/detail/11357413
https://avg.163.com/topic/detail/11357398
https://avg.163.com/topic/detail/11357404
https://avg.163.com/topic/detail/11357391
https://avg.163.com/topic/detail/11357394
https://avg.163.com/topic/detail/11357389
https://avg.163.com/topic/detail/11357385
https://avg.163.com/topic/detail/11357358
https://avg.163.com/topic/detail/11357350
https://avg.163.com/topic/detail/11357345
https://avg.163.com/topic/detail/11357375
https://avg.163.com/topic/detail/11357374
https://avg.163.com/topic/detail/11357366
https://avg.163.com/topic/detail/11357351
https://avg.163.com/topic/detail/11357357
https://avg.163.com/topic/detail/11357339
https://avg.163.com/topic/detail/11357308
https://avg.163.com/topic/detail/11357334
https://avg.163.com/topic/detail/11357328
https://avg.163.com/topic/detail/11357321
https://avg.163.com/topic/detail/11357322
https://avg.163.com/topic/detail/11357310
https://avg.163.com/topic/detail/11357305
https://avg.163.com/topic/detail/11357291
https://avg.163.com/topic/detail/11357286
https://avg.163.com/topic/detail/11357282
https://avg.163.com/topic/detail/11357284
https://avg.163.com/topic/detail/11357252
https://avg.163.com/topic/detail/11357257
https://avg.163.com/topic/detail/11357239
https://avg.163.com/topic/detail/11357247
https://avg.163.com/topic/detail/11357250
https://avg.163.com/topic/detail/11357248
https://avg.163.com/topic/detail/11357243
https://avg.163.com/topic/detail/11357240
https://avg.163.com/topic/detail/11357224
https://avg.163.com/topic/detail/11357218
https://avg.163.com/topic/detail/11357217
https://avg.163.com/topic/detail/11357215
https://avg.163.com/topic/detail/11357216
https://avg.163.com/topic/detail/11357212
https://avg.163.com/topic/detail/11357208
https://avg.163.com/topic/detail/11357210
https://avg.163.com/topic/detail/11357200
https://avg.163.com/topic/detail/11357189
https://avg.163.com/topic/detail/11357193
https://avg.163.com/topic/detail/11357190
https://avg.163.com/topic/detail/11357188
https://avg.163.com/topic/detail/11357184
https://avg.163.com/topic/detail/11357181
https://avg.163.com/topic/detail/11357174
https://avg.163.com/topic/detail/11357169
https://avg.163.com/topic/detail/11357136
https://avg.163.com/topic/detail/11357168
https://avg.163.com/topic/detail/11357167
https://avg.163.com/topic/detail/11357163
https://avg.163.com/topic/detail/11357140
https://avg.163.com/topic/detail/11357141
https://avg.163.com/topic/detail/11357139
https://avg.163.com/topic/detail/11357138
https://avg.163.com/topic/detail/11357134
https://avg.163.com/topic/detail/11357135
https://avg.163.com/topic/detail/11357133
https://avg.163.com/topic/detail/11357132
https://avg.163.com/topic/detail/11357130
https://avg.163.com/topic/detail/11357129
https://avg.163.com/topic/detail/11357128
https://avg.163.com/topic/detail/11357117
https://avg.163.com/topic/detail/11357127
https://avg.163.com/topic/detail/11357126
https://avg.163.com/topic/detail/11357124
https://avg.163.com/topic/detail/11357123
https://avg.163.com/topic/detail/11357121
https://avg.163.com/topic/detail/11357122
https://avg.163.com/topic/detail/11357119
https://avg.163.com/topic/detail/11357120
https://avg.163.com/topic/detail/11357116
https://avg.163.com/topic/detail/11357115
https://avg.163.com/topic/detail/11357114
https://avg.163.com/topic/detail/11357113
https://avg.163.com/topic/detail/11357112
https://avg.163.com/topic/detail/11357110
https://avg.163.com/topic/detail/11357111
https://avg.163.com/topic/detail/11357109
https://avg.163.com/topic/detail/11357108
https://avg.163.com/topic/detail/11357105
https://avg.163.com/topic/detail/11357107
https://avg.163.com/topic/detail/11357106
https://avg.163.com/topic/detail/11357101
https://avg.163.com/topic/detail/11357104
https://avg.163.com/topic/detail/11357103
https://avg.163.com/topic/detail/11357102
https://avg.163.com/topic/detail/11357100
https://avg.163.com/topic/detail/11357099
https://avg.163.com/topic/detail/11357098
https://avg.163.com/topic/detail/11357097
https://avg.163.com/topic/detail/11357096
https://avg.163.com/topic/detail/11357093
https://avg.163.com/topic/detail/11357095
https://avg.163.com/topic/detail/11357094
https://avg.163.com/topic/detail/11357092
https://avg.163.com/topic/detail/11357091
https://avg.163.com/topic/detail/11357089
https://avg.163.com/topic/detail/11357087
https://avg.163.com/topic/detail/11357085
https://avg.163.com/topic/detail/11357086
https://avg.163.com/topic/detail/11357084
https://avg.163.com/topic/detail/11357082
https://avg.163.com/topic/detail/11357083
https://avg.163.com/topic/detail/11357080
https://avg.163.com/topic/detail/11357081
https://avg.163.com/topic/detail/11357078
https://avg.163.com/topic/detail/11357079
https://avg.163.com/topic/detail/11357077
https://avg.163.com/topic/detail/11357076
https://avg.163.com/topic/detail/11357074
https://avg.163.com/topic/detail/11357075
https://avg.163.com/topic/detail/11357071
https://avg.163.com/topic/detail/11357073
https://avg.163.com/topic/detail/11357072
https://avg.163.com/topic/detail/11357069
https://avg.163.com/topic/detail/11357070
https://avg.163.com/topic/detail/11357065
https://avg.163.com/topic/detail/11357068
https://avg.163.com/topic/detail/11357067
https://avg.163.com/topic/detail/11357066
https://avg.163.com/topic/detail/11357064
https://avg.163.com/topic/detail/11357063
https://avg.163.com/topic/detail/11357057
https://avg.163.com/topic/detail/11357060
https://avg.163.com/topic/detail/11357054
https://avg.163.com/topic/detail/11357061
https://avg.163.com/topic/detail/11357062
https://avg.163.com/topic/detail/11357058
https://avg.163.com/topic/detail/11357056
https://avg.163.com/topic/detail/11357055
https://avg.163.com/topic/detail/11357051
https://avg.163.com/topic/detail/11357050
https://avg.163.com/topic/detail/11357052
https://avg.163.com/topic/detail/11357049
https://avg.163.com/topic/detail/11357047
https://avg.163.com/topic/detail/11357048
https://avg.163.com/topic/detail/11357040
https://avg.163.com/topic/detail/11357046
https://avg.163.com/topic/detail/11357045
https://avg.163.com/topic/detail/11357041
https://avg.163.com/topic/detail/11357044
https://avg.163.com/topic/detail/11357043
https://avg.163.com/topic/detail/11357039
https://avg.163.com/topic/detail/11357042
https://avg.163.com/topic/detail/11357038
https://avg.163.com/topic/detail/11357037
https://avg.163.com/topic/detail/11357036
树莓派上的特别之处:
- USB摄像头热插拔方便
- 可以和监控服务motion配合使用
- 树莓派体积小,可以放在任何需要监控的地方
场景3:邮件发送功能
我想让OpenClaw帮我发邮件。于是开发了一个email-sender技能。
坑12:SMTP配置陷阱
配置126邮箱的SMTP服务时,我一开始用的是邮箱密码,结果一直报认证错误。
查了半天文档才发现,126邮箱需要用"客户端授权码",而不是邮箱密码。
解决:
- 登录126邮箱网页版
- 进入设置 → POP3/SMTP/IMAP
- 开启SMTP服务
- 获取授权码
- 在配置文件中使用授权码
配置文件(/home/pi/.openclaw/workspace/config/email.conf):
[SMTP]
host = smtp.126.com
port = 465
username = ren8179@126.com
password = QHyjTYHm8w3QVpi6 # 客户端授权码,不是邮箱密码
Python发送脚本:
import smtplib
from email.mime.text import MIMEText
import configparser
def send_email(to, subject, content):
config = configparser.ConfigParser()
config.read('/home/pi/.openclaw/workspace/config/email.conf')
smtp_host = config['SMTP']['host']
smtp_port = config['SMTP']['port']
username = config['SMTP']['username']
password = config['SMTP']['password']
msg = MIMEText(content)
msg['From'] = username
msg['To'] = to
msg['Subject'] = subject
with smtplib.SMTP_SSL(smtp_host, smtp_port) as server:
server.login(username, password)
server.send_message(msg)
现在,我可以对OpenClaw说:
请发送邮件到ren8179@126.com,主题是"测试",内容是"OpenClaw邮件发送功能测试"
几秒后,邮件就发送成功了。
树莓派上的特别之处:
- 24小时在线,随时可以发送邮件
- 可以配合定时任务,自动发送日报、周报
- 邮件内容可以基于传感器数据(温度、湿度等)
场景4:定时任务和自动化
这是OpenClaw最强大的功能之一。内置的Cron调度器让我可以设置各种自动化任务。
坑13:Cron表达式理解错误
一开始我不太理解Cron表达式的格式,导致任务执行时间和预期不符。
比如,我想设置"每天早上8点执行",我写成了:
"expr": "0 8 * * *"
结果发现是在UTC时间8点执行,不是北京时间8点。
解决:
在配置文件中明确指定时区:
{
"schedule": {
"kind": "cron",
"expr": "0 8 * * *",
"tz": "Asia/Shanghai" // 明确指定时区
}
}
现在,我可以设置各种自动化任务:
- 每天8点:发送早间简报到钉钉
- 每小时整点:播报时间
- 每天凌晨2点:执行数据备份
- 工作日上午9点:发送工作提醒
早间简报示例:
{
"id": "morning-report",
"name": "早间简报",
"schedule": {
"kind": "cron",
"expr": "0 8 * * *",
"tz": "Asia/Shanghai"
},
"payload": {
"kind": "agentTurn",
"message": "请生成今天的早间简报,包括:\n1. 昨夜完成的工作\n2. 系统状态\n3. 今日建议\n\n发送到钉钉"
}
}
树莓派上的特别之处:
- 低功耗,24小时运行也不心疼电费
- 系统稳定,长时间运行不重启
- 可以和各种硬件定时器配合
树莓派性能优化经验
挑战1:内存占用高
OpenClaw运行在树莓派上,内存占用是个问题。
解决方案:
-
降低并发数:
"agents": { "defaults": { "maxConcurrent": 2, "subagents": { "maxConcurrent": 4 } } } -
启用会话压缩:
"agents": { "defaults": { "compaction": { "mode": "safeguard", "maxTokens": 200000 } } } -
定期清理旧会话:
openclaw sessions cleanup --older-than 1d
挑战2:磁盘空间不足
OpenClaw会话日志会占用大量磁盘空间。
解决方案:
# 设置日志轮转
sudo vim /etc/logrotate.d/openclaw
/home/pi/.openclaw/agents/main/sessions/*.jsonl {
daily
rotate 7
compress
delaycompress
missingok
notifempty
}
挑战3:树莓派散热
OpenClaw持续运行会让树莓派发热,影响性能。
解决方案:
# 安装散热监控
sudo apt install lm-sensors
# 查看温度
sensors
# 安装散热风扇
# 树莓派4B强烈建议安装主动散热
# 配置CPU频率调节
echo 'performance' | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
深入体验:主动式AI助手的力量
OpenClaw最让我惊喜的,是它的"主动性"。
传统的AI助手
传统的AI助手,是"被动式"的:
- 你问什么,它答什么
- 你不问,它什么都不会做
- 像一个随时待命的仆人
OpenClaw的主动性
OpenClaw的设计理念是"主动式AI助手":
- 它会主动检查系统状态
- 它会主动发送早间简报
- 它会主动执行定时任务
- 像一个积极的队友
实际案例:早间简报
我设置了一个每日早间简报,每天早上8点自动发送到钉钉。内容包括:
- 📝 内容创作进展
- 🚀 工具优化和创新
- 📚 学习进度
- 🔍 行业动态
- 💡 今日建议
每天早上醒来,打开钉钉,就能看到AI助手已经帮我整理好了所有重要信息。这种感觉,真的像有一个"私人助理"在默默为我工作。
树莓派上的优势:
- 7x24小时在线,从不错过任何任务
- 低功耗,一个月电费不到10元
- 体积小,可以放在任何地方
我的思考:树莓派+AI助手的可能性
以前的想法:AI在云端
以前我觉得AI必须在云端运行,因为:
- 云端算力强
- 云端模型大
- 云端更新快
现在的想法:AI也可以在边缘
在树莓派上运行OpenClaw后,我的想法改变了:
AI不是只能在云端,也可以在边缘设备上运行。
优势:
- 数据隐私:所有数据在本地,更安全
- 网络独立:不依赖网络,离线也能用(部分功能)
- 硬件集成:可以直接控制摄像头、蓝牙、GPIO等
- 7x24小时:低功耗,可以一直待命
- 成本可控:一次性购买,没有订阅费用
应用场景
基于树莓派+OpenClaw,可以做很多事情:
- 智能家居控制中心:控制灯光、温度、安防
- 家庭监控:摄像头拍照、异常检测
- 语音助手:通过蓝牙音箱播报信息
- 自动化任务:定时发送邮件、提醒、备份
- 远程监控:通过钉钉随时查看状态
- 学习记录:记录学习进度、生成日报周报
写在最后
这篇文章,记录了我在树莓派上安装和配置OpenClaw的真实过程。
真实体验总结:
- 安装不轻松:踩了不少坑,但都解决了
- 学习曲线陡:需要时间熟悉,但值得
- 功能很强大:超出了我的预期
- 主动性很强:像一个真正的"队友"
- 性能需要优化:树莓派性能有限,需要调整配置
- 硬件集成很有趣:摄像头、蓝牙等,探索空间很大
给想尝试的朋友的建议:
如果你也想在树莓派上玩AI助手,我的建议是:
- 选择合适的设备:树莓派4B(4GB或8GB内存)
- 耐心安装:会遇到各种问题,慢慢解决
- 关注性能:注意内存、CPU、磁盘使用情况
- 发挥硬件优势:摄像头、蓝牙、GPIO都试试
- 记录经验:把踩坑经验记录下来,既帮助自己,也能帮助别人
下一步计划:
- 继续探索OpenClaw的高级功能
- 开发更多自定义技能
- 尝试树莓派+AI的各种组合场景
- 记录完整的智能家居项目
- 分享更多树莓派+AI的实践经验
更多推荐

所有评论(0)