部品 · 読了まで11分

DS18B20温度センサーの使い方:Arduino、ESP32、Pico

DS18B20とArduinoの配線:1-Wire、4.7 kΩのプルアップ抵抗、防水プローブ、1本のピンに複数のセンサー、OneWireとDallasTemperatureのコード、ESP32とPicoの例を解説します。

DS18B20はデジタル温度センサーで、Arduinoで温度を測るとても正確で柔軟な方法のひとつです。測定範囲は−55 °C〜+125 °Cで、−10 °C〜+85 °Cでは±0.5 °Cの精度があり、結果をアナログ電圧ではなくデジタルの数値として送るため、長いケーブルでも読み取り値が劣化しません。最大の強みは1-Wire通信です。1本のデータピンに何十個ものDS18B20をつなぎ、それぞれ固有のアドレスで個別に読み取れます。

この記事では、DS18B20のしくみ、1-Wireバスの考え方、4.7 kΩのプルアップ抵抗が必ず必要な理由、防水プローブ版と線の色を解説します。続いて、OneWireとDallasTemperatureライブラリを使った1個と複数個のセンサーのコード、ESP32でのノンブロッキング読み取り、Raspberry Pi PicoでのMicroPythonによる使い方をステップごとに見ていきます。最後に、よくある−127 °Cと85 °Cのエラーの原因と対処法をまとめています。

DS18B20デジタル温度センサー
DS18B20:3本足のTO-92パッケージに入ったデジタル温度センサーです。同じチップがステンレス管に入った防水プローブとしても販売されています。

DS18B20とは?そのしくみ

DS18B20の内部には、温度検出素子、A/Dコンバーター、小さなメモリ(スクラッチパッド)、工場で書き込まれた固有の64ビットのシリアル番号があります。マイコンが変換コマンドを送ると、センサーは温度を測り、結果を2バイトの数値としてメモリに書き込み、読み出されるのを待ちます。測定はセンサー自身が行うため、Arduinoのアナログ入力、基準電圧、ケーブルの抵抗による誤差がありません。NTCサーミスタと違って校正表や計算式も不要で、読み取った値がそのまま摂氏の温度です。

項目値
測定範囲−55 °C〜+125 °C
精度±0.5 °C(−10 °C〜+85 °C)
分解能9〜12ビットから選択(0.5 °C〜0.0625 °C)
電源電圧3.0〜5.5 V(Arduino、ESP32、Picoで動作)
電流変換中は約1 mA、待機中は1 µA未満
インターフェース1-Wire(データ線1本+GND)
アドレス64ビットのROMコード、ファミリーコード0x28
パッケージTO-92(3本足)またはステンレス製防水プローブ

センサーの分解能はソフトウェアで選べます。分解能を上げると刻みは細かくなりますが、変換時間が長くなります。初期値は12ビットで、ほとんどのプロジェクトにはこれが最適です。とても速い読み取りが必要なら、9ビットや10ビットに下げられます。

分解能刻み最大変換時間
9ビット0.5 °C93.75 ms
10ビット0.25 °C187.5 ms
11ビット0.125 °C375 ms
12ビット(初期値)0.0625 °C750 ms

1-Wireとは?1本の線で通信するしくみ

名前のとおり、1-Wireはグランド(GND)を共有したうえで1本の線でデータを運ぶプロトコルです。バスには1つのマスター(Arduino)と1つ以上のスレーブデバイス(DS18B20)がつながります。バスが空いているときはプルアップ抵抗がラインをHIGHに保ちます。送信したい側はラインを短い時間だけLOWに引き下げ、ビットはこのLOWパルスの長さ(マイクロ秒単位)で表されます。通信は毎回リセットパルスから始まり、センサーは「ここにいます」というプレゼンスパルスで応答します。

どのデバイスもラインを強制的にHIGHにしない(オープンドレイン方式)ため、同じバスに好きなだけセンサーを並べても衝突しません。マスターはまずサーチコマンドでバス上のすべての64ビットアドレスを見つけ、次に目的のセンサーをアドレスで選んで通信します。こうして5か所の温度を測るのに、5本ではなく1本のピンで済みます。

