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.GPIO
やAdafruit Circuit
Python“(センサー制御用)、pandas
やmatplotlib
(データ解析・可視化用)
Raspberry Piのセットアップ
初期セットアップ
Raspberry Piをセットアップするには、公式サイトからRaspberry Pi OS
をインストールし、初期設定(Wi-Fi接続やロケール設定)を行います。セットアップ後、Raspberry Piにリモートでアクセスするために、SSH
やVNC
を有効にすることもできます。
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ファイルに保存します。
データの可視化
Python
のmatplotlib
ライブラリを使って、収集したデータを可視化することもできます。以下は、温度と湿度の変化をグラフにプロットする例です。
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
の強力な分析ツールでデータを処理することで、さまざまな用途に応用できます。小さなプロジェクトから始めて、さらに複雑なシステムへと発展させていくことが可能です。