大家好!我是Oga,一名设计师兼运营经理。
我是一名老兵,2015年加入公司,但我通常在博客上假装自己是女生。一篇益处不明的文章。我有时会写那些东西。
尽管我平时态度冷淡,但这次我会努力认真对待这件事,谈谈一些更严肃的话题。
首先,我几乎没有任何工程师的实际经验。
虽然我有时为了工作会查看终端,但我通常只是浏览一下传入的日志,我一直认为真正输入命令和自己创建东西是“只有有能力的人才能做到的事情”。
然而,我竟然用一台树莓派完成了从网络配置到Web应用程序实现的所有工作……这正好说明,当你被迫去做某件事时,你的能力会出乎意料地强。
导火索是儿童iPad问题。
我的孩子们整天都在玩iPad。如果我让他们自己玩,他们真的没完没了地玩。
所以,这是我首先想着手解决的问题。
就在那时,我收到公司指示,“去做一些你喜欢的事情,比如举办公司黑客马拉松”。
我们公司目前正经历着前所未有的 Claude Code 热潮。每位员工都把 Claude 当作自己的得力助手,整个办公室都沉浸在开发狂热之中。我用的是每月 25 美元的套餐,但也有一些重度用户充分利用了更昂贵的套餐,整个公司都洋溢着“用 AI 创造一切”的热情。
“我一直想试试树莓派(原因很简单,它看起来很酷)。”
“我想从工程学的角度解决 iPad 问题。”
“我希望在这次黑客马拉松中取得一些切实的成果。”
这三种热情结合起来,催生了“通过智能手机上的一个按钮强制打开/关闭儿童 Wi-Fi 的管理系统”项目。
我偶尔会查看终端,但我几乎从不进行任何配置。
在克劳德的帮助下,经过多次尝试和失败,我终于成功制作了这个“魔法盒子”!
步骤 1 — 设置树莓派
使用 Raspberry Pi Imager 进行准备 → SSH 连接
首先,我们来给树莓派 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发射Wi-Fi信号的设备dnsmasq这是为连接的设备分配 IP 地址的设备。
sudo apt install hostapd dnsmasq
请在配置文件中写入 SSID(Wi-Fi 名称)和密码。这次为了方便起见,我将其命名为“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 都会断开。我写了一个 systemd 服务文件,让它在启动时自动运行网络配置。这就是我一边向 Claude 抱怨“为什么连不上了!?”一边解决问题的场景。
当“KidsWiFi”出现在我的智能手机的Wi-Fi列表中,并且我已连接到互联网时,我本能地在聊天中输入了“老师!我已连接!”(我真的输入了)。
步骤 3 — 使用 Web 应用程序创建管理面板
使用 Python 和 Flask 实现可通过智能手机控制的屏幕。
WiFi接入点设置完毕后,下一步是创建一个可以通过智能手机开关的管理界面。我们将使用Python Web框架“Flask”在树莓派上运行Web服务器。首先,我在我的Mac本地环境中开发了Flask,确认其运行正常后,才将其移植到树莓派上。
终端(Mac)— 设置开发环境
python3 -m venv venv
source venv/bin/activate
pip install flask
WiFi 开关实际上只是阻止互联网访问。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死机。我感觉自己获得了某种不可思议的力量(虽然我还没完全掌握它的用法)。
我们在系统中为孩子和家长分别创建了不同的屏幕。
令人惊讶的是,在儿童屏幕上,轮盘赌功能它以“!”为特色。
单方面的时间限制对孩子们来说肯定会很无聊。所以,策略是让他们自己转动轮盘,这样他们会更有成就感。
其理念是将关于何时停止使用 iPad 的通常毫无结果的协商变成一个有趣且令人愉快的游戏,用户可以通过回答“我们今天有多少分钟的 Wi-Fi 时间!”这个问题来表达喜悦或失望。
- 儿童屏幕
→ 在轮盘赌游戏中,你将赢得 30 分钟、45 分钟或 1 小时。
→ 剩余时间倒计时
→时间结束后有1小时冷却时间
→累计使用时间
→显示剩余轮盘旋转次数 - 家长控制面板
→密码保护
→紧急WiFi OFF
→ 作业模式(完全阻塞)
→轮盘赌最大旋转次数
→ 强制关闭时间
→使用历史记录
开发过程中出现了一个问题:“我们无法在 Mac 上进行测试,因为 iptables 不可用。” 我们为 Mac 创建了一个虚拟函数(只是简单地打印一条语句)以便进行测试。
在前进的过程中,我遇到每一个“我卡住了!我该怎么办?”的情况都会向克劳德咨询。
顺便一提,因为我是个设计师,所以原本以为在等待输出结果的时候需要自己调整屏幕布局,但让我有点意外的是,最终的布局出乎意料地简洁明了。我几乎不需要做任何修改。
这有点令人沮丧,但也挺好的。
步骤 4 — 部署到 Raspberry Pi 并自动启动
使用 SCP 传输文件 → 注册为 systemd 服务
将Mac上创建的文件传输到树莓派。scp只需一条命令即可完成。
终端(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 “互动”。
如果程序卡住,只会显示错误信息。如果你问“接下来该怎么做?”,它会列出步骤。如果你问“为什么会发生这种情况?”,它会用简单的语言解释原因。
虽然人们经常谈论工程师使用人工智能来加速开发,但人工智能也可以成为解决我们日常生活中虽小但紧迫问题的终极伙伴。
“一个想法可以成形,超越组织规模和个人技能的限制。”
最大的收获是能够亲身经历制造业的民主化。
至于孩子iPad这个关键问题……事实上,这个问题仍然没有得到解决。
系统运行完美。现在就看我这个家长如何管理了。我会尽我所能!
我住在福岛,每天都要和精力过剩的儿子斗智斗勇。凭借在艺术院校磨练出的艺术天赋,我每天都努力工作,既是设计师又是运营经理。我的优势在于育儿过程中培养出的适应能力和敏捷思维。
奥加
设计师/运营经理