DS18B20、DHT11、DHT22、NTCの比較

項目DS18B20DHT11DHT22NTCサーミスタ
温度範囲−55〜+125 °C0〜50 °C−40〜+80 °C約−40〜+125 °C(型番による)
精度±0.5 °C±2 °C±0.5 °C校正しだい
出力デジタル(1-Wire)デジタル(単線)デジタル(単線)アナログ(抵抗値が変化)
湿度なしありありなし
防水版あり(ステンレスプローブ)なしなしあり(プローブ)
1本のピンに複数のセンサー可能不可不可不可

まとめると、湿度も必要ならDHT11やDHT22が適しています。水、土、配管、冷凍庫の温度を測りたいとき、1本のピンで複数の場所を監視したいとき、氷点下の温度を扱うときは、DS18B20にかなうものはありません。

DS18B20のピン配置と線の色

ピンTO-92(平らな面を手前に)防水プローブの線機能
GND1(左)黒グランド
DQ2(中央)黄(一部のプローブは白)1-Wireデータ線
VDD3(右)赤3.0〜5.5 Vの電源
VDDとGNDを逆につなぐと、DS18B20は数秒で触れないほど熱くなり、壊れてしまいます。最初のテストではセンサーに指で触れてみてください。熱くなっていたらすぐに電源を切り、ピンの順番を確認しましょう。線の色はメーカーによって異なることがあるため、迷ったら販売店の図を確認してください。

DS18B20の配線:Arduino Uno、ESP32、Pico

DS18B20Arduino UnoESP32Raspberry Pi Pico
VDD(赤)5V3V33V3(OUT)、36番ピン
GND(黒)GNDGNDGND、38番ピン
DQ(黄)D2GPIO 4GP22、29番ピン
4.7 kΩプルアップ抵抗DQと5Vの間DQと3V3の間DQと3V3の間

この回路ではプルアップ抵抗が欠かせません。1-Wireバス上のデバイスはラインをLOWに引き下げることしかできず、HIGHに戻すのはこの抵抗の役目です。抵抗がないとラインが浮いた状態になり、センサーが見つからず、ライブラリは−127 °Cを返します。4.7 kΩなら電流を小さく抑えつつ、ラインを十分速く引き上げられます。ラインがLOWのとき、オームの法則からI = 5 V / 4700 Ω ≈ 1.06 mAです。4本帯の4.7 kΩ抵抗の色は黄、紫、赤、金で、確実を期すならカラーコードツールを使ってください。DS18B20モジュール(センサーを抵抗やLEDと一緒に小さな基板に載せたもの)の中には、この抵抗がすでに付いているものもあり、その場合は追加する必要はありません。

長いケーブル(目安として10メートル以上)では線の静電容量が大きくなり、信号が遅くなります。その場合はプルアップ抵抗を3.3 kΩや2.2 kΩに下げ、ツイストペアケーブル(たとえばCAT5ケーブルの1組)を使い、センサーは星形ではなく1本の幹線に沿って順番につないでください。適切なケーブルと抵抗を使えば、数十メートルの配線でも問題なく動きます。

ライブラリのインストール

  1. Arduino IDEで「ツール」>「ライブラリを管理」を開きます。
  2. 検索欄にDallasTemperatureと入力し、Miles Burton作のライブラリをインストールします。
  3. 依存ライブラリについて聞かれたら全てをインストールを選び、Paul Stoffregen作のOneWireライブラリも一緒にインストールします。聞かれなかった場合は、OneWireを検索して別途インストールしてください。
  4. 必要なら「ファイル」>「スケッチ例」>「DallasTemperature」>「Simple」を開き、ピン番号を回路に合わせて変更して試してみましょう。

最初のスケッチ:DS18B20を1個読む

