Topics

我不是工程师,但用 Claude Code 和树莓派做了一个 KidsWiFi 管理系统

  • column

大家好!我是兼任设计师和运营经理的小贺。
我是2015年入职的老员工了,平时在简单随笔博客上扮作辣妹,写一些不知道对谁有用的文章。
这次我打算认真一点,聊聊比较正经的话题。

首先说明,我几乎没有任何作为工程师的实际工作经验。
工作中虽然会看到终端,但也只是看看滚动的日志,自己敲命令去做点什么,我一直觉得那是“会的人才做的事”。
没想到这次我居然用 Raspberry Pi 从网络配置一路做到 Web 应用的实现,并且完整做完了。人一旦被逼到份上,意外地还是能动起来的。

起因是孩子的 iPad 问题

我家孩子见到 iPad 就一直玩,放着不管真的没完没了。
所以我首先想解决的就是这个问题。

正好在这个时候,公司下达了一个指令:“像自家的黑客松一样,做点自己喜欢的东西吧。”
我们公司现在正掀起前所未有的 Claude Code 热潮。全体员工都把 Claude 当作搭档,公司里简直就是开发狂欢的状态。我用的是每月 25 美元的套餐,也有人用更高价的套餐玩得很溜,总之大家都充满了“什么都能用 AI 做出来”的干劲。

“一直很向往,想碰碰树莓派(理由嘛,就是感觉很酷)”
“想用工程师的方式解决 iPad 问题”
“想在黑客松上拿出点什么成果”

这三股热情合在一起,就诞生了这个项目:“用手机按一下按钮,就能强制开启或关闭孩子专用 Wi-Fi 的管理系统”。

平时很少看终端,更别说配置设置了,几乎完全没碰过。
就是这样的我,在Claude的帮助下,一边反复折腾、一边摸索,最终做出了这个“魔法盒子”!

Step 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

Step 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 flask

WiFi 的开关其实是一种“只阻断互联网连接”的机制。KidsWiFi 的信号始终在发射,通过名为 iptables 的 Linux 防火墙来切换是否丢弃通往互联网的数据包。写成代码后意外地很简单。

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服务

使用 scp 命令,一次即可将在 Mac 上生成的文件传输到树莓派。

终端(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的问题……其实,目前还没有解决。

系统运行得很顺利。接下来就看我这个当家长的运营情况了吧。我会加油的!

撰写本文的人

居住在福岛,每天与精力过剩的儿子展开攻防战。在发挥美术大学毕业的感性的同时,作为设计师兼运营经理每天奋力拼搏。在育儿中锻炼出的应变能力和反应速度是我的武器。

おが

设计师 / 运营经理

查看此员工的文章

以稳健的团队体制和迅速的应对能力为傲

Liberogic 的资深团队积极推动项目,因此深受客户好评。
我们致力于合理配置项目经理与总监,确保整个项目顺利推进。 我们采用按需投入的方式,避免不必要的全员投入导致成本增加,合理分配资源、人尽其才。同时,我们在掌握业务内容、制作与提交报价方面的速度也广受好评。

※ 当社不积极开展 SES 类驻场业务,敬请谅解。

您可以使用 Slack、Teams、Redmine、Backlog、Asana、Jira、Notion、Google Workspace、Zoom、Webex 等几乎所有主流的项目管理工具和聊天工具。

Web 方面的烦恼,欢迎随时咨询。

案例分析