Topics

我不是工程師,但我嘗試用樹莓派製作一個兒童WiFi管理系統。

  • column

大家好!我是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 pi@raspberrypi.local

在航廈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 pi@raspberrypi.local:~/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這個關鍵問題……事實上,這個問題仍然沒有解決。

系統運作完美。現在就看我這個家長如何管理了。我會盡我所能!

撰稿人

我住在福島,每天都要和精力過剩的兒子鬥智。憑藉著在藝術院校磨練出的藝術天賦,我每天都很努力工作,既是設計師又是營運經理。我的優勢在於育兒過程中培養出的適應力和敏捷思維。

奧加

設計師/營運經理

看看這位員工的文章

我們以可靠的團隊結構和快速的回​​應能力而自豪。

在 Liberogic,我們經驗豐富的員工積極推動專案進展,這也是我們深受客戶好評的原因。
我們確保專案經理和主管得到合理分配,以確保整個專案的順利進行。 我們避免因全額承諾而導致不必要的成本增加,並將資源分配給合適的人員和合適的職位,並以快速掌握工作內容、創建和提交預算而聞名。

請注意,我們不積極參與SES式的現場工作。

我們支援幾乎所有主流的專案管理和聊天工具,包括 Slack、Teams、Redmine、Backlog、Asana、Jira、Notion、Google Workspace、Zoom 和 Webex。

如果您有任何與網路相關的問題,請與我們聯絡。

案例研究