C++ (Arduino IDE)
1#include <OneWire.h>
2#include <DallasTemperature.h>
3
4#define ONE_WIRE_BUS 2                    // DS18B20 veri pini (DQ) / data pin (DQ)
5
6OneWire oneWire(ONE_WIRE_BUS);            // 1-Wire hattı / 1-Wire bus
7DallasTemperature sensors(&oneWire);      // sensör kütüphanesi / sensor library
8
9void setup() {
10  Serial.begin(9600);
11  sensors.begin();                        // hattaki sensörleri bul / find sensors on the bus
12  Serial.print(F("Sensor sayisi / Sensor count: "));
13  Serial.println(sensors.getDeviceCount());
14}
15
16void loop() {
17  sensors.requestTemperatures();          // ölçümü başlat, bitmesini bekle / start conversion and wait
18  float tempC = sensors.getTempCByIndex(0);  // ilk sensörün sıcaklığı / first sensor's temperature
19
20  if (tempC == DEVICE_DISCONNECTED_C) {   // -127: sensör yanıt vermedi / sensor did not respond
21    Serial.println(F("Hata: sensor yok / Error: no sensor"));
22  } else {
23    Serial.print(F("Sicaklik / Temperature: "));
24    Serial.print(tempC, 2);
25    Serial.println(F(" C"));
26  }
27  delay(1000);
28}
関数働き
sensors.begin()1-Wireバスをスキャンし、見つかったセンサーを登録します
sensors.getDeviceCount()バス上のセンサーの数を返します
sensors.requestTemperatures()バス上のすべてのセンサーに変換コマンドを送り、初期設定では完了するまで待ちます
sensors.getTempCByIndex(0)リストの最初のセンサーの温度を摂氏で返します
sensors.getTempFByIndex(0)同じ値を華氏で返します
sensors.setResolution(12)分解能を9〜12ビットの間で設定します
DEVICE_DISCONNECTED_Cセンサーが応答しないときに返る値:−127

シリアルモニタを9600 baudに設定すると、1秒ごとに「Sicaklik / Temperature: 23.44 C」のような行が表示されます。下の桁が12ビット分解能の刻みである0.0625の倍数で変わることに気づくでしょう。センサーを指でつまむと、数秒で温度が上がるはずです。シリアルモニタに−127と表示されるなら、センサーがまったく見つかっていません。85と表示されるなら、センサーは見つかっていますが、変換が終わる前に読み取っています。どちらの対処法も記事の最後の表にあります。

同じピンで複数のDS18B20を使う

複数のセンサーをつなぐには、すべてのVDD、GND、DQピンを並列に配線するだけです。バス全体で使うプルアップ抵抗は4.7 kΩが1本だけです。getTempCByIndex()での読み取りは簡単ですが、順番は差し込んだ順ではなく、センサーのアドレスで決まります。センサーを1個交換すると順番が変わることがあります。そのため、常設のプロジェクトでは各センサーを固有のアドレスで読むべきです。次のスケッチは、バス上のすべてのセンサーを見つけてアドレスを表示し、それぞれの温度をアドレスで読み取ります。

C++ (Arduino IDE)
1#include <OneWire.h>
2#include <DallasTemperature.h>
3
4#define ONE_WIRE_BUS 2                    // tüm sensörler aynı pinde / all sensors on the same pin
5
6OneWire oneWire(ONE_WIRE_BUS);
7DallasTemperature sensors(&oneWire);
8DeviceAddress addr;                       // 8 baytlık sensör adresi / 8-byte sensor address
9int count = 0;
10
11void printAddress(const DeviceAddress a) {
12  for (uint8_t i = 0; i < 8; i++) {
13    Serial.print(F("0x"));
14    if (a[i] < 0x10) Serial.print('0');   // tek haneyi sıfırla tamamla / pad single digit
15    Serial.print(a[i], HEX);
16    if (i < 7) Serial.print(F(", "));
17  }
18}
19
20void setup() {
21  Serial.begin(9600);
22  sensors.begin();
23  count = sensors.getDeviceCount();       // hatta kaç sensör var? / how many sensors on the bus?
24  Serial.print(F("Sensor sayisi / Sensor count: "));
25  Serial.println(count);
26  sensors.setResolution(12);              // hepsi 12 bit (0,0625 C) / all 12-bit (0.0625 C)
27}
28
29void loop() {
30  sensors.requestTemperatures();          // tüm sensörler aynı anda ölçer / all sensors convert at once
31  for (int i = 0; i < count; i++) {
32    if (!sensors.getAddress(addr, i)) continue;   // adresi al / get the address
33    Serial.print(F("Sensor "));
34    Serial.print(i);
35    Serial.print(F(" { "));
36    printAddress(addr);
37    Serial.print(F(" }: "));
38    Serial.print(sensors.getTempC(addr), 2);      // adrese göre oku / read by address
39    Serial.println(F(" C"));
40  }
41  Serial.println();
42  delay(2000);
43}

