Topics

Ik ben geen ingenieur, maar ik heb geprobeerd een KidsWiFi-beheersysteem te maken met een Raspberry Pi.

  • column

Hallo! Ik ben Oga, een ontwerper en operationeel manager.
Ik ben een veteraan die in 2015 bij het bedrijf is komen werken, maar op mijn blog doe ik me meestal voor als een vrouw.Een artikel waarvan het nut onduidelijk is.Ik schrijf die soms.
Ondanks mijn gebruikelijke houding ga ik deze keer mijn best doen en het over iets serieuzers hebben.

Om te beginnen heb ik vrijwel geen praktische ervaring als ingenieur.
Hoewel ik voor mijn werk soms wel eens naar de terminal kijk, bekijk ik meestal alleen even de logs die binnenkomen. Ik heb altijd gedacht dat het typen van commando's en het zelf creëren van iets iets was "alleen voor degenen die er echt toe in staat zijn".
En toch lukte het me om alles te voltooien, van netwerkconfiguratie tot de implementatie van een webapplicatie, met behulp van een Raspberry Pi... Het bewijst maar weer dat je verrassend veel kunt bereiken als je ergens toe gedwongen wordt.

De aanleiding was de kwestie van de iPads voor kinderen.

Mijn kinderen zitten constant op de iPad. Als ik ze alleen laat, houdt het echt niet op.
Dat was dus het eerste waar ik iets aan wilde doen.

Precies op dat moment kreeg ik van het bedrijf de opdracht om "iets te creëren wat je leuk vindt, zoals een hackathon voor het bedrijf."
Ons bedrijf beleeft momenteel een ongekende Claude Code-hausse. Iedere medewerker gebruikt Claude als partner en het kantoor is in een ontwikkelingsrazernij. Ik heb het abonnement van $25 per maand, maar er zijn een aantal fanatieke gebruikers die volop gebruikmaken van nog duurdere abonnementen, en de hele organisatie bruist van de energie om "alles te creëren met AI".

"Ik heb altijd al een Raspberry Pi willen uitproberen (omdat het me gewoon gaaf lijkt)."
"Ik wil het iPad-probleem vanuit een technisch perspectief oplossen."
"Ik wil tijdens de hackathon een concreet resultaat behalen."

Deze drie passies kwamen samen in het project "Beheersysteem waarmee je de wifi van kinderen met één druk op de knop op je smartphone kunt in- en uitschakelen".

Ik kijk wel eens naar de terminal, maar ik configureer vrijwel nooit iets.
Met de hulp van Claude, en na veel vallen en opstaan, is het me eindelijk gelukt om deze "magische doos" te maken!

Stap 1 — De Raspberry Pi instellen

Voorbereiding met Raspberry Pi Imager → SSH-verbinding

Laten we eerst het besturingssysteem op de Raspberry Pi 4 installeren. Installeer Raspberry Pi Imager (de officiële flashtool) op je Mac en flash het 64-bits besturingssysteem naar de microSD-kaart. Het is verrassend belangrijk om SSH in te schakelen in de flashinstellingen.

Nadat je de Raspberry Pi met een LAN-kabel op de router hebt aangesloten en hem hebt ingeschakeld, kun je hem verbinden met behulp van dit commando in de terminal van de Mac.

terminal (Mac)

ssh [email protected]

Bij de terminalpi@raspberrypi:~ $Ik was een beetje ontroerd toen het verscheen. Eerst zal ik het systeem bijwerken.

sudo apt update && sudo apt upgrade -y

Stap 2 — Stel een wifi-toegangspunt in

hostapd / dnsmasq / iptables configuratie

Om de Raspberry Pi als "wifi-toegangspunt" te gebruiken, moet je twee softwareprogramma's installeren.hostapdHet apparaat dat wifi-signalen uitzendt,dnsmasqDit is het apparaat dat IP-adressen toewijst aan de aangesloten apparaten.

sudo apt install hostapd dnsmasq

Schrijf de SSID (Wi-Fi-naam) en het wachtwoord in het configuratiebestand. Voor de duidelijkheid heb ik het deze keer "KidsWiFi" genoemd.

/etc/hostapd/hostapd.conf

interface=wlan0
driver=nl80211
ssid=KidsWiFi
hw_mode=g
channel=7
wpa=2
wpa_passphrase=(wachtwoord)
wpa_key_mgmt=WPA-PSK

