Raspberry PiPythonを組み合わせることで、低コストで効率的なIoT(Internet of Things)プロジェクトを実現することができます。この記事では、Raspberry Piを使ってセンサーからデータを収集し、Pythonでデータを分析する手順をステップバイステップで解説します。IoTプロジェクトを始めたい方や、センサーを使ったデータ収集に興味がある方にぴったりの内容です。

IoTとRaspberry Piの基本

IoTとは?

IoTは「モノのインターネット」の略で、デバイスがインターネットに接続され、センサーや機器からリアルタイムでデータを収集し、他のデバイスやシステムと連携する技術です。たとえば、家庭用スマート家電や産業用監視システムなどがIoTの代表的な応用例です。

Raspberry Piとは?

Raspberry Piは、クレジットカードサイズの低価格コンピュータで、GPIOピンを使ってセンサーやモーターなどの電子部品を制御できます。PythonとRaspberry Piを組み合わせることで、簡単にセンサーデータを収集し、分析や可視化ができるIoTプロジェクトを実現できます。

Raspberry Piの準備

必要なハードウェア

  • Raspberry Pi(モデル3または4推奨)
  • MicroSDカード(Raspberry Pi OSがインストールされたもの)
  • 電源アダプタ
  • DHT11センサー(温度・湿度センサー)
  • ジャンパーワイヤー
  • ブレッドボード(オプション)

ソフトウェアのセットアップ

  1. Raspberry PiにRaspberry Pi OSをインストールし、基本的なセットアップを完了させます。
  2. Pythonはデフォルトでインストールされていますが、必要なライブラリを追加します。 センサーデータを収集するために、以下のPythonパッケージをインストールします。
sudo apt update
sudo apt install python3-pip
pip3 install Adafruit_DHT

このAdafruit_DHTライブラリは、DHT11/DHT22温度・湿度センサーのデータを取得するために必要です。

DHT11センサーを使ったデータ収集

センサーの接続

Raspberry PiとDHT11センサーを接続します。DHT11には3本のピンがあり、それぞれ以下のように接続します。

  • VCC:Raspberry Piの5Vピン
  • GND:Raspberry PiのGNDピン
  • Data:Raspberry PiのGPIOピン(例:GPIO4)

Pythonコードでセンサーからデータを取得

DHT11センサーからデータを収集するためのPythonコードは以下の通りです。

import Adafruit_DHT
import time
# DHTセンサーの設定
sensor = Adafruit_DHT.DHT11
pin = 4  # データピンをGPIO4に接続
# データ収集のループ
while True:
    # センサーからデータを取得
    humidity, temperature = Adafruit_DHT.read(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 sensor')
    
    # 5秒ごとにデータを更新
    time.sleep(5)

このコードでは、Adafruit_DHTライブラリを使ってDHT11センサーから温度と湿度のデータを取得し、5秒ごとに出力しています。データが正常に取得できなかった場合には、エラーメッセージが表示されます。

データの保存と分析

センサーデータを収集したら、それを保存し、後で分析することが重要です。ここでは、CSVファイルにデータを保存する方法と、そのデータを分析するためのPythonコードを紹介します。

データをCSVファイルに保存

まずは、センサーから収集したデータをCSVファイルに保存する方法です。

import Adafruit_DHT
import time
import csv
# CSVファイルの作成
with open('sensor_data.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Timestamp', 'Temperature (C)', 'Humidity (%)'])
    # データ収集のループ
    while True:
        humidity, temperature = Adafruit_DHT.read(sensor, pin)
        if humidity is not None and temperature is not None:
            timestamp = time.strftime('%Y-%m-%d %H:%M:%S')
            writer.writerow([timestamp, temperature, humidity])
            print(f'Temperature: {temperature}°C, Humidity: {humidity}%')
        else:
            print('Failed to retrieve data from sensor')
        
        time.sleep(5)

このコードでは、センサーデータをsensor_data.csvファイルにタイムスタンプと共に書き込みます。データは5秒ごとに収集され、ファイルに追記されます。

データの分析と可視化

次に、収集したデータを分析し、可視化するためにMatplotlibPandasを使います。

必要なライブラリをインストール

pip3 install matplotlib pandas

Pythonコードでデータの可視化

import pandas as pd
import matplotlib.pyplot as plt
# CSVファイルからデータを読み込む
data = pd.read_csv('sensor_data.csv')
# データの可視化
plt.figure(figsize=(10,5))
# 温度のグラフ
plt.subplot(1, 2, 1)
plt.plot(data['Timestamp'], data['Temperature (C)'], color='r')
plt.xticks(rotation=45)
plt.title('Temperature Over Time')
plt.xlabel('Time')
plt.ylabel('Temperature (C)')
# 湿度のグラフ
plt.subplot(1, 2, 2)
plt.plot(data['Timestamp'], data['Humidity (%)'], color='b')
plt.xticks(rotation=45)
plt.title('Humidity Over Time')
plt.xlabel('Time')
plt.ylabel('Humidity (%)')
# グラフの表示
plt.tight_layout()
plt.show()

このコードでは、Pandasを使ってCSVファイルからデータを読み込み、Matplotlibで温度と湿度の変化をグラフに表示します。これにより、センサーから得たデータを視覚的に分析できます。

拡張アイデア

この基本的なセンサーデータ収集システムをベースに、さまざまな拡張を行うことが可能です。

  • データのクラウド送信:収集したデータをクラウド サーバーに送信し、リモートでデータをモニタリングできます。
  • アラートシステムの構築:温度や湿度が一定の閾値を超えた場合に、メールやSMSでアラートを送るシステムを追加できます。
  • 複数のセンサーの統合:DHT11以外のセンサーを追加して、より多くの環境データ(例:光、音、気圧など)を収集することも可能です。

まとめ

Raspberry PiPythonを使ったIoTプロジェクトでは、低コストかつ簡単にセンサーデータを収集し、リアルタイムで分析するシステムを構築できます。今回はDHT11センサーを使って温度・湿度データを収集し、Pythonでデータを保存・可視化する方法を紹介しました。今後は、これらを基にさらに高度なIoTプロジェクトに挑戦し、データを活用したスマートなシステムを構築してみてください。