スケッチを一度実行し、センサーを1個ずつ温めて(たとえば手で握って)、どのアドレスがどの場所に対応するかを確かめます。次に、シリアルモニタで確認したアドレスをコードに直接書き込みます。DeviceAddress waterSensor = {0x28, 0xFF, 0x64, 0x1E, 0x0F, 0x16, 0x03, 0x90};のような行を追加し、sensors.getTempC(waterSensor)で読み取ります。DS18B20のアドレスの最初のバイトは必ず0x28で、最後のバイトはアドレスが正しいかを確かめるCRCです。こうすれば、センサーがどんな順番でも、「水」「屋外」「ボイラー」の値はいつも正しい場所から届きます。

ESP32でDS18B20を使う:ノンブロッキング読み取り

ESP32でも、同じOneWireとDallasTemperatureライブラリでDS18B20が動きます。データ線にはGPIO 4がおすすめです。GPIO 34〜39は入力専用で1-WireラインをLOWに引き下げられないため使わないでください。また、起動時のレベルが重要なGPIO 0、2、12、15も避けましょう。センサーとプルアップ抵抗は必ず3V3につないでください。プルアップ抵抗を5 Vにつなぐと、ESP32のピンに5 Vがかかってしまいます。

初期設定では、requestTemperatures()は12ビットのとき750 ms待ちます。その間ボードはほかのことができず、Webサーバー、ボタン、ディスプレイが止まってしまいます。解決策はsetWaitForConversion(false)で待ち時間をなくし、millis()を使って750 ms後に結果を読むことです。次のESP32のスケッチでは、温度を測っている間もLEDがなめらかに点滅し続けます。

C++ (Arduino IDE)
1#include <OneWire.h>
2#include <DallasTemperature.h>
3
4const int ONE_WIRE_PIN = 4;               // ESP32 GPIO 4 (DQ)
5const int LED_PIN = 2;                    // dahili LED (çoğu kartta) / onboard LED (most boards)
6
7OneWire oneWire(ONE_WIRE_PIN);
8DallasTemperature sensors(&oneWire);
9
10unsigned long requestTime = 0;
11unsigned long lastBlink = 0;
12bool converting = false;
13
14void setup() {
15  Serial.begin(115200);
16  pinMode(LED_PIN, OUTPUT);
17  sensors.begin();
18  sensors.setResolution(12);
19  sensors.setWaitForConversion(false);    // requestTemperatures() beklemesin / do not block
20}
21
22void loop() {
23  unsigned long now = millis();
24
25  if (!converting) {
26    sensors.requestTemperatures();        // ölçümü başlat, hemen dön / start and return at once
27    requestTime = now;
28    converting = true;
29  }
30
31  if (converting && now - requestTime >= 750) {   // 12 bit için 750 ms / 750 ms for 12-bit
32    float t = sensors.getTempCByIndex(0);
33    if (t == DEVICE_DISCONNECTED_C) {
34      Serial.println("Sensor yok / No sensor");
35    } else {
36      Serial.printf("Sicaklik / Temperature: %.2f C\n", t);
37    }
38    converting = false;                   // bir sonraki ölçüme geç / move to the next reading
39  }
40
41  if (now - lastBlink >= 250) {           // bu arada LED yanıp söner / meanwhile the LED blinks
42    lastBlink = now;
43    digitalWrite(LED_PIN, !digitalRead(LED_PIN));
44  }
45}

このパターンはWi-Fiプロジェクトでとくに重要です。ESP32はWebページを配信したり、インターネットにデータを送ったり、ディスプレイを更新したりしながら温度を測れます。ESP32が初めてなら、ピンの選び方とセットアップについてはESP32とは?を参照してください。ボードのピン配置はピン配置ツールでも確認できます。

