MicroPythonで温度センサー「DS18B20」を使う

MicroPythonで温度センサー「DS18B20」を使う
目次


はじめに【MicroPythonで温度センサー「DS18B20」を使う】

マイコン関係のお約束、温度測定です。センサーはいろいろありますが、今回は「DS18B20」を使用します。

このページでやっていること

温度センサー「DS18B20」で温度測定をします。マイコンはESP32、プログラムはMicroPythonを使用します。

今回の環境・使用機器

  • プログラム関係

    • Win10
    • Thonny
    • Micropython
  • 回路関係

    • ESP32-DevkitC
    • 温度センサー:DS18B20
    • 4.7kΩ抵抗
    • ブレッドボード・ジャンパワイヤー

DS18B20には素子タイプ、防水プローブタイプなどありますが、一番単純な素子タイプを使用しました。用途に応じて選べば良いと思います。


事前準備:MicroPythonのセットアップ

準備として、ESP32にMicroPythonをセットアップしておきます。 こちらの記事を参考にセットアップしてください。

①回路を作成する

以下回路図です。

DS18B20回路図

DS18B20には「VDD」「DQ」「GND」の3つの端子がります。ピン配置はDS18B20のデータシートを参考にしてください。

今回は以下のように接続しました。

  • VDD : 5.0V
  • DQ : GPIO33
  • GND : GND
  • 抵抗 : 4.7kΩ

実際に配線するとこんな感じです。

DS18B20配線図

②MicroPythonプログラムの作成

公式ドキュメントの以下のページを参考にしました。

1-wireとDS18B20のライブラリは、MicroPythonに標準状態で組み込まれています。追加でインストールする必要はありません。

以下のコードをThonnyに打ち込みます(コピペでもOK)。 (5秒毎にDS18B20から温度を取得して、コンソールに表示します。)


  from machine import Pin
  import onewire, time, ds18x20

  ow = onewire.OneWire(Pin(33)) # GPIO 33 で OneWire バスを作成
  ds = ds18x20.DS18X20(ow) #DS18B20のオブジェクトを作成

  roms = ds.scan()  # バス上のデバイスリストをスキャン
  print('found devices:', roms) #検出したデバイスを表示
  while True:
    ds.convert_temp() #温度のサンプリング
    time.sleep_ms(750) #convert_temp()実行後の待機時間
    for rom in roms:
      print(hex(rom[1]),":",round(ds.read_temp(rom),1),"℃",end="   ")
      # romsがbytearray型で返されるので、最初のビットをデバイス識別子として使用
    print("") # 改行
    time.sleep(5) # 5秒待機

③動作確認

実行ボタンを押すか、[F5]キーで実行すると、「シェル」ウインドウに温度が表示されます。正常に動作しているか確かめるには、手でセンサーに触れてみると良いです。温度が上がるはずです。

実行結果

補足事項:複数センサーをつないでみた。

DS18B20は複数つなぐことができます。以下のように2つのセンサーを並列につないでみます。

プログラムはセンサー1個のときと同じです。実行結果は以下のようになります。

Ds18B20x2配線図

おわりに

以前C(Arduino)言語で同様のプログラムを書きましが、MicroPythonのほうが楽ちんですね(慣れの問題もあると思いますが)。コンパイルがいらないので、プログラミング→動作確認までが効率的になりました。個人でIoTデバイスを作成する程度なら使いやすくおすすめです。