大家好!我是设计师兼运营经理小贺。
作为 2015年入职的老员工,平时我在 yuru-log 上变身为辣妹写一些不知道能帮谁的文章。
但这一次,我决定认真一点,谈谈一个相对严肃的话题。
首先说明一下,我几乎没有工程师的实务经验。
虽然在工作中会看到终端,但也只是看看日志流过而已,自己敲命令做点什么这种事我一直以为是「有能力的人才干的」。
这样的我这一次却用树莓派完成了从网络配置到 Web 应用实现的全部工作……。看来人在被逼到份上时,确实能做出意想不到的事情。
起因是孩子的 iPad 问题
我家孩子特别喜欢玩 iPad,一放他自己玩就没完没了。
所以首先我想解决这个问题。
恰好这个时候,公司发出了「自己组织黑客松,做点喜欢的东西吧」的号召。
我们公司现在正陷入空前的 Claude Code 热潮。全员都把 Claude 当成了开发搭档,公司里俨然成了一场开发盛宴。我用的是月费 25 美元的套餐,但还有人用更高级的套餐,大家都被「用 AI 什么都能做」的热情所鼓舞。
「一直憧憬想玩树莓派(理由就是觉得很酷)」
「想从工程师的角度解决 iPad 问题」
「想在黑客松上拿出成果」
这三股热情合体炸裂,诞生了「只需按手机按钮,就能强制开启/关闭儿童 WiFi 的管理系统」项目。
虽然平时会看看终端,但配置设置什么的我基本不会。
就这样我在 Claude 的帮助下,反复尝试,最终完成了这个「魔法盒子」的制作!
第 1 步 — 树莓派设置
使用 Raspberry Pi Imager 准备 → SSH 连接
首先需要在 Raspberry Pi 4 上安装操作系统。在 Mac 上安装 Raspberry Pi Imager(官方写入工具),然后将 64 位操作系统写入 MicroSD 卡。在写入设置中启用 SSH 功能是容易被忽视但很重要的一步。
用网线将树莓派连接到路由器并打开电源后,只需从 Mac 的终端就能连接。
terminal (Mac)
ssh [email protected]当终端中出现pi@raspberrypi:~ $的那一刻,我有点激动。首先我会更新一下系统。
sudo apt update && sudo apt upgrade -y第 2 步 — 设置 WiFi 接入点
hostapd / dnsmasq / iptables 的配置
要让树莓派充当"WiFi接入点",需要安装两个软件。hostapd是用来发送WiFi信号的,dnsmasq是用来为连接的设备分配IP地址的。
sudo apt install hostapd dnsmasq
在配置文件中写入SSID(WiFi的名称)和密码。这次我们为了便于理解,将其设置为"KidsWiFi"。
/etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=KidsWiFi
hw_mode=g
channel=7
wpa=2
wpa_passphrase=(パスワード)
wpa_key_mgmt=WPA-PSK接下来,指定要分配给已连接设备的 IP 地址范围。
/etc/dnsmasq.conf
interface=wlan0
dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h最后,我们需要配置 IP 转发和 NAT,以便树莓派能够充当互联网的中继。如果不进行此配置,连接到 KidsWiFi 后将无法访问互联网。
# IPフォワーディングを永続化
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/routed-ap.conf
# NATの設定(eth0経由でインターネットに出られるようにする)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE每次重启时 wlan0 都会 DOWN 的问题不断发生。我编写了 systemd 服务文件,使启动时能自动运行网络配置。这是一个在向 Claude 哭诉"为什么又连不上了!?"而解决的场景。
当在手机的WiFi列表中看到"KidsWiFi"并成功连接网络时,我情不自禁地在聊天中打出"老师!连上了!"(我是认真打的)。
第3步——在Web应用中创建管理界面
使用 Python + Flask 实现可在手机上操作的界面
WiFi接入点已经完成,接下来是一个可以从智能手机上控制开关的管理界面。我使用Python的Web框架「Flask」,在树莓派上运行Web服务器。工作流程是先在Mac的本地环境中开发,确认功能正常运行后,再将代码转移到树莓派上。
terminal (Mac) — 开发环境准备
python3 -m venv venv
source venv/bin/activate
pip install flaskWiFi 的开关实际上只是"阻止与互联网的连接"这样一种机制。KidsWiFi 的信号始终发出,通过 Linux 防火墙工具 iptables 来切换是否丢弃互联网数据包。用代码表示的话意外地很简洁。
app.py(摘录)— WiFi 控制的核心部分
import subprocess
def enable_internet():
# ブロックルールを削除 → インターネット解放
subprocess.run([
'sudo', 'iptables', '-D', 'FORWARD',
'-i', 'wlan0', '-j', 'DROP'
], capture_output=True)
def disable_internet():
# ブロックルールを追加 → インターネット遮断
subprocess.run([
'sudo', 'iptables', '-I', 'FORWARD',
'-i', 'wlan0', '-j', 'DROP'
], capture_output=True)就这样网络停了。一行命令就能让孩子的iPad断网。感觉自己掌握了某种很强大的力量(虽然还没有充分利用好)。
系统界面分别为儿童端和家长端设计。
儿童端配备了令人惊喜的转盘功能!
单方面的时间限制对孩子来说肯定也不有趣。既然如此,如果是孩子自己转转盘得出的结果,他们应该会欣然接受吧?这就是我们的策略。
"今天的Wi-Fi时间是多少分钟呀!?"孩子们会像玩游戏一样为结果欢欣雀跃。这是我们将容易陷入僵局的"iPad该怎么关"协商,转变为一种稍微轻松愉快的游戏互动的巧妙设计。
- 儿童屏幕
→转盘随机获得 30 分钟、45 分钟或 1 小时。
→倒计时剩余时间
→时间到后冷却 1 小时
→显示累计使用时长
→显示剩余转盘次数 - 父母仪表板
→密码保护
→紧急WiFi关闭
→作业模式(完全阻断)
→转盘旋转次数限制
→强制关机时间
→使用历史日志
在开发中遇到了"Mac上没有iptables,无法测试"的问题。我们为Mac准备了一个虚拟函数(只输出print语句),这样就可以进行功能验证。
这些"卡住了!怎么办!"的问题都通过与Claude咨询来推进的。
顺便说一下,虽然我是设计师,所以一开始以为"可能需要自己调整界面布局",但输出的结果超乎意料地排版整洁,我有点大跌眼镜。基本上没怎么需要手动修改。
这让我有点既遗憾又高兴。
步骤 4 — 部署到树莓派并自动启动
通过 SCP 传输文件 → 注册 systemd 服务
将在 Mac 上完成的文件传输到树莓派。用 scp 命令一键搞定。
Terminal (Mac) — 转移到树莓派
scp -r templates app.py [email protected]:~/wifi-manager/每次重启都要手动启动 Flask 太麻烦了,所以我写了 systemd 服务文件来实现自动启动。目标是让系统一开机就能自动运行所有内容。
/etc/systemd/system/wifi-manager.service
[Unit]
Description=WiFi Manager
After=network.target wifi-setup.service
[Service]
ExecStartPre=/bin/bash -c 'echo > /home/pi/wifi-manager/state.json'
ExecStartPre=iptables -F FORWARD
ExecStart=/usr/bin/python3 /home/pi/wifi-manager/app.py
WorkingDirectory=/home/pi/wifi-manager
Restart=always
User=root
[Install]
WantedBy=multi-user.target# サービスを有効化して起動
sudo systemctl enable wifi-manager
sudo systemctl start wifi-manager现在只需打开电源,一切就会运行。从手机浏览器访问 http://192.168.4.1:5000 就能打开转盘界面。太厉害了,真的成功了。
我做过的实践感悟
作为一名非工程师,我能够从网络配置一直完成到 Python,这绝对是因为能够与 Claude 进行「对话」式的交互。
遇到问题就直接丢错误。问"接下来要做什么?"它就列出步骤。问"为什么会这样?"它就用易懂的方式解释。
虽然外界有很多"工程师用AI实现极速开发"这样的说法,但AI也能成为解决个人生活中那些微小但又确实困扰我们的问题的最强搭档。
"浮现在脑海中的想法可以跨越组织规模和个人技能的限制而变成现实"
这样的制造民主化体验本身,就是最大的收获。
话说回来,关键的孩子iPad问题实际上……还没有解决。
系统运行得很好。接下来就靠我这个管理员的运维了。我会加油的!
居住在福岛,每天都在与精力旺盛的儿子展开"攻防战"。作为设计师兼运营经理,他充分发挥美术大学毕业的审美眼光,日夜辛勤工作。在育儿中磨练出的应对能力和反应速度是他的必杀技。
木屑
设计师 / 运营经理