ESP32-WROOM-32DでDS18B20のアドレスを取得する
DS18B20はi-wire通信でデータを取得できる温度センサーです。防水プローブを入手したので、早速ESP32ボードで遊んでみたいと思います。アドレスの取得は必須ではありませんが、後々センサーの並列動作などに必要になるのでやっておきましょう!
こちらの方法を参考にします。Arduinoでのチュートリアルになってますが、ESP32ボードでも流用できました。
henrysbench.capnfatz.com
センサー入手
AmazonのVKLSVANなる出品者から399円で購入しました。レビューがないのが気になりますし、単価がもう少し安いのもありましたが、とりあえず単品で安いのが欲しかったのでこちらで購入。
防水性はなかなかしっかりしてそうです。Amazonではホワイト(DATA / MCU )と書いてますが、実際は黄色のようです。配線
以下の表のように配線しました。データ線は33pinに繋いでます(26pinでは何故かだめでした)。DATAケーブルとVCCケーブルの間に4.7kΩの抵抗を挿入しました。
DS18B20側 | ESP32側 |
---|---|
GND |
GND |
DATA(黄色ケーブル)) |
33番ピン(IO21) |
VCC(赤ケーブル) |
5Vピン |
※pin nameとNo.の関係はこちらに詳しいです。
写真も載せておきます。
コード
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がアドレスとなります。