ラズベリーパイ温度センサー
数週間前、私はラズベリーパイを購入しました。 EbenUptonのRaspberryPiユーザーガイド、特に彼がGPIOに注目している2つの章を読んだ後、私は最初のプロジェクトのアイデアを思いつきました。この投稿では、Raspberry Pi、MCP9808、古いMac Mini(2008年初頭)、InfluxDB、Grafana、Pythonのビット、およびrunitを使用してまとめた家庭用温度監視プロジェクトの最初の反復について説明します。
このプロジェクトでは、AdafruitのMCP9808 Breakout Boardを使用することにしました。これは、コンポーネント、回路、アイデアの優れた情報源です。私はいくつかの理由でこのユニットを選びました:
- I²Cで制御– Raspberry PiのGPIOは、ピン3(シリアルデータライン、SDA)および5(シリアルクロックライン、SCL)で必要なI²Cバスをサポートします
- 2.7V〜5.5Vの電力とロジックの範囲で動作します– RaspberryPiは3.3Vと5Vの電力線を提供します
- かなり安かった(<$ 5 USD)–私のはんだ付けスキルは最高ではありません。
MCP9808ブレイクアウトボードは、ほとんど組み立てられたAdafruitから出荷されます。この特定のキットでは、付属の8ピンヘッダーストリップをブレイクアウトボードにはんだ付けするだけで済みます。
GPIOブレイクアウトとブレッドボードを使用してRaspberryPiをMCP9808に接続しました。このアプローチは、センサーをRaspberry Piにはんだ付けするよりも、管理が少し簡単で、配線の間違いを修正し、永続性が低くなります。 MCP9808から温度を読み取るには、電源ピン、アース、およびI²CSDAピンとSCLピンのみが必要です。
残りのオプションのピンは、このプロジェクトでは使用されません。これらは、同じバスで複数のデバイスが使用されている場合のI²Cアドレス指定の問題の回避策と、センサーがしきい値を超えるまたは下回る温度を読み取った場合にアラートを出すためのピンを提供します。
永続的なデータストアを使用してプロジェクトをバックアップしたいと思っていました。これにより、データポイントをキャプチャし、後でそれらを分析して、一般的な傾向、気象イベントとの相互参照の暖房/冷房パターンなどを確認できます。
時間中心のクエリ言語とストレージモデルのために、InfluxDBを選択しました。机の下に座っていた古いMacMini(2009年初頭とOSX 10.10)にInfluxをインストールしました。 InfluxDBの基本的なインストールを開始して実行することは、十分に文書化されています。私はすでにHomebrewを使用してサードパーティの依存関係のほとんどを管理しており、InfluxDBの式が存在するため、 brew install influxdb
を発行してインストールを完了しました。 。
InfluxDBデータベースを構成します
InfluxDBをインストールした状態で、温度測定値を保存するためのデータベースと、それを管理するためのデータベースユーザーをセットアップしました。これを行うために、InfluxDBインスタンスのWebコンソールを使用しました。デフォルトでは、ポート 8083
で実行されます InfluxDBホストの。
ハードウェアとデータストアがセットアップされたので、I²Cバスを介してMCP9808と通信するために、すぐに使用できるRaspberryPiに必要なOS構成が少しあります。
デフォルトでは、RaspberryPiはI²Cバスを使用するために必要なカーネルモジュールをロードしません。 GPIOを介したI²C通信を有効にするために、次の2行を / etc / modules
に追加しました。
i2c-bcm2708i2c-dev
次に、RaspberryPiを再起動します
sudo再起動
システムが初期化した後、システムはMCP9808が接続されていることを認識できるはずです。 i2cdetect
を使用しました そのためのCLIツール:
sudo i2cdetect 1#チャネル1は、Raspberry Pi B +モデルのデフォルトです
Adafruitは、MCP9808ラッパーとI²C抽象化を提供します。このプロジェクトのメインドライバースクリプトでは、これらの両方を利用しました。
sudo apt-getupdatesudo apt-get install build-essential python-dev python-smbus
Adafruit_Python_MCP9808ラッパーをインストールします
cd〜 / Downloadsgit clone https://github.com/adafruit/Adafruit_Python_MCP9808/blob/master/Adafruit_MCP9808cd Adafruit_MCP9808sudo python setup.py install コード>
これにより、MCP9808ラッパーがI²C抽象化に依存するため、I²C抽象化もインストールされます。
読み取り、レポート、繰り返し
次に、Pythonスクリプト poll.py
を作成しました。 、MCP9808から一定の間隔で読み取り、その結果をmcp9808_testInfluxDBデータベースインスタンスに報告します。
#!/ usr / bin / python import time import Adafruit_MCP9808.MCP9808 as MCP9808 from influxdb import InfluxDBClient#温度データをInfluxDBに送信するために必要なペイロードを生成しますdeftemperature_data(degrees_c):return [{'points':[[c_to_f(degrees_c)]]、 'name': 'Temperature Readings'、 'columns':['degrees_f']}]#摂氏の温度表現を変換します# Farenheight def c_to_f(c):return c * 9.0 / 5.0 + 32.0#I2Cバスを介したMCP9808との通信を初期化します。 Sensor =MCP9808.MCP9808()sensor.begin()#キャプチャロジックが発生する間隔を定義します#capture_interval =60.0#60秒ごと#mcp9808_testへの接続を確立します#InfluxDBインスタンスinfluxClient =InfluxDBClient( '
これで、次のコマンドを使用して実行できます。スクリプトは root
として実行する必要があることに注意してください GPIOと対話するためのRaspberryPiのユーザー。
sudo python /poll.py
For-ev-er
ホレイ!机の下にある電源チップのオン/オフスイッチを押すまで、すべてが稼働していました。この時点で、 poll.py
を確認したいと思いました。 Raspberry Piにパワーがある限り、スクリプトは実行されました。これを実現するために、runitプロセススーパーバイザーを使用しました。
詳細:RaspberryPi温度センサー
製造プロセス