初心者向けIoTチュートリアル:Raspberry Piから温度データをストリーミング
「Hello World!」– これは、プログラミング学習時に最初に書いたプログラムの出力だったかもしれません。デバイスをセットアップして温度データをストリーミングすることは、モノのインターネット(IoT)における事実上の「Hello World!」プロジェクトになりつつあります。初めての「Hello World!」出力が長く苛立たしい作業だったなら、二度とプログラムを書かなかったかもしれません。最初のIoTプロジェクトは、あなたの顔に大きな笑顔をもたらすものでなければなりません。この楽しく簡単なプロジェクトで、IoTデータストリーミングの素晴らしい世界をご紹介します。
このプロジェクト全体のビデオチュートリアルは以下で視聴可能:
https://youtu.be/HMqPbfvCshs
必要な材料:
- インターネット接続されたRaspberry Pi、または任意のシングルボードコンピュータ。
- DS18B20温度センサー(Adafruit製品ページ)。
- シンプルな回路配線用ブレッドボード(Adafruit Piスターターキットに同梱)。
- 4.7K〜10K抵抗(Adafruit Piスターターキットに同梱)。
ステップ1: ハードウェアセットアップ
DS18B20温度センサーは、デジタル出力を持ち、PiにオンボードADCがないため、Raspberry Piと相性が良いです。Raspbianにはセンサー出力を読み取るインターフェースが含まれています。温度を取得してパースするための少しのコードを書くだけです。AdafruitにはDS18B20使用の優れたチュートリアルがあり、それをベースに画面出力ではなくストリーミングするように修正します。
ハードウェアセットアップはシンプル。DS18B20の赤線を3.3V、黒線をGND、青線をプルアップ抵抗経由でPiのGPIOピン4に接続。
ステップ2: 温度を読み取る
温度センサー読み取りインターフェースを開始するには、2つのコマンドを実行します。PiのコマンドプロンプトまたはSSHで以下を入力:
sudo modprobe w1-gpio sudo modprobe w1-therm
温度センサーの出力がPi上のファイルに書き込まれるようになります。該当ファイルを見つけるには:
cd /sys/bus/w1/devices
このディレクトリ内に「28-」で始まるサブディレクトリがあります。「28-」以降がセンサーのシリアル番号です。そのディレクトリにcdします。内部にw1_slaveというファイルがあり、センサー出力が含まれます。内容は以下のような形式:
a2 01 4b 46 7f ff 0e 10 d8 : crc=d8 YES a2 01 4b 46 7f ff 0e 10 d8 t=26125
t=の後の数値が目当てのもの。これは千分の1℃単位の温度(上記例では26.125℃)。このファイルを読み取り、該当数値をパースするシンプルなプログラムが必要です。幸い、Adafruitがまさにこれを行い、温度を画面出力するPythonスクリプトを提供しています。Pi上で新規ファイル(例:temperature.py)を作成し、以下のコードをコピペ:
コードはこちらをクリック
sudo python temperature.pyで実行し、画面に温度センサー出力を確認。
ステップ3: 温度をストリーミング
ここがAdafruitチュートリアルから逸脱するポイント。画面に温度を出力するだけでは面白くありません。現在の温度だけでなく、取得した温度データの履歴を見られる場所にデータをストリーミングしたいのです(それに、テキストで大量の温度を「読む」のは誰も望みません;きれいなデータ可視化が欲しい)。まず、Initial Stateストリーマーをインストールして、温度測定値の送信先を用意します(セットアップ手順はこちら;超簡単で2分以内)。上記スクリプトを修正し、画面出力の代わりにInitial Stateアカウントへストリーミングするようにします。修正点:
コードはこちらをクリック
Initial Stateアカウントに関連付けられたクライアントキーを行6の引用符間にコピペ。クライアントキーはアカウント設定またはログイン後のランディングページで確認可能。
行った修正:
- 行4でInitial Stateデータストリーマーモジュールをインポート。
- 行6で「Temperature Stream」という新しいバケットを作成し、クライアントキーでアカウントと関連付け。
- 行30で
read_temp()関数を修正し、摂氏温度のみを返すように。 - 行34で
read_temp()の出力を華氏に変換。 - 行35と36で両温度をストリーミング。
詳細については:IoT 101 Project: Stream Temperature from your Raspberry Pi
製造プロセス
- 5ドルI2C温度センサーで作るRaspberry Pi温度ロガー
- Python、SQLite、LabVIEWによるRaspberry Pi高精度温度プロファイリング
- Raspberry Pi温度・湿度ネットワークモニター – DIYセットアップガイド
- Raspberry Pi 2でDS18B20温度センサー読み取りガイド
- Raspberry PiとDS18B20によるプロフェッショナルな温度監視
- Raspberry PiでMaxim 1-WireセンサーとDS2482 I2Cブリッジを用いた温度測定
- Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
- Raspberry Piでサーバークローゼットの温度を正確に監視
- Raspberry PiでBMP085:I2C経由の高精度温度・気圧測定
- Raspberry PiとDS18B20でマルチセンサー温度・光監視システムを構築
- Raspberry Pi、DHT11、ThingSpeakで作る初めてのIoTプロジェクト