Topics

我不是工程師,但我用 Claude Code 和樹莓派做了個 KidsWiFi 管理系統

  • column

大家好!我是設計師兼營運經理小Oga。
我是 2015年入社的老前輩,平時在 Yuru Log 上擬態成辣妹,寫一些不知道有什麼用途的文章
但這次我決定認真一點,跟大家分享一個稍微比較正經的話題。

首先要說明的是,我在工程師實務上的經驗幾乎是零。
即使工作中會看到終端機,也只是看著日誌流過去,從來沒有自己執行命令創作什麼。我當時覺得那種事「是有本事的人才能做的」。
結果這次我竟然用樹莓派從網路配置到 Web 應用實裝全部搞定了……。人在被逼的時候,意外地很有行動力呢。

契機是孩子的 iPad 問題

我家孩子超愛玩 iPad,放著不管根本停不下來。
所以首先我想解決這個問題。

正好在那時候,公司下達了「公司內部駭客松,試試看做自己想要的東西」的指令。
我們公司現在正流行 Claude Code 熱潮。全體員工都以 Claude 為夥伴,公司內儼然成了開發祭典狀態。我是月費 25 美元的方案,但也有人用更高級的方案實力超群,總之整個公司充滿著「用 AI 什麼都做得出來」的活力。

「一直憧憬想要試試樹莓派(理由就是單純覺得看起來很酷)」
「想用工程師的方式解決 iPad 問題」
「想在駭客松中交出什麼成果」

這 3 股熱情合體而誕生的,就是「只要按智慧型手機上的按鈕,就能強制啟閉兒童用 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 哭訴「為什麼又連不上!?」一邊解決問題的場景。

當「KidsWiFi」出現在手機 WiFi 清單中並成功連線時,我忍不住在聊天裡打了「老師!連上了!」(是真的打了)。

第 3 步 — 用 Web 應用程式建立管理頁面

使用 Python + Flask 實現可從手機操作的頁面

既然已經有了 WiFi 存取點,接下來就是製作可以從手機打開/關閉的管理頁面。我使用 Python 的 Web 框架「Flask」,在樹莓派上執行 Web 伺服器。首先在 Mac 的本地環境中開發並確認能正常運作,然後再轉移到樹莓派上。

終端機 (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 停用。感覺自己獲得了某種驚人的力量(只是還不太會用)。

系統的頁面分別為孩童版本和家長版本製作。
孩童用的頁面搭載了「轉盤功能」!
單方面的時間限制對孩子來說也沒意思。那麼,如果是自己轉出來的轉盤結果,應該會比較容易接受吧?這就是我的策略。
讓孩子像玩遊戲一樣為「今天的 Wi-Fi 時間是幾分鐘!?」一喜一憂。這是把容易陷入無聊的「iPad 何時要停用」談判,轉變成稍微更開心的遊戲的巧妙設計。

  • 兒童螢幕
    →透過轉盤抽籤獲得30分、45分或1小時的使用時間
    →剩餘時間倒數計時
    →時間到後進行1小時冷卻期
    →累計使用時間
    →顯示剩餘轉盤次數
  • 家長儀表板
    →密碼保護
    →緊急WiFi關閉
    →功課模式(完全限制)
    →轉盤次數上限
    →強制關閉時間
    →使用紀錄日誌

開發過程中遇到「Mac上沒有iptables,無法測試」的問題。我們為Mac準備了一個模擬函數(只輸出print語句),這樣就能進行功能驗證。
這些「卡住了!怎麼辦!」的問題,我全都邊諮詢Claude邊進行開發。

話說回來,我本身是設計師,所以開始等待輸出結果時,心想「看來得自己調整螢幕布局了」。結果沒想到輸出的布局出奇地整潔,讓我有點意外。基本上幾乎沒有進行修改。
這讓我有點既遺憾又開心。

步驟4——部署至樹莓派並設定自動啟動

透過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 對話邊推進。
遇到卡關就直接丟出錯誤訊息,問「接下來該怎麼做?」就會列出步驟,問「為什麼會這樣?」就會用淺顯易懂的方式解釋。

世上雖然常聽聞「工程師用 AI 爆速開發」的說法,但 AI 其實也是解決日常生活中那些微小卻迫切煩惱的最強夥伴。

「突發奇想的創意,超越了組織規模和個人技能而真實成形」
能夠親身感受到這樣的造物民主化,是最大的收穫。

說到重點的孩子 iPad 問題……其實還沒解決呢。

系統運作得很順利。剩下就看我這個家長的運用能力了呢,加油!

本文作者

住在福島,每天與過度活潑的兒子展開攻防戰。以美術大學出身的美感為武器,一邊從事設計師兼營運經理的工作。育兒鍛鍊出的應變力和瞬間判斷力是我的利器。

小賀

設計師/營運經理

查看此員工的文章

信心十足的團隊體制與迅速的應對能力是我們的優勢

Liberogic 擁有經驗豐富的人員積極推進專案,因而獲得客戶的高度評價。
我們恰當地安排專案經理和總監,致力於順利推進整個專案。 我們避免不必要的全面投入而導致成本增加,而是採用適材適所配置資源的方式,因此在業務把握到估價制作與提交的速度上也備受好評。

請注意,我們不積極進行 SES 形式的駐場業務。

Slack、Teams、Redmine、Backlog、Asana、Jira、Notion、Google Workspace、Zoom、Webex 等幾乎所有主要的專案管理工具和聊天工具都可供您使用。

請諮詢我們解決您的網站問題。

案例分析