Hobby Science&Experiment

愛と工作の日々

趣味でやっている工作や勉強したことのメモ書きです。

ESP32-WROOM-32DでDS18B20のアドレスを取得する

DS18B20はi-wire通信でデータを取得できる温度センサーです。防水プローブを入手したので、早速ESP32ボードで遊んでみたいと思います。アドレスの取得は必須ではありませんが、後々センサーの並列動作などに必要になるのでやっておきましょう!
こちらの方法を参考にします。Arduinoでのチュートリアルになってますが、ESP32ボードでも流用できました。
henrysbench.capnfatz.com

センサー入手

AmazonのVKLSVANなる出品者から399円で購入しました。レビューがないのが気になりますし、単価がもう少し安いのもありましたが、とりあえず単品で安いのが欲しかったのでこちらで購入。

防水性はなかなかしっかりしてそうです。Amazonではホワイト(DATA / MCUと書いてますが、実際は黄色のようです。
f:id:tara-chang:20200606000917p:plain

配線

以下の表のように配線しました。データ線は33pinに繋いでます(26pinでは何故かだめでした)。DATAケーブルとVCCケーブルの間に4.7kΩの抵抗を挿入しました。

DS18B20側 ESP32側
GND
GND
DATA(黄色ケーブル))
33番ピン(IO21)
VCC(赤ケーブル)
5Vピン

※pin nameとNo.の関係はこちらに詳しいです。

写真も載せておきます。
f:id:tara-chang:20200606001828p:plain

コード

pin番号部分(3行目)を33に変更。後は完全に参考リンクのまんまで動きました。

#include <OneWire.h>

OneWire  ds(33);  // This is where DQ of your DS18B20 will connect.

void setup(void) {
  Serial.begin(9600);
  getDeviceAddress();
}

void getDeviceAddress(void) {
  byte i;
  byte addr[8];
  
  Serial.println("Getting the address...\n\r");
  /* initiate a search for the OneWire object we created and read its value into
  addr array we declared above*/
//http://henrysbench.capnfatz.com/henrys-bench/arduino-temperature-measurements/ds18b20-arduino-user-manual-introduction-and-contents/ds18b20-user-manual-part-2-getting-the-device-address/  
  while(ds.search(addr)) {
    Serial.print("The address is:\t");
    //read each byte in the address array
    for( i = 0; i < 8; i++) {
      Serial.print("0x");
      if (addr[i] < 16) {
        Serial.print('0');
      }
      // print each byte in the address array in hex format
      Serial.print(addr[i], HEX);
      if (i < 7) {
        Serial.print(", ");
      }
    }
    // a check to make sure that what we read is correct.
    if ( OneWire::crc8( addr, 7) != addr[7]) {
        Serial.print("CRC is not valid!\n");
        return;
    }
  }
  ds.reset_search();
  return;
}

void loop(void) {
  // do nothing
}

結果

アドレスが表示されました!この固体に関しては0x28, 0x7E, 0x98, 0x79, 0xA2, 0x01, 0x03, 0xB8がアドレスとなります。
f:id:tara-chang:20200605234706p:plain