Raspberry Pi PicoとMicroPythonでDS18B20を使う

Raspberry Pi PicoのMicroPythonにはonewireとds18x20モジュールが組み込まれているため、追加で書き込むファイルはありません。センサーを3V3(OUT)とGNDに、データ線をGP22につなぎ、DQと3V3の間の4.7 kΩのプルアップ抵抗も忘れないでください。Picoの内部プルアップ抵抗は1-Wireには弱すぎます。

MicroPython
1from machine import Pin
2import onewire, ds18x20, time, binascii
3
4ds_pin = Pin(22)                                   # DQ -> GP22 (fiziksel pin 29 / physical pin 29)
5sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
6
7roms = sensor.scan()                               # hattaki sensör adresleri / sensor addresses on the bus
8print("Sensor sayisi / Sensor count:", len(roms))
9
10while True:
11    sensor.convert_temp()                          # hepsi aynı anda ölçer / all sensors convert at once
12    time.sleep_ms(750)                             # 12 bit dönüşüm süresi / 12-bit conversion time
13    for rom in roms:
14        t = sensor.read_temp(rom)                  # adrese göre oku / read by address
15        print(binascii.hexlify(rom).decode(), "{:.2f} C".format(t))
16    time.sleep(2)

scan()はバス上のすべてのセンサーの8バイトのアドレスをリストで返します。convert_temp()はすべてのセンサーに一度に変換コマンドを送るので、そのあと750 ms待ちます。read_temp(rom)はそのアドレスのセンサーの温度を摂氏で読み取ります。リストが空で返ってきたら、まずプルアップ抵抗とピン番号を確認してください。Picoが初めてなら、MicroPythonのセットアップについてはRaspberry Pi Picoとは?を参照してください。

防水DS18B20プローブ

DS18B20でいちばん人気のある形は防水プローブで、チップをステンレス管に入れて樹脂で封止したものです。一般的には直径6 mm、長さ50 mmの先端と、1メートルの3芯ケーブルでできています(2メートル、3メートル、5メートル版もあります)。水槽、貯水タンク、給湯ボイラー、土、冷蔵庫、冷凍庫に最適です。ステンレスの先端は短時間なら沸騰したお湯に浸けられますが、ケーブルはたいていPVCなので、ケーブルと接合部を85〜100 °C以上に長時間さらさないでください。プローブのケースは熱がセンサーに伝わるのを遅らせるため、急な温度変化のあとは読み取り値が安定するまで数秒から数十秒かかることがあります。

市場には互換品のDS18B20が多く出回っています。中には仕様どおりの精度が出ないものや、寄生電源モードで動かないものもあります。2個のセンサーを同じコップの水に浸けて読み取り値を比べるのが、信頼できるかを見分ける簡単な方法です。0.5 °C以上ずれる場合は、コードで小さな補正値(オフセット)を加えられます。

DS18B20のプロジェクトアイデア

  • 水槽用サーモスタット:防水プローブとリレーモジュールでヒーターをオン・オフし、ヒステリシスを使って水温を25〜26 °Cに保ちます。
  • 多点温度モニタリング:1本のピンに5個のセンサーをつなぎ、部屋、屋外、冷蔵庫、ボイラーの往き・戻りの水温を同時に監視します。
  • OLED温度計:OLEDディスプレイに温度を大きな数字で表示し、その日の最低・最高温度も一緒に表示します。
  • LCD温度表示:2個のセンサーの読み取り値をI2C LCDディスプレイの2行に表示します。
  • Wi-Fi温度ページ:ESP32で測った温度を、スマートフォンで開いたWebページでリアルタイムに確認します。
  • 温室の制御:DS18B20で土の温度を、土壌水分センサーで土の水分を測り、水やりのタイミングを決めます。

よくあるトラブルと対処法

