Raspberry Pi向けコンパクトDHT温湿度ブレークアウト – ATtiny85 & DHT22/DHT11
ハードウェアコンポーネント: Atmel ATTiny85 × 1、DHT22温度センサー × 1、DHT11温湿度センサー × 1、SparkFun Tiny AVR Programmer × 1、Adafruit 4.7KΩ抵抗 × 3、Adafruit 10KΩ抵抗 × 1、Adafruit 100Ω抵抗 × 1、Adafruit拡散青3mm LED × 1、Adafruitタクトスイッチ × 1、Adafruitブレークアウェイ0.1″ 36ピンストリップメスヘッダ 1個 @ 長さ6、1個 @ 長さ2(合計8ピン) × 1、汎用ジャンパー(0.1″) × 1、Arduino UNO & Genuino UNO オプション – デバッグとテスト用 × 1
ソフトウェアアプリとオンラインサービス: Microsoft Visual Studio 2015、Microsoft Windows 10 IoT Core、Arduino IDE
ストーリー
はじめに
DHT11とDHT22は、非常に低コストで高精度なため人気の温湿度センサーです。しかし、これらは独自のワンワイヤープロトコルで動作し、正確なタイミングが必要です。これらのセンサーは、リアルタイムOSを持たないボードでの読み取りが困難であることが判明しています。
以前、「DHT11/DHT22温度センサー」という記事を投稿し、C#からMicrosoft C++サンプルコードを使用してこれらのセンサーを読み取る方法を示しました。ライブラリは読み取り可能でしたが、信頼性向上のためにリトライロジックを追加する必要がありました。これはほとんどのケースで成功しましたが、一部のユーザーから一貫して動作しないとの報告がありました。
Windows 10 IoT Core上のRaspberry Piでこれらのセンサーを使用する関心の高さを受け、低コストを維持しながら非常に信頼性の高い読み取り方法を提供する第二のオプションを作成することにしました。
概要
ここで提示するアプローチは、DHTセンサーを安価なATtiny85に接続し、I2Cスレーブデバイスとして設定することです。これはTinyWireSライブラリを使用し、デバイスとやり取りするための読み書き可能なレジスタセットを作成することで実現します。
このデバイスは以下の機能をサポートします:
- DHTセンサー読み取り間隔の設定可能。デフォルトは2秒ごと。
- インターバルを無効化し、オンデマンドで読み取りを行うマニュアルモード。
- 現在の温度読み取り値が閾値を超えたときに割り込みピンをトリガーする、設定可能な上限/下限温度閾値。
- 設定保存モード – 設定を電源投入時やリセット後に復元可能。
- 設定リセット – 保存された設定をデフォルト値にリセット。
- センサー電源制御 – センサーへの電源を有効/無効化して省電力化。
- プログラマブルI2Cデバイスアドレス。デフォルトアドレスは0x26だが、コマンドで変更可能。リセット時は0x26に戻る。C#ライブラリにはI2Cバス上でデバイスを検索するコードも含まれ、アドレスを知らなくても接続可能。
- プログラマブルDHTモデル選択。ファームウェアはデフォルトでDHT22だが、コマンドで別モデルに変更可能。モデルは保存され、リブートや電源サイクル後も保持。
ソースコード
このプロジェクトには3セットのコードがあります。ボード用メインファームウェア、Arduinoマスタースケッチ(Arduino Uno接続時のテスト・デモ用)、Raspberry Piでデバイスを使用する方法を示すWindows 10 IoT Coreアプリケーション。すべてのコードはリンク先のGitHubリポジトリで入手可能。
デバイス/回路
回路は小型で、わずかな安価なコンポーネントのみを使用。ATtiny85は複数のベンダーから購入可能。いくつか入手しておくことを推奨(多用途に使えるため)。
回路には6ピンヘッダがあり、別回路または直接Raspberry Piに接続可能。ピン定義は以下:
- GND → 自分の回路のグランド、またはRaspberry Piのグランドピンに接続。
- RST → デバイスのリセット/リブート用。通常動作時は5Vに接続。デバイスをリセットするには、このピンに瞬間的なLOWパルスを与える。
- INT → 二つの目的を持つ。閾値有効時、閾値超過でHIGH、それ以外でLOW。省電力モード時、このピンに瞬間的なHIGHパルスでウェイクアップ。
- SDA → I2C SDAライン。
- SCL → I2C SCLライン。
- 5V → 5V電源。
オンボードLEDの有効/無効を切り替えるための2ピンヘッダもあります(ジャンパー装着で有効、取り外しで無効)。
大規模プロジェクトで利用する場合、DHT Tinyの回路をプロジェクト既存回路にマージ/埋め込み可能。この場合、ヘッダピンとLEDはオプション。
別基板に構築し、数本のワイヤや接続ケーブルでRaspberry Piに接続することも可能。
ATtiny85のプログラミング
DHT_Tiny_Breakout.inoスケッチをAVRプログラマでATtiny85に書き込み。プログラマがない場合はArduino Uno(または類似ボード)を使用可能。以下の記事を参照:
- Programming ATtiny85 with Arduino Uno on Hackster.io
- Virtual Workshop: Program an ATTiny85 with Arduino
- Programming an ATtiny w/ Arduino 1.6 (or 1.0)
- Programming an ATtiny w/ Arduino 0022
筆者はSparkFun Tiny AVR Programmerを使用。チップを16MHzで動作させています。詳細は「ATtiny @ 16MHz」記事参照。
ATtiny85使用時、スレーブスケッチにはTinyWireSライブラリがライブラリフォルダにインストールされている必要があります。このライブラリはhttps://github.com/rambo/TinyWireからダウンロード可能。
ブレッドボードでの回路構築
最初のステップは、DHT Tinyをブレッドボードで動作させること。プロジェクトに含まれる回路図とブレッドボード図に従って半分サイズのブレッドボードで回路を構築。
いくつかのヒント:
- DHT Tinyを専用ブレッドボードで構築し、別のブレッドボードでDHT TinyとUno/Piの接続を行う。
- ヘッダピン使用を推奨(DHT Tinyを単一ユニットとして接続/切断しやすくなる)。
- 標準ブレークアウェイメスヘッダをブレッドボードで使う場合、黒いプラスチックリムをピン中央に調整してブレッドボードに収まるようにする(ニードルノーズプライヤーで調整)。
- 超ロングブレークアウェイ0.1″メスヘッダがある場合はブレッドボード用に使用。PCB半田付け予定なら標準サイズヘッダを使用(超ロングはPCB非推奨)。
- ブレッドボードでヘッダピン使用時はメス-メスジャンパーワイヤが必要。ない場合はヘッダピンを省略し、オス-オスジャンパーワイヤで2基板間接続。
- ワイヤをチップから離して配置し、指を入れてチップを取り出しやすくする(プログラミング用)。
以下は筆者のDHT Tinyブレッドボード版の画像。
Arduino Unoへの接続
クイックテスト、デモ、またはRaspberry Piでうまくいかない場合のトラブルシューティングのために、DHT TinyをArduino Uno(または類似デバイス)に接続可能。
- GNDピンをUnoのGNDに接続。
- 5VピンをUnoの5Vに接続。
- RSTピンをUnoのD4に接続。
- SDAピンをUnoのA4に接続。
- SCLピンをUnoのA5に接続。
- INTピンをUnoのD3に接続し、ジャンパーでLEDを有効化。
DHT_Tiny_Master.inoスケッチをロードして実行。シリアルモニタに出力が表示されます。
2基板間のI2C接続時、SDAとSCLラインにプルアップ抵抗が重要。この回路では、ピンと5Vの間に2つの4.7kΩを接続。
以下は、Arduino Unoに接続したDHT Tinyブレッドボードの画像。
Raspberry Piへの接続
クイックテスト、デモ、またはRaspberry Piでうまくいかない場合のトラブルシューティングのために、DHT TinyをArduino Uno(または類似デバイス)に接続可能。
- GNDピンをRaspberry Pi 2/3のGND(ピン9)に接続。
- 5VピンをRaspberry Pi 2/3の5V(ピン2)に接続。
- RSTピンをRaspberry Pi 2/3のGPIO4(ピン7)に接続。
- SDAピンをRaspberry Pi 2/3のSDA(ピン3)に接続。
- SCLピンをRaspberry Pi 2/3のSCL(ピン5)に接続。
- INTピンをRaspberry Pi 2/3のGPIO17(ピン11)に接続し、LEDを有効化。
2基板間のI2C接続時、SDAとSCLラインにプルアップ抵抗が重要。この回路では、ピンと3V3の間に2つの4.7kΩを接続。
非常に重要! DHT TinyボードはRaspberry Piの5Vピンで給電されますが、プルアップ抵抗はRaspberry Piの3V3ピン(ピン1と17)に接続する必要があります。
以下は、Raspberry Pi 3に接続したDHT Tinyブレッドボードの画像。
Windows 10アプリケーションの実行
プロジェクト下部のGitHubリポジトリリンクからコードを取得し、解凍。Visual Studio 2015でユニバーサルアプリケーションのソースコードを開き、Raspberry Piに展開して管理コンソールから起動するか、Visual Studioからデバッグモードで実行。
Visual StudioでWindows 10 IoT Coreアプリケーションのコードを初めて実行する場合、以下のMicrosoft記事を参照:
- Deploying an App with Visual Studio
- Windows Device Portal
以下のビデオデモで、Raspberry Pi 3上でDHT Tinyに接続されたアプリケーションの動作を確認できます。
アプリケーションのハイライト
Windows 10 UWPアプリケーションは、DHT Tinyの全機能をデモするアプリケーションです。コードは現在の温度、湿度、その他のレジスタ値をデバイスから表示。UIではデバイスアドレスを含む設定変更も可能。
DHT Tinyライブラリ
サンプルコードは、DHT Tinyとやり取りするために書かれたライブラリを使用。このライブラリは即座に使用可能で、すべてのアプリケーションに直接組み込めます。
NuGetからライブラリを取得
プロジェクトに直接含めたくない場合、以下のコマンドでNuGetからDHT Tinyライブラリをダウンロード。Visual Studioのパッケージマネージャコンソールで実行:
PM> Install-Package IoT.DhtTiny
I2Cバス上のデバイス検索
DHT Tinyライブラリには、I2Cバス上のDHT Tinyデバイスを検索し、アドレスリストを返すメソッドが含まれます。このリストで見つかったデバイスを1つ以上初期化可能。デバイスアドレスを変更したが、何に設定したか忘れた場合に特に便利。コールバックメソッドはオプション。
// ***
// *** I2Cバス上のDHT Tinyデバイスを列挙
// ***
IEnumerable<byte> address = await DhtTiny.FindAllDhtTinyAsync(this.FindAllDhtTinyCallback);
// ***
// *** コールバックメソッド
// ***
private void FindAllDhtTinyCallback(I2cScanEventArgs e) {
int percentComplete = (int)((double)e.CurrentIndex / (double)e.Total * 100.0d);
this.Status = string.Format("Locating devices [0x{0:X2}] [{1}%] [Found = {2:##0}]...", e.CurrentAddress, percentComplete, e.Items.Count());
}
Raspberry Pi用DHT Tinyブレークアウトの回路図
ソフトウェアデモンストレーション
このビデオは、Raspberry Pi 3上で動作するユニバーサルアプリケーションと、ブレッドボード上のDHT Tinyの両方を示しています。
[VIDEO COMING SOON]
最終デバイスの作成
基板を作る最も簡単でコスト効率の良い方法は、AdafruitのPerma-Proto Quarter-sized Breadboard PCBのようなPCBプロトタイプボードを使用すること。下の画像は、このプロトタイプボードを使用したブレークアウトを示しています。電源レール部分をドリルで削っています。
詳細: DHT Tiny Breakout for the Raspberry Pi
製造プロセス
- Raspberry PiとDS18B20によるプロフェッショナルな温度監視
- Raspberry Pi 2とADS-WS1で屋外気象観測ステーションを構築
- ネイティブADCなしでRaspberry Pi上のアナログセンサーを測定
- HC-SR04超音波センサーをRaspberry Piに接続する実践ガイド
- Raspberry Piの可能性を最大限に引き出す必須アクセサリー
- MCP3008 ADCでRaspberry Piにアナログセンサーを読み取る
- SIGHT:視覚障害者を支援するスマートグラス
- SparkFun Qwiic HAT for Raspberry Pi 完全フックアップガイド
- Raspberry Pi 3 Model B+へのWindows 10 IoT Coreインストール:ステップバイステップガイド
- MonkMakes RRB2 キットで自作 Raspberry Pi ロボット – 詳細ガイド
- PiCy:自分だけの小さな Raspberry Pi 搭載ロボットを作ろう