エレクトロニクス研究所
プロジェクト約7分

IoTセンサーネットワーク構築入門|Arduino×Raspberry Piで作るデータ収集システム

ArduinoとRaspberry Piを組み合わせたIoTセンサーネットワークの構築方法を解説。通信プロトコルの選定からデータ収集・可視化まで実践ガイド。

2026-04-20

IoTセンサーネットワークとは

IoTセンサーネットワークは、複数のセンサーノードが収集したデータを中央のゲートウェイ(Raspberry Piなど)に集約し、記録・分析・可視化するシステムです。温湿度モニタリング、農業の環境管理、スマートホーム、工場の設備監視など幅広い用途に活用されています。

電子工作の視点では、ArduinoやESP32でセンサーデータを取得し、Raspberry Piでデータを受信・保存・表示する構成が定番です。


システム構成の全体像

典型的なIoTセンサーネットワークの構成を紹介します。

[センサーノード群]          [ゲートウェイ]        [可視化]
Arduino + 温湿度センサー --→
ESP32 + CO2センサー     --→  Raspberry Pi  --→  Webダッシュボード
Arduino + 光センサー    --→  (MQTTブローカー)    (Grafana等)

構成要素の役割

  • センサーノード: Arduino/ESP32にセンサーを接続してデータを取得・送信
  • ゲートウェイ: Raspberry Piでデータを受信し、データベースに保存
  • 通信プロトコル: MQTT(軽量IoT通信プロトコル)が標準
  • 可視化: Webブラウザでリアルタイムにグラフ表示

通信プロトコルの選定

IoTセンサーネットワークで使われる主な通信方式を比較します。

プロトコル 通信距離 消費電力 データ量 適用シーン
Wi-Fi + MQTT 〜50m(屋内) 屋内モニタリング
BLE(Bluetooth LE) 〜30m ウェアラブル・近距離
ZigBee / Thread 〜100m(メッシュ) スマートホーム
LoRaWAN 〜10km 極低 極小 農業・屋外広域
LTE-M / NB-IoT セルラー圏内 遠隔地・移動体

初心者におすすめ: まずはWi-Fi + MQTTの構成から始めましょう。ESP32やArduino Uno R4 WiFiなら追加モジュール不要でWi-Fi通信が可能です。


ステップ1: センサーノードの構築

必要な部品(1ノードあたり)

パーツ 用途 目安価格
ESP32開発ボード マイコン + Wi-Fi ¥1,500
DHT22温湿度センサー 温度・湿度計測 ¥500
ブレッドボード + ジャンパーワイヤー 配線 ¥500
USB電源 電源供給 ¥500

Arduino/ESP32スケッチ(MQTT送信)

#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>

#define DHT_PIN 4
#define DHT_TYPE DHT22

const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
const char* mqtt_server = "192.168.1.100"; // Raspberry PiのIP

WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHT_PIN, DHT_TYPE);

void setup() {
  Serial.begin(115200);
  dht.begin();
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);

  client.setServer(mqtt_server, 1883);
}

void loop() {
  if (!client.connected()) {
    client.connect("sensor_node_1");
  }
  client.loop();

  float temp = dht.readTemperature();
  float humi = dht.readHumidity();

  if (!isnan(temp) && !isnan(humi)) {
    char payload[64];
    snprintf(payload, sizeof(payload),
             "{\"temp\":%.1f,\"humi\":%.1f}", temp, humi);
    client.publish("sensors/room1", payload);
  }

  delay(60000); // 1分間隔で送信
}

ステップ2: ゲートウェイ(Raspberry Pi)のセットアップ

MQTTブローカーのインストール

Raspberry PiにMosquitto(MQTTブローカー)をインストールします。

sudo apt install -y mosquitto mosquitto-clients
sudo systemctl enable mosquitto

データ受信・保存スクリプト(Python)

import json
import sqlite3
from datetime import datetime
import paho.mqtt.client as mqtt

# SQLiteデータベース初期化
conn = sqlite3.connect("sensor_data.db")
conn.execute("""
    CREATE TABLE IF NOT EXISTS readings (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        topic TEXT,
        temperature REAL,
        humidity REAL,
        timestamp TEXT
    )
""")

def on_message(client, userdata, msg):
    data = json.loads(msg.payload.decode())
    conn.execute(
        "INSERT INTO readings (topic, temperature, humidity, timestamp) VALUES (?, ?, ?, ?)",
        (msg.topic, data["temp"], data["humi"], datetime.now().isoformat())
    )
    conn.commit()
    print(f"[{msg.topic}] 温度: {data['temp']}℃, 湿度: {data['humi']}%")

client = mqtt.Client()
client.on_message = on_message
client.connect("localhost", 1883)
client.subscribe("sensors/#")  # すべてのセンサートピックを購読
client.loop_forever()

ステップ3: データの可視化

簡易Webダッシュボード

Flaskを使った簡易ダッシュボードで、最新のセンサーデータをブラウザで確認できます。

from flask import Flask, jsonify
import sqlite3

app = Flask(__name__)

@app.route("/api/latest")
def latest():
    conn = sqlite3.connect("sensor_data.db")
    rows = conn.execute(
        "SELECT topic, temperature, humidity, timestamp FROM readings ORDER BY id DESC LIMIT 10"
    ).fetchall()
    return jsonify([
        {"topic": r[0], "temp": r[1], "humi": r[2], "time": r[3]}
        for r in rows
    ])

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

本格的な可視化にはGrafana + InfluxDBの組み合わせが定番です。時系列データのグラフ表示やアラート設定が可能になります。


ネットワーク拡張のヒント

複数ノードの管理

センサーノードが増えた場合、MQTTトピックの設計が重要です。

sensors/room1/temperature
sensors/room1/humidity
sensors/kitchen/co2
sensors/outdoor/temperature

階層構造にすることで、場所別・計測項目別にデータを整理できます。

通信の信頼性向上

  • MQTTのQoSレベル: QoS 1(少なくとも1回配信)を設定し、データ欠損を防止
  • ローカルバッファ: Wi-Fi切断時にセンサーノード側でデータを一時保存し、復旧後に再送信
  • ヘルスチェック: 一定時間データが届かないノードをアラート通知

セキュリティ対策

  • MQTTブローカーにユーザー認証を設定(Mosquittoのpassword_file
  • IoTデバイス専用のWi-Fiネットワーク(VLAN / ゲストネットワーク)に分離
  • ファームウェアの定期更新を実施

電力消費の試算

IoTセンサーネットワーク全体の消費電力は、IoT電力計算機で試算できます。センサーの種類・サンプリング間隔・台数を入力して、月間電気代とバッテリー持続時間の目安を把握しましょう。

ESP32をスリープモード(Deep Sleep)で運用すると、1分間隔の計測で平均消費電力を約0.5mAに抑えられ、2,000mAhのバッテリーで数ヶ月の連続稼働が可能です。


まとめ

IoTセンサーネットワークは、Arduino/ESP32とRaspberry Piの組み合わせで低コストに構築できます。まずはセンサー1台 + Raspberry Pi 1台の最小構成で動作を確認し、MQTTの基本を理解してから台数を拡大していきましょう。通信プロトコルの選定とセキュリティ対策を初期段階で設計に組み込むことが、安定したシステム運用の鍵です。

この記事で紹介した商品

Arduino Uno R4 WiFi

¥3,500前後
Amazonで見る

Raspberry Pi 5(4GB)

¥9,800前後
Amazonで見る

センサーキット(温湿度・光・圧力など)

¥1,200前後
Amazonで見る

スマートプラグ(消費電力モニタリング付き)

¥1,500前後
Amazonで見る