ラズパイ入門まとめ:SQLite センサーロガー & Flask センサーAPI
Raspberry Pi の定番テーマを、実際にコードを動かしながらまとめて解説します。この記事では SQLite センサーロガー/Flask センサーAPI の2テーマを扱います。
各テーマは ブラウザ上の仮想Raspberry Piシミュレーターで、コードを編集しながら自分で動かせます。
1. SQLite センサーロガー
概要
温度を実時間でSQLiteに記録。テーブルが増えていき、集計も更新される。ブラウザ上の仮想Raspberry Piで、実際にコードを動かしながら挙動を確認できます。
プログラムの内容(ざっくり)
温度を1秒ごとにSQLiteのreadingsテーブルへINSERTし、件数と平均を集計しながらロギングします。
# === SQLite センサーロガー ===
# 温度を1秒ごとにDBへINSERTし、件数と平均を集計する。
# db は接続済み。db.insert(sensor, value) / db.aggregate(sensor)
import time
while True:
t = sensor.temperature
db.insert("temp", t)
agg = db.aggregate("temp")
print(f"記録 温度={t}C 件数={agg['n']} 平均={agg['avg']}C")
time.sleep(1)
配線
構成(Piローカル SQLite)
I2C BME280 (0x76) ── 温度センサ
SQLite ファイル sensor.db(Pi ローカル)
テーブル readings(id, t_ms, sensor, value)
シェルの出力
実行すると、Pi側と相手デバイス側に次のような出力がリアルタイムで流れます。
🍓 Raspberry Pi シェル
pi@raspberrypi:~ $ python app.py
記録 温度=25.42C 件数=1 平均=25.42C
記録 温度=25.84C 件数=2 平均=25.63C
記録 温度=26.11C 件数=3 平均=25.79C
記録 温度=25.76C 件数=4 平均=25.782C
記録 温度=25.43C 件数=5 平均=25.712C
記録 温度=25.57C 件数=6 平均=25.688C
記録 温度=25.59C 件数=7 平均=25.674C
計測値(温度(℃))の推移:
コードを編集したらどうなるか
記録間隔や集計内容(最小・最大・移動平均)を変えられます。センサー名を増やせば複数センサーの記録もできます。
まとめ
Piをデータロガーとして使う基本です。蓄積したデータは後からグラフ化・分析できます。
Raspi 仮想シミュレーターのライブ実行結果から生成。ブラウザ上で自分でコードを編集して試せます。
2. Flask センサーAPI
概要
Pi上のFlaskがセンサーAPIを配信。クライアントが実時間でアクセスしログが流れる。ブラウザ上の仮想Raspberry Piで、実際にコードを動かしながら挙動を確認できます。
プログラムの内容(ざっくり)
Pi上のFlaskがセンサーAPI(/api/sensor 等)を配信します。クライアントが実時間でアクセスし、リクエストを処理して200応答を返します。
# === Pi の Flask センサーAPI ===
# クライアントが /api/sensor などにアクセスしてくる。ルートを定義して応答する。
# app は簡易Flask。jsonify でJSON応答。
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/")
def index():
return "<h1>Raspberry Pi Sensor Dashboard</h1>"
@app.route("/api/sensor")
def api_sensor():
return jsonify({"temp": sensor.temperature, "hum": sensor.humidity})
@app.route("/health")
def health():
return jsonify({"status": "ok"})
app.run(host="0.0.0.0", port=5000)
配線
構成(Flask Web サーバー)
Pi eth0 :5000 ── LAN ── クライアント
GET / ダッシュボードHTML
GET /api/sensor センサJSON(BME280)
シェルの出力
実行すると、Pi側と相手デバイス側に次のような出力がリアルタイムで流れます。
🍓 Raspberry Pi シェル
pi@raspberrypi:~ $ python app.py
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
"GET /api/sensor" 200 -
"GET /" 200 -
"GET /health" 200 -
"GET /api/sensor" 200 -
"GET /api/sensor" 200 -
"GET /api/sensor" 200 -
"GET /" 200 -
"GET /health" 200 -
"GET /api/sensor" 200 -
🌐 HTTPクライアント
GET /api/sensor
GET /
GET /health
GET /api/sensor
GET /api/sensor
GET /api/sensor
GET /
GET /health
GET /api/sensor
計測値(配信温度(℃))の推移:
コードを編集したらどうなるか
@app.routeで新しいエンドポイントを追加したり、返すJSONの内容を変えられます。ポートやHTMLも編集できます。
まとめ
PiをIoTゲートウェイやWebサーバーにする基本です。センサー値をネットワーク越しに配信できます。
Raspi 仮想シミュレーターのライブ実行結果から生成。ブラウザ上で自分でコードを編集して試せます。
おわりに
どちらもラズパイの基礎として役立つテーマです。気に入ったらLGTM・ストックしていただけると励みになります。他のテーマも順次まとめていきます。
