IoT(Internet of Things)は、物理的なデバイスをインターネットに接続し、データを収集してそれを活用する技術です。この分野で人気の高いRaspberry Piは、小型で手軽に扱えるシングルボードコンピュータで、様々なセンサーやアクチュエータを接続して、データの収集と制御を行うのに最適です。本記事では、Pythonを使ってRaspberry Piでセンサーデータを収集し、そのデータを分析するまでの基本的な流れを紹介します。

必要なもの

まず、Raspberry Piを使ったIoTプロジェクトを始めるためには、以下の機材とソフトウェアが必要です。

ハードウェア

  • Raspberry Pi(最新のRaspberry Pi 4またはRaspberry Pi 3
  • センサー(温度、湿度、光、距離など)
  • ブレッドボードとジャンパーケーブル(センサー接続用)
  • 電源供給用ケーブル
  • ネットワーク接続(Wi-Fiまたは有線LAN)
  • モニター、キーボード、マウス(初期セットアップ時に使用)

ソフトウェア

  • Raspberry Pi OS(Raspberry Piの公式OS)
  • Python(Raspberry Pi OSには標準でインストールされています)
  • ライブラリ:RPi.GPIOAdafruit CircuitPython“(センサー制御用)、pandasmatplotlib(データ解析・可視化用)

Raspberry Piのセットアップ

初期セットアップ

Raspberry Piをセットアップするには、公式サイトからRaspberry Pi OSをインストールし、初期設定(Wi-Fi接続やロケール設定)を行います。セットアップ後、Raspberry Piにリモートでアクセスするために、SSHVNCを有効にすることもできます。

GPIOピンの確認

Raspberry PiのGPIO(General Purpose Input/Output)ピンは、センサーや他のデバイスと通信するために使用します。以下のコマンドで、PythonでGPIOを使用するためのRPi.GPIOモジュールをインストールします。

sudo apt update
sudo apt install python3-rpi.gpio

センサーデータの収集

ここでは、例としてDHT11という温度・湿度センサーを使ってデータを収集する方法を紹介します。DHT11はRaspberry PiのGPIOピンに接続して使用します。

センサーの接続

  • VCCをRaspberry Piの3.3Vピンに接続
  • GNDをRaspberry PiのGNDピンに接続
  • データピンをGPIO 4に接続

Pythonでのデータ取得

以下のコードを使用して、DHT11からデータを取得できます。まず、Adafruit_DHTライブラリをインストールします。

sudo pip3 install Adafruit_DHT

次に、Pythonコードでセンサーからデータを読み取ります。

import Adafruit_DHT
# 使用するセンサーの種類と接続したGPIOピンを指定
sensor = Adafruit_DHT.DHT11
pin = 4  # GPIO 4
# データを取得
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
    print(f"Temperature: {temperature}°C  Humidity: {humidity}%")
else:
    print("Failed to retrieve data from humidity sensor")

このコードは、DHT11センサーから温度と湿度を取得し、それを表示します。

センサーデータの保存と分析

収集したデータは、pandasを使ってCSVファイルに保存したり、解析を行うことができます。例えば、一定間隔でデータを収集し、ログとして保存するプログラムは以下のように書けます。

import Adafruit_DHT
import pandas as pd
import time
sensor = Adafruit_DHT.DHT11
pin = 4
data = []
# 10回データを収集
for i in range(10):
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
    if humidity is not None and temperature is not None:
        print(f"Temperature: {temperature}°C  Humidity: {humidity}%")
        data.append({"Time": time.strftime("%Y-%m-%d %H:%M:%S"), "Temperature": temperature, "Humidity": humidity})
    else:
        print("Failed to retrieve data from humidity sensor")
    time.sleep(10)  # 10秒ごとにデータを収集
# pandasでデータを保存
df = pd.DataFrame(data)
df.to_csv("sensor_data.csv", index=False)
print("Data saved to sensor_data.csv")

このプログラムは、10回分のセンサーデータを10秒ごとに取得し、それをCSVファイルに保存します。

データの可視化

Pythonmatplotlibライブラリを使って、収集したデータを可視化することもできます。以下は、温度と湿度の変化をグラフにプロットする例です。

import pandas as pd
import matplotlib.pyplot as plt
# CSVファイルからデータを読み込み
df = pd.read_csv("sensor_data.csv")
# データをプロット
plt.figure(figsize=(10, 5))
plt.plot(df["Time"], df["Temperature"], label="Temperature (°C)", color="r")
plt.plot(df["Time"], df["Humidity"], label="Humidity (%)", color="b")
plt.xlabel("Time")
plt.ylabel("Value")
plt.title("Temperature and Humidity Over Time")
plt.legend()
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

このコードは、時間経過に伴う温度と湿度の変化をプロットし、簡単な可視化を行います。これにより、データの傾向や異常値を確認しやすくなります。

次のステップ

センサーデータの収集と分析ができるようになったら、次のステップとして以下のようなことを考えることができます。

  • クラウドサービスにデータをアップロードして、遠隔でモニタリング
  • データに基づいたアクチュエータ制御(例えば、特定の条件でファンやLEDを動作させる)
  • 複数のセンサーを使用して、より詳細なデータ収集

まとめ

Raspberry PiとPythonを使って始めるIoTプロジェクトは、手軽でありながら非常に柔軟です。センサーからデータを収集し、Pythonの強力な分析ツールでデータを処理することで、さまざまな用途に応用できます。小さなプロジェクトから始めて、さらに複雑なシステムへと発展させていくことが可能です。