Topics

就算不是工程師,我也用 Claude Code 和 Raspberry Pi 做出了 KidsWiFi 管理系統

  • column

大家好!我是兼任設計師與營運經理的小緒。
我是 2015 年入職的老鳥了,平常在輕鬆部落格裡偽裝成辣妹,寫一些不知道對誰有幫助的文章。
不過這次我打起精神,想來聊一點認真的話題。

先說明一下,我幾乎沒有工程師的實務經驗。
工作上雖然會看到終端機,但也只是看著流過的日誌,總覺得自己敲指令做東西是「會的人才做的事」。
沒想到這次我竟然從網路架構一路做到網頁應用程式的實作,完整做完了 Raspberry Pi 的專案。人在被逼到需要的時候,意外地還是能動起來呢。

起因是孩子的 iPad 問題

我家的孩子總是拚命玩 iPad,放著不管的話真的沒完沒了。
所以,我首先想解決的就是這個問題。

就在這個時候,公司發出了「像公司內部黑客松一樣,做點你喜歡的東西看看」的指示。
公司現在正掀起前所未有的 Claude Code 熱潮。所有員工都把 Claude 當作夥伴,公司內部簡直像是開發的慶典。我使用的是每月 25 美元的方案,但也有人駕馭更高階的方案,總之整間公司充滿了「用 AI 什麼都能做出來」的活力。

「一直很嚮往,想摸摸看 Raspberry Pi(理由只是隱約覺得很酷)」
「想用工程師的方式解決 iPad 問題」
「想在黑客松做出某種成果」

這三股熱情匯聚在一起,誕生了「只要用智慧型手機按一個按鈕,就能強制開啟或關閉孩子用 Wi-Fi 的管理系統」專案。

我平常會看終端機,但幾乎沒有自己設定過。
在 Claude 的協助下,我一邊反覆嘗試、一邊完成了這個「魔法箱」的製作!

Step 1 — 樹莓派的設定

使用 Raspberry Pi Imager 準備 → SSH 連線

首先要在 Raspberry Pi 4 上安裝作業系統。先在 Mac 上安裝 Raspberry Pi Imager(官方燒錄工具),再將 64 位元 OS 寫入 MicroSD 卡。燒錄設定中啟用 SSH 雖然不起眼,但非常重要。

用 LAN 網路線將樹莓派連接到路由器並開機後,只要在 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」並成功連上網路時,我忍不住在聊天室打出「老師!連上了!」(真的打了出來)。

Step 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 的訊號一直都有發送,而是透過 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 討論一邊推進的。

順帶一提,我其實算是設計師,所以原本等輸出時還在想「畫面版面是不是得自己排好才行」,結果輸出的版面意外地很整齊,讓我有點出乎意料。幾乎不需要修改就搞定了。
這點有點不甘心,又有點開心。

Step 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 問題呢……老實說,還沒有解決。

系統運作得很順利。接下來就看身為家長的我怎麼管理了吧。我會加油的!

關於撰寫本文的人

住在福島,每天都和活力十足的兒子展開攻防戰。一邊發揮美術大學畢業的感性,一邊以設計師兼營運經理的身分每天奮鬥。在育兒中鍛鍊出的應變能力與反應速度是我的武器。

おが

設計師 / 營運經理

查看此員工的文章

我們的優勢在於穩健的團隊體制與快速的應對能力

Liberogic 由經驗豐富的資深人員積極推動專案,因此獲得客戶的高度評價。
我們會妥善指派專案經理與總監,致力於順利推進整體專案。 我們採取依據專案需求適才適所分配資源的方式,避免因全程投入而增加不必要的成本,並且在掌握業務內容、製作與提交估價方面的速度也廣受好評。

注: 本公司不積極承接類似 SES 的駐點業務等,敬請事先諒解。

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

歡迎諮詢您的 Web 相關問題。

案例分析