Vervolgens specificeert u het bereik van IP-adressen dat aan de aangesloten apparaten moet worden toegewezen.

/etc/dnsmasq.conf

interface=wlan0
dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h

Tot slot configureren we IP-forwarding en NAT zodat de Raspberry Pi als internetrelais kan fungeren. Als je dit niet doet, kun je geen toegang tot internet krijgen, zelfs niet als je verbinding maakt met KidsWiFi.

# Maak IP-forwarding permanent
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/routed-ap.conf

# Configureer NAT (om internettoegang via eth0 toe te staan)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Ik stuitte op een probleem waarbij wlan0 elke keer dat het systeem opnieuw opstartte, de verbinding verbrak. Ik schreef een systemd-servicebestand om de netwerkconfiguratie automatisch uit te voeren bij het opstarten. Dit is de scène waarin ik het probleem oploste, terwijl ik tegen Claude klaagde: "Waarom maakt hij nu geen verbinding meer!?"

Toen "KidsWiFi" in de wifi-lijst van mijn smartphone verscheen en ik verbonden was met internet, typte ik instinctief "Juf! Ik ben verbonden!" in de chat (ik heb het echt getypt).

Stap 3 — Maak een beheerderspaneel met behulp van een webapplicatie.

Ontwikkel een scherm dat met een smartphone te bedienen is, met behulp van Python en Flask.

Nu het wifi-toegangspunt is ingesteld, is de volgende stap het maken van een beheerscherm dat via een smartphone kan worden in- en uitgeschakeld. We gebruiken het Python-webframework "Flask" om een ​​webserver op de Raspberry Pi te draaien. Eerst heb ik het lokaal op mijn Mac ontwikkeld, gecontroleerd of het werkte en het vervolgens naar de Raspberry Pi overgezet.

Terminal (Mac) — De ontwikkelomgeving instellen

python3 -m venv venv
source venv/bin/activate
pip install flask

De wifi-aan/uit-schakelaar blokkeert in feite alleen de internettoegang. KidsWiFi zendt continu een signaal uit en iptables, een Linux-firewall, schakelt of pakketten bestemd voor het internet al dan niet worden geblokkeerd. De code is verrassend eenvoudig.

app.py (fragment) — De kern van wifi-besturing

import subprocess
def enable_internet():
# Blokkeerregel verwijderen → Internet openen
subprocess.run([
'sudo', 'iptables', '-D', 'FORWARD',
'-i', 'wlan0', '-j', 'DROP'

], capture_output=True)

def disable_internet():
# Blokkeerregel toevoegen → Internet blokkeren
subprocess.run([
'sudo', 'iptables', '-I', 'FORWARD',
'-i', 'wlan0', '-j', 'DROP'

], capture_output=True)

Dit alleen al verbreekt de internetverbinding. Eén commandoregel is genoeg om de iPad van mijn kind te laten vastlopen. Ik had het gevoel dat ik een ongelooflijke macht had gekregen (hoewel ik het gebruik ervan nog niet helemaal onder de knie heb).

We hebben in het systeem aparte schermen gemaakt voor het kind en de ouder.
Verrassend genoeg was het te zien op het kinderscherm.Roulette-functieHet bevat ''!
Een tijdslimiet die maar voor één kant geldt, is voor kinderen al snel saai. De strategie is daarom dat ze meer plezier beleven als ze zelf aan het roulettewiel mogen draaien.
Het idee is om de vaak vruchteloze discussie over wanneer te stoppen met het gebruik van de iPad om te zetten in een leuk en plezierig spel, waarbij gebruikers met blijdschap of teleurstelling reageren op de vraag: "Hoeveel minuten wifi-tijd hebben we vandaag nog!?"

  • Kinderscherm
    → Je wint 30 minuten, 45 minuten of 1 uur in een roulettespel.
    → Aftellen van de resterende tijd
    →1 uur afkoeltijd nadat de tijd is verstreken
    →Cumulatieve gebruikstijd
    →Toon resterende roulettespins
  • Ouderdashboard
    →Wachtwoordbeveiliging
    →Nood-wifi UIT
    → Huiswerkmodus (volledige blokkering)
    →Maximaal aantal roulettespins
    → Gedwongen UIT-tijd
    →Gebruiksgeschiedenislogboek