症状考えられる原因対処法
温度が−127 °Cになるセンサーが見つからない:プルアップ抵抗がない、断線、ピンの間違い、VDDとGNDが逆4.7 kΩの抵抗と配線を確認し、getDeviceCount()が0を返していないか確かめる
温度がいつも85 °Cになる変換が終わる前に読み取っている、または電源不足(85 °Cは電源投入時の値)requestTemperatures()のあと変換時間だけ待つ。VDDに直接電源を供給する
センサー数が0DQにプルアップ抵抗がない、またはコードのピン番号が違うピン番号と抵抗を確認し、配線を短くする
センサーがとても熱くなるVDDとGNDが逆すぐに電源を切り、ピンの順番を直す
ときどき−127に落ちる長いケーブル、弱いプルアップ抵抗、またはノイズプルアップ抵抗を2.2〜3.3 kΩに下げ、ツイストペアケーブルを使い、コードで異常な値を読み飛ばす
センサーの順番が変わったインデックスの順番は取り付け方ではなくアドレスで決まる各センサーをアドレスで読む:getTempC(address)
プログラムが止まり、ボタンの反応が遅いrequestTemperatures()が読み取りのたびに750 msブロックしているsetWaitForConversion(false)とmillis()を使う
DS18B20は、VDDの足をGNDにつなぐ寄生電源モードで、2本の線だけで動かすこともできます。このモードでは、センサーはデータ線から電力を得ます。ただし、変換中に強いプルアップが必要で、互換品のセンサーでは問題が起きやすく、100 °Cを超える環境ではおすすめできません。3本の線を引けるなら、必ず通常の電源モードを使ってください。

丈夫さ、防水プローブ、1本のピンに多数のセンサーをつなげる点から、DS18B20は電子工作でとくに便利な温度センサーのひとつです。温度をディスプレイに表示したり、リレーでヒーターやファンを動かしたり、ESP32でオンラインにしたりできます。BlueGraysアプリには、DHT11やNTCを使った温度プロジェクト、I2C LCDディスプレイ、ESP32の温度ロガー、ArduinoとESP32のスマート灌水が、ステップごとの回路図とコード付きでそろっています。

よくある質問

DS18B20にはどの抵抗が必要ですか?

DS18B20のデータ線(DQ)と電源(VDD)の間に4.7 kΩのプルアップ抵抗を入れます。バスを共有するセンサーが何個あっても、抵抗は1本で十分です。ケーブルが約10メートルより長い場合は、2.2〜3.3 kΩに下げると通信が安定します。

DS18B20が−127度を示すのはなぜですか?

−127は、センサーから応答がないときにDallasTemperatureライブラリが返すエラー値です。よくある原因は、プルアップ抵抗がない、ピン番号の間違い、断線や接触不良、VDDとGNDの逆接続です。まずgetDeviceCount()でセンサーが見つかっているかを確認してください。

DS18B20が85度を示すのはなぜですか?

85 °Cは、DS18B20の電源投入時のメモリの初期値です。変換が終わる前に温度を読み取ったときや、変換中にセンサーへ十分な電力が供給されなかったときに表示されます。変換コマンドのあと変換時間だけ待ち、センサーにVDDピンから直接電源を供給すれば解決します。

Arduinoの1本のピンにDS18B20を何個つなげますか?

DS18B20はそれぞれ固有の64ビットアドレスを持つため、理論上は多くのセンサーで1本のピンを共有できます。実際には10〜20個までなら問題なく動きます。それ以上になると、ケーブルの長さ、プルアップ抵抗の値、電源を慎重に選ぶ必要があります。すべてのセンサーは同じデータ線と1本のプルアップ抵抗を共有します。

DS18B20は防水ですか?

TO-92パッケージの単体のDS18B20は防水ではありません。一方、ステンレス管に入ったプローブ版は、水などの液体に浸けたり土に埋めたりできます。プローブのケーブルはたいていPVCなので、ケーブルと接合部が長時間高温にさらされないよう注意してください。

DS18B20とDHT22、どちらがよいですか?

どちらも±0.5 °Cの精度ですが、用途が異なります。DHT22は温度に加えて湿度も測れ、室内環境の測定に最適です。DS18B20は湿度を測れませんが、−55 °Cまで測れ、防水プローブがあり、1本のピンに複数のセンサーをつなげます。

