MicroPythonで温度センサー「DS18B20」を使う
はじめに【MicroPythonで温度センサー「DS18B20」を使う】
マイコン関係のお約束、温度測定です。センサーはいろいろありますが、今回は「DS18B20」を使用します。
このページでやっていること
温度センサー「DS18B20」で温度測定をします。マイコンはESP32、プログラムはMicroPythonを使用します。
今回の環境・使用機器
-
プログラム関係
- Win10
- Thonny
- Micropython
-
回路関係
- ESP32-DevkitC
- 温度センサー:DS18B20
- 4.7kΩ抵抗
- ブレッドボード・ジャンパワイヤー
DS18B20には素子タイプ、防水プローブタイプなどありますが、一番単純な素子タイプを使用しました。用途に応じて選べば良いと思います。
DiyStudio 3個 用 DS18B20温度センサー温度プローブDS18B20のための防水デジタルサーマルプローブまたはセンサーラボ高感度温度測定材料 -55°C 〜 +125°C (3個 2M)
事前準備:MicroPythonのセットアップ
準備として、ESP32にMicroPythonをセットアップしておきます。 こちらの記事を参考にセットアップしてください。
①回路を作成する
以下回路図です。
DS18B20には「VDD」「DQ」「GND」の3つの端子がります。ピン配置はDS18B20のデータシートを参考にしてください。
今回は以下のように接続しました。
- VDD : 5.0V
- DQ : GPIO33
- GND : GND
- 抵抗 : 4.7kΩ
実際に配線するとこんな感じです。
②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個のときと同じです。実行結果は以下のようになります。
おわりに
以前C(Arduino)言語で同様のプログラムを書きましが、MicroPythonのほうが楽ちんですね(慣れの問題もあると思いますが)。コンパイルがいらないので、プログラミング→動作確認までが効率的になりました。個人でIoTデバイスを作成する程度なら使いやすくおすすめです。