Tijdens de ontwikkeling ontstond er een probleem: "We kunnen het niet testen op Mac omdat iptables niet beschikbaar is." We hebben een dummyfunctie (die simpelweg een statement afdrukt) voor Mac gemaakt om testen mogelijk te maken.
Ik heb Claude over al deze "Ik zit vast! Wat moet ik doen?"-situaties geraadpleegd terwijl we bezig waren.

Overigens, aangezien ik ontwerper ben, had ik verwacht dat ik de schermindeling zelf zou moeten aanpassen terwijl ik op het eindresultaat wachtte, maar ik was enigszins verrast dat het er verrassend overzichtelijk uitzag. Ik hoefde nauwelijks correcties aan te brengen.
Dit is een beetje frustrerend, maar ergens ook wel fijn.

Stap 4 — Implementeer op Raspberry Pi en automatiseer de opstartprocedure

Bestanden overdragen met SCP → Registreren als een systemd-service

Zet de op de Mac gemaakte bestanden over naar de Raspberry Pi.scpHet kan met één commando.

Terminal (Mac) — Overdracht naar Raspberry Pi

scp -r templates app.py [email protected]:~/wifi-manager/

Het handmatig starten van Flask elke keer dat ik de computer opnieuw opstart is vervelend, dus ik ga een systemd-servicebestand schrijven om het opstarten te automatiseren. Het doel is dat alles automatisch start wanneer ik de computer aanzet.

/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
# De service inschakelen en starten
sudo systemctl enable wifi-manager
sudo systemctl start wifi-manager

Nu is het klaar voor gebruik, je hoeft het alleen maar aan te zetten. Als je http://192.168.4.1:5000 opent via de browser van je smartphone, verschijnt het roulettescherm. Wauw, het werkt echt!

Dingen die ik dacht nadat ik het had geprobeerd.

De reden dat ik, als niet-ingenieur, alles heb kunnen voltooien, van netwerkconfiguratie tot Python, is ongetwijfeld te danken aan de interactie met Claude gedurende het hele proces.
Als het vastloopt, geeft het gewoon een foutmelding. Als je vraagt: "Wat moet ik nu doen?", worden de stappen opgesomd. Als je vraagt: "Waarom gebeurt dit?", wordt het in eenvoudige bewoordingen uitgelegd.

Hoewel er veel gesproken wordt over ingenieurs die AI gebruiken om de ontwikkeling te versnellen, kan AI ook de ultieme partner zijn voor het oplossen van kleine, maar dringende problemen in ons dagelijks leven.

"Een idee kan vorm krijgen, ongeacht de omvang van de organisatie of de vaardigheden van het individu."
De grootste beloning was dat ik de democratisering van de maakindustrie zelf kon meemaken.

Wat betreft de cruciale kwestie van de iPad van het kind... de waarheid is dat die nog steeds niet is opgelost.

Het systeem werkt perfect. Nu is het aan mij, de ouder, om het te beheren. Ik zal mijn best doen!

Geschreven door

Ik woon in Fukushima en voer dagelijks een strijd met mijn overactieve zoon. Dankzij mijn artistieke aanleg, opgedaan aan de kunstacademie, zet ik me elke dag in als ontwerper en operationeel manager. Mijn sterke punten liggen in mijn aanpassingsvermogen en snelle denkvermogen, die ik heb ontwikkeld door het ouderschap.

Oga

Ontwerper / Operations Manager

Bekijk het artikel van deze medewerker

Wij zijn trots op onze betrouwbare teamstructuur en snelle reactiemogelijkheden.

Bij Liberogic zorgen onze ervaren medewerkers ervoor dat projecten succesvol worden afgerond, en daarom staan ​​onze klanten zo hoog aangeschreven.
Wij zorgen ervoor dat projectmanagers en directeuren correct worden toegewezen om een ​​soepel verloop van het gehele project te garanderen. Wij voorkomen onnodige kostenstijgingen door volledige toezeggingen en wijzen middelen toe aan de juiste mensen op de juiste plaatsen. Bovendien staan ​​we bekend om de snelheid waarmee we de inhoud van het werk begrijpen en offertes opstellen en indienen.

Houd er rekening mee dat we niet actief betrokken zijn bij SES-achtige werkzaamheden op locatie.

We ondersteunen bijna alle belangrijke projectmanagement- en chattools, waaronder Slack, Teams, Redmine, Backlog, Asana, Jira, Notion, Google Workspace, Zoom en Webex.

Neem gerust contact met ons op als u vragen heeft over het web.

Casestudy