Saját AI Raspberry Pi-on – teljes útmutató nullától a működő modellig
Ebben az útmutatóban pontosan ugyanazt a fényállapot-felismerő AI-projektet valósítjuk meg, mint az ESP32-S3-as testvércikkben. A különbség: a Raspberry Pi teljes Linux számítógép, ezért maga is képes a Python-modell tanítására és futtatására.
1. Alkatrészlista
| Alkatrész | Mennyiség | Feladat |
| Raspberry Pi 4 vagy Pi 5 | 1 db | Adatgyűjtés, modell tanítása és inferencia |
| BH1750 I²C fényérzékelő modul | 1 db | Luxérték mérése |
| microSD és Raspberry Pi OS | 1 db | Operációs rendszer |
| A Pi-hoz megfelelő USB-C táp | 1 db | Stabil működés |
| Breadboard és 4 jumper kábel | 1 készlet | Bekötés |
| Kijelző/billentyűzet vagy SSH elérés | opcionális | A terminál eléréséhez |
Raspberry Pi Zero 2 W-vel is kipróbálható, de a modell telepítése és a csomagok kezelése lassabb lehet. A BH1750 digitális I²C szenzor, így nincs szükség külön ADC-chipre.
2. Bekötés és biztonság
Áramtalanított Pi-n végezd a bekötést:
- BH1750 VCC → Raspberry Pi 3V3 (fizikai 1-es pin).
- BH1750 GND → GND (fizikai 6-os pin).
- BH1750 SDA → GPIO2 / SDA1 (fizikai 3-as pin).
- BH1750 SCL → GPIO3 / SCL1 (fizikai 5-ös pin).
Soha ne köss 5 V-os jelet közvetlenül a Pi 3,3 V-os GPIO-jaira.
3. Raspberry Pi OS beállítása
Telepítsd a Raspberry Pi OS-t a Raspberry Pi Imagerrel, indítsd a Pi-t, majd a terminálban engedélyezd az I²C-t:
sudo raspi-config
Az Interface Options → I2C menüben válaszd az engedélyezést. Ezután:
sudo apt update
sudo apt install -y python3-venv python3-pip i2c-tools
sudo reboot
Újraindítás után ellenőrizd a szenzort:
sudo i2cdetect -y 1
A BH1750 általában 23 címen jelenik meg (esetenként 5c). Ha nincs ott, ellenőrizd a vezetékezést.
4. Python-környezet
mkdir ~/light-ai && cd ~/light-ai
python3 -m venv .venv
source .venv/bin/activate
pip install smbus2 pandas scikit-learn joblib
A virtual environment nem szükséges a Linux működéséhez, de elkülöníti a projekt függőségeit, és elkerüli a rendszer Python-csomagjaival való ütközést.
5. Szenzoradatok gyűjtése
Hozz létre egy collect.py fájlt:
import csv, sys, time
from smbus2 import SMBus
label = int(sys.argv[1]) # 0 = dark; 1 = bright
assert label in (0, 1)
BH1750 = 0x23
MODE = 0x10 # Continuous H-resolution
with SMBus(1) as bus, open(
"measurements.csv", "a", newline="", encoding="utf-8"
) as file:
bus.write_byte(BH1750, MODE)
time.sleep(0.2)
writer = csv.writer(file)
if file.tell() == 0:
writer.writerow(["lux", "label"])
for _ in range(100):
data = bus.read_i2c_block_data(BH1750, MODE, 2)
raw = (data[0] << 8) | data[1]
lux = raw / 1.2
writer.writerow([round(lux, 2), label])
print("lux:", round(lux, 2), "label:", label)
time.sleep(0.2)
Először helyezd sötétbe a szenzort:
python collect.py 0
Utána világos környezetben:
python collect.py 1
Így legalább 200 címkézett mintát kapsz. Több helyszínen is gyűjts méréseket: például beltéri világítás, nappali fény és félhomály. Ne keverd össze a címkéket, mert akkor a modell rossz kapcsolatot tanul.
6. Taníts saját modellt a Raspberry Pi-on
A train.py fájl:
import pandas as pd
import joblib
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
df = pd.read_csv("measurements.csv")
X = df[["lux"]]
y = df["label"].astype(int)
assert len(df) >= 20 and set(y.unique()) == {0, 1}
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42, stratify=y
)
model = DecisionTreeClassifier(max_depth=1, random_state=42)
model.fit(X_train, y_train)
print(classification_report(y_test, model.predict(X_test),
zero_division=0))
joblib.dump(model, "model.joblib")
print("A modell elmentve: model.joblib")
Majd:
python train.py
Itt a Pi maga végzi a tanítást. A tesztadat a CSV egy véletlenszerű része, ezért a végső ellenőrzéshez mérj új mintákat más körülmények között is. A joblib modellfájlt csak saját, megbízható forrásból töltsd be.
7. Futtasd helyben, internet nélkül
Készíts run.py fájlt:
import time, joblib, pandas as pd
from smbus2 import SMBus
model = joblib.load("model.joblib")
BH1750 = 0x23
MODE = 0x10
with SMBus(1) as bus:
bus.write_byte(BH1750, MODE)
time.sleep(0.2)
while True:
data = bus.read_i2c_block_data(BH1750, MODE, 2)
lux = ((data[0] << 8) | data[1]) / 1.2
X = pd.DataFrame({"lux": [lux]})
prediction = int(model.predict(X)[0])
print(f"{lux:.1f} lux -> " +
("VILÁGOS" if prediction == 1 else "SÖTÉT"))
time.sleep(0.5)
Futtasd:
python run.py
Most kapcsolgasd a lámpát vagy változtasd a fényt. A Raspberry Pi valós időben olvassa az érzékelőt és a saját betanított modelleddel osztályoz. A futtatáshoz nem kell internet.
8. Hibakeresés
OSError: Remote I/O error: hibás I²C bekötés, cím vagy tápellátás.- A
piptelepítés hibát ad: aktív virtuális környezetben próbáld újra; Pi OS verziótól függően egyes csomagok telepítése időigényes. - Mindig ugyanazt a címkét adja: nézd meg a CSV-t és a szenzorértékeket; mérj változatosabb fényviszonyok között.
- Lassú a modell tanítása: ehhez az egyváltozós fához kevés adat elegendő. Komplexebb modelleknél a Pi 4/5 RAM-ja és CPU-ja korlát lehet.
9. ESP32 vagy Raspberry Pi?
| Szempont | ESP32-S3 | Raspberry Pi |
| Teljes Linux | Nem | Igen |
| Betanítás a készüléken | Nem praktikus | Lehetséges |
| Kicsi, akkumulátoros eszköz | Előnyös | Nagyobb fogyasztás |
| Komplexebb modellek | Erősen korlátozott | Több lehetőség |
| Az itt bemutatott AI | C++ küszöbmodell | Python scikit-learn modell |
Testvércikk: ESP32-S3 saját AI: alkatrészek, tanítás és telepítés.