全プロジェクトを見る
DHT11で温度と湿度を測定
#55中級

DHT11で温度と湿度を測定

部屋の温度は何度で、空気は湿っているでしょうか、それとも乾燥しているでしょうか?DHT11センサーが温度と湿度を測定し、Arduinoが2行のLCDディスプレイに値を表示して、数秒ごとに更新します。センサーに異常があればエラーメッセージが表示されます。自分だけの小さな気象観測装置を作る第一歩です。

4.7(47)
73
NTCと2x16 LCDディスプレイで温度を測定
#44初級
プレミアム

NTCと2x16 LCDディスプレイで温度を測定

小さなビーズのようなセンサーで周囲の温度を測ります。NTCというこの部品は、温まるほど電気が流れやすくなります。Arduinoがその変化を読み取り、数式で摂氏温度に変換して、2行のLCDディスプレイに0.5秒ごとに表示します。手のひらでセンサーを温めて、数値が上がる様子を見るのも楽しみの1つです。

4.5(33)
44
ESP32 DHT22温湿度計(LCDディスプレイ付き)
#117中級

ESP32 DHT22温湿度計(LCDディスプレイ付き)

DHT22センサーで周囲の温度と湿度を測定し、16x2 I2C LCDにリアルタイムで表示するプロジェクトです。Adafruit DHTライブラリを使い、1本の信号線を使うプロトコルでセンサーからデータを読み取ります。IoT気象観測装置やスマートホームの自動化、温室の環境監視システムの基礎となります。ESP32のGPIO 4ピンを介してDHT22と通信します。

4.8(38)
56
ESP32温度データロガー(DHT22 + DS1307 RTC + microSD + OLED)
#144上級
プレミアム

ESP32温度データロガー(DHT22 + DS1307 RTC + microSD + OLED)

ESP32で日時付きの温度・湿度記録システムを作ります!DHT22で1分ごとに温度と湿度を読み取り、DS1307 RTCから取得した日時とともにmicroSDカードへCSV形式で記録します。OLEDには最新の温度を大きな文字で表示し、湿度のパーセント値、日時、総記録数も表示します。SDカードの/temp_log.csvファイルはExcel、Google Sheets、Pythonのpandasで開いて分析できます。温室の監視、家や部屋の温度管理、実験室のデータ収集、食品の保管環境や養蜂箱の監視に適しています。

4.7(7)
12
I2CでLCDディスプレイを使う
#32初級
プレミアム

I2CでLCDディスプレイを使う

Arduinoにディスプレイを接続し、最初のメッセージを表示します。2行のLCDディスプレイは数本の配線だけで接続できます。まず上の行にあいさつを表示し、次に下の行にもう1つのメッセージを表示します。その後、表示を消去して最初から繰り返します。温度や時刻、スコアを表示するプロジェクトは、すべてこのステップから始まります。

4.8(53)
70
ESP32 I2C LCDディスプレイ(16x2)
#119中級
プレミアム

ESP32 I2C LCDディスプレイ(16x2)

このプロジェクトでは、16x2文字のLCDをI2CでESP32に接続して文字を表示します。I2Cならデータ用の2本のピン(SDAとSCL)だけで制御でき、従来のパラレル接続のように6本以上のピンを使わずに済みます。コードでは1行目に固定メッセージ、2行目に毎秒増えるカウンターを表示します。また、起動時にI2Cスキャナーを実行し、ディスプレイのアドレス(通常は0x27または0x3F)をシリアルモニタに表示します。

4.9(23)
40
ドットマトリクス時計・カレンダー・気象ステーション(MAX7219、DS1307)
#85中級
プレミアム

ドットマトリクス時計・カレンダー・気象ステーション(MAX7219、DS1307)

机や壁に置いて、時刻、日付、室内の温湿度を順番に表示する、文字がスクロールする表示板です。8x32のLEDディスプレイには、まず摂氏と華氏の温度、次に湿度、そして2つの点が1秒ごとに点滅する時計が表示されます。分が変わると、曜日と日付がスクロール表示されます。時計モジュールが時刻を保持し、DHT22センサーが温度と湿度を測定します。

5.0(50)
66