当社は、最高の 1-Wire DS18B20 センサー コネクタを幅広く提供しています, ナノフレックスを含む, ディスプレイポート, USB, 太陽, SATA, HDMI, それはアイデアです, SAS & もっとたくさん. すべてのケーブルは最高の業界標準に従って製造されています. ボックス構築にセンサー回路アセンブリを使用すると、設計とマーケティングに集中できます, コストを削減する, 組立ラインのメリットを享受できます, QAプロセス, 製造の専門知識.
DS18B20 センサーは、 “1-ワイヤー” プロトコル, つまり、マイクロコントローラーとのすべての通信に単一のデータラインを使用します。, 複数のセンサーを同じラインに接続し、固有の 64 ビット シリアル コードで識別できるようにします。; この単一のデータ ラインは抵抗器によってハイにプルされ、センサーは特定のタイムスロット中にラインをローにプルしてデータを送信し、情報ビットを送信します。.
DS18B20 温度センサー: DS18B20 防水プローブは水中での使用向けに設計されています。, 濡れた環境や湿気の多い環境でも水や湿気による損傷を受けることなく動作可能.
温度センサーの電源電圧: 3.0V~5.25V;
使用温度範囲:-55 ℃to +125 ℃ (-67 ℉~ +257 ℉);
9 ビットから 12 ビットまでの摂氏温度測定を提供します;
アダプタモジュールにはプルアップ抵抗が装備されています, 外部抵抗なしで Raspberry Pi の GPIO に直接接続します。;
このアダプター モジュール キットを使用すると、防水温度センサーをプロジェクトに簡単に接続できます。.
1. 1-Wire プロトコルに関する重要なポイント:
単一のデータ行:
センサーとマイクロコントローラー間の通信に必要なワイヤは 1 本だけです.
半二重通信:
データは双方向に送信可能, ただし一度に一方向のみ.
パラサイトパワー:
DS18B20は通信中にデータラインから直接電力を供給できます。, 場合によっては別の電源が不要になる.
固有のデバイスアドレス:
各 DS18B20 センサーには固有の 64 ビット シリアル コードがあり、マイクロコントローラーがバス上の個々のセンサーを識別してアドレス指定できるようになります。.
DS18B20との通信手順:
1.1 リセットパルス:
マイクロコントローラーは、データラインを特定の期間ローレベルに引き下げることで通信を開始します。 (パルスをリセットします).
1.2 プレゼンスパルス:
DS18B20 がバス上にある場合, 短いパルスで応答します, その存在を示す.
1.3 ROMコマンド:
マイクロコントローラーは ROM コマンドを送信して、特定のセンサーの一意の 64 ビット コードを読み取ります。 (“ROMを一致させます”) またはバス上のすべてのセンサーに対処する (“出荷室”).
1.4 機能コマンド:
ご希望の操作に応じて (温度を読み取るような), マイクロコントローラーは特定の機能コマンドをセンサーに送信します。.
1.5 データ転送:
データはビットごとに送信されます, センサーがデータ ラインを Low にして送信します。 ‘0’ そしてラインをハイにして「1」を送信します.
2. DS18B20の1-Wire通信プロトコルの詳細説明
DS18B20 センサーが広く使用されている理由は、その独自の通信プロトコルによるところが大きい – 1-有線通信プロトコル. このプロトコルはハードウェア接続の要件を簡素化し、データを送信する効率的な方法を提供します。. この章では、1 ライン通信プロトコルの動作メカニズムとデータ交換プロセスを深く分析し、その後のプログラミング実践のための強固な基盤を築きます。.
2.1 1-Wire通信プロトコルの基礎
2.1.1 1-Wire通信プロトコルの特徴:
DS18B20 1-Wire 通信プロトコルとも呼ばれます “シングルバス” テクノロジー. 以下のような特徴があります: – シングルバス通信: 双方向データ伝送には 1 本のデータ ラインのみが使用されます, 従来の多線式センサー通信方式と比べて、配線の複雑さが大幅に軽減されます。. – マルチデバイス接続: 1 つのデータ バス上で複数のデバイスの接続をサポート, デバイス識別コードを介して識別および通信します. – 低消費電力: コミュニケーション中, 通信に参加していないとき、デバイスは低電力スタンバイ状態になる可能性があります. – 高精度: データ通信時間が短縮されることで、, 外部干渉を軽減し、データの精度を向上させることができます.
2.1.2 1線式通信のデータフォーマットとタイミング解析
1-wire 通信プロトコルのデータ形式は特定のタイミング規則に従います。. 初期化タイミングも含む, 書き込みタイミングと読み出しタイミング:
初期化のタイミング: ホストが最初に存在検出タイミングを開始します (プレゼンスパルス) バスを一定時間停車させることで, センサーは応答としてプレゼンスパルスを送信します.
書き込みタイミング: ホストが書き込みタイミングを送信したとき, まずバスを約1時間停止させます 1-15 マイクロ秒, その後バスを解放します, そしてセンサーがバスを引き下げます 60-120 応答までのマイクロ秒.
読み出しタイミング: ホストは、バスをプルダウンして解放することで、センサーにデータを送信するように通知します。, センサーは一定の遅延後にデータ ビットをバス上に出力します。.
2.2 データ通信のソフトウェア実装
2.2.1 1線通信の初期化とリセット
ソフトウェアレベルで, 1-Wire通信の初期化とリセットは通信の最初のステップです. 以下は、このプロセスを実装するための疑似コードです。:
// OneWire通信初期化関数
void OneWire_Init() {
// バスを入力モードに設定し、プルアップ抵抗を有効にします。
ピンモードの設定(DS18B20_PIN, インプットプルアップ);
// バスが空くまで待ちます
遅延マイクロ秒(1);
// リセットパルスを送信する
OneWire_リセット();
}
// OneWire通信リセット機能
void OneWire_Reset() {
// バスを降ろしてください
ピンモードの設定(DS18B20_PIN, 出力_LOW);
遅延マイクロ秒(480);
// バスを放す
ピンモードの設定(DS18B20_PIN, インプットプルアップ);
遅延マイクロ秒(70);
// 脈ありを待つ
もし (!OneWirePresence を待つ())
// 脈拍が検出されませんでした, センサーが接続されていないか、初期化に失敗している可能性があります
ハンドルエラー();
遅延マイクロ秒(410);
}
// 脈ありを待っている
bool WaitForOneWirePresence() {
ReadPin を返す(DS18B20_PIN) == 0; // 低レベルが信号の存在であると仮定します
}
2.2.2 データの読み取りおよび書き込み操作
データの読み取りおよび書き込み操作はセンサー通信の中核部分です. 次のコードは、単線バスにバイトを書き込む方法を示しています。:
// 単線バスにバイトを書き込む
void OneWire_WriteByte(バイトデータ) {
のために (int i = 0; 私 < 8; I ++) {
OneWire_WriteBit(データ & 0x01);
データ >>= 1;
}
}
// 単線バスにビットを書き込む
OneWire_WriteBit を無効にする(ビットデータ) {
ピンモードの設定(DS18B20_PIN, 出力_LOW);
もし (データ) {
// 書き込み時にバスを解放する 1
ピンモードの設定(DS18B20_PIN, インプットプルアップ);
遅延マイクロ秒(1);
} それ以外 {
// 書き込み中はバスを Low にプルし続けます 0
遅延マイクロ秒(60);
}
ピンモードの設定(DS18B20_PIN, インプットプルアップ);
遅延マイクロ秒(1);
}
次はバイトを読み取る関数です:
// 単線バスからバイトを読み取る
バイトOneWire_ReadByte() {
バイトデータ = 0;
のために (int i = 0; 私 < 8; I ++) {
データ >>= 1;
もし (OneWire_ReadBit())
データ |= 0x80;
}
データを返します;
}
// 単線バスから少し読み取る
ビット OneWire_ReadBit() {
ピンモードの設定(DS18B20_PIN, 出力_LOW);
ピンモードの設定(DS18B20_PIN, インプットプルアップ);
遅延マイクロ秒(3);
bool 結果 = ReadPin(DS18B20_PIN);
遅延マイクロ秒(57);
結果を返す;
}
2.2.3 OneWire通信の検証メカニズム
OneWire 通信プロトコルは、データ交換プロセスで単純な検証メカニズムを使用します。, 通常は、書き込まれたデータを読み戻してデータの正確性を検証します。. 以下は書き込まれたデータを検証するサンプルコードです。:
バイトデータ = 0x55; // 送信するデータを想定します
OneWire_WriteByte(データ); // OneWire バスにデータを書き込む
バイト読み取りデータ = OneWire_ReadByte(); // OneWire バスからデータをリードバックする
もし (データ読み取り != データ) {
ハンドルエラー(); // 読み出したデータと書き込んだデータが一致しない場合, エラーを処理する
English
Afrikaans
العربية
বাংলা
bosanski jezik
Български
Català
粤语
中文(简体)
中文(漢字)
Hrvatski
Čeština
Nederlands
Eesti keel
Suomi
Français
Deutsch
Ελληνικά
हिन्दी; हिंदी
Magyar
Bahasa Indonesia
Italiano
日本語
한국어
Latviešu valoda
Lietuvių kalba
македонски јазик
Bahasa Melayu
Norsk
پارسی
Polski
Português
Română
Русский
Cрпски језик
Slovenčina
Slovenščina
Español
Svenska
ภาษาไทย
Türkçe
Українська
اردو
Tiếng Việt





