(2020-12-04) デジタル温度センサー DS18B20 をRaspberry Piにつないで温度を測ります。 Raspberry Pi OS(最近Raspbianという名前から変わった)では初めからドライバが用意されているので、ソフトウェア側での温度の読み出しも非常に簡単です。 秋月電子の通販(以下)で入手したが、アマゾンなどでも防水のものなどが売られています。 少々残念な点
実験環境 †ハードウェア Raspberry Pi 1 Model B (初期型,メモリ512MB) OS周り $ uname -a Linux rasp1a 5.4.72+ #1356 Thu Oct 22 13:56:00 BST 2020 armv6l GNU/Linux $ grep NAME /etc/os-release PRETTY_NAME="Raspbian GNU/Linux 10 (buster)" NAME="Raspbian GNU/Linux" VERSION_CODENAME=buster 1-Wireインターフェースを有効化 †Raspberry Pi OS(長いので RaspPiOS)の初期状態では1-Wireは無効です。 ターミナル画面(なんていうんだっけ)で以下のコマンドを実行します。管理人はたいていノートPCからSSHでつないでいます。 $ sudo raspi-config GUI風のキャラクタ画面が出てくるので、カーソル、Enter、Tabキーなどを使い、以下に沿って選んでいく(項目の番号は違っているかもしれない)。
下記のメッセージが表示されるので、Yesを選択します。 Would you like the one-wire interface to be enabled? 場合によってはRebootしますか、などと聞いてくるので適宜対応してください。 Rebootすると必要なモジュールが自動的に読み込まれます。 上記の設定がうまくいっていれば下記の1行が /boot/config ファイルの末尾あたりに追加されているはずです。 dtoverlay=w1-gpio それと下記のモジュールがロードされています。 $ lsmod | grep w1 w1_therm 20480 0 w1_gpio 16384 0 wire 40960 2 w1_gpio,w1_therm 配線、およびドライバモジュールの選択 †((工事中)) デバイスとRaspPi本体を3本でつなぐか、2本にするか。
メーカーのデータシートでは2通りのパターンしか書いていない(https://akizukidenshi.com/download/ds/maxim/DS18B20.pdf)。 まあこれは概略図なわけで。 RaspPiのGPIOって、入出力の切り替えやプルアップ、プルダウン、トライステートなどやりたい放題なので、それを利用して、ドライバつっくった人がデータ線そのままで電源供給したれって作ったのかなあ、だれかドライバのソースコード見てくれ。 悩み中で工事中・・・ ちなみにDS18B20を並列に3個つないで2線でつないだら、とりあえずは3つとも値が取得できたが、どれか1個のセンサーが時々とんでもない値を返す場合があり、電力不足なのかなあ。 Tips †以下のファイルに1-Wireの設定に関する説明があります。ただし英語です。 /boot/overlays/README /boot/configの中に # Additional overlays and parameters are documented /boot/overlays/README といった記載がある) w1-gpioというキーワードで探すと、1-Wireモジュールの設定方法が出てくるので抜粋しておきます。 Name: w1-gpio Info: Configures the w1-gpio Onewire interface module. Use this overlay if you *don't* need a GPIO to drive an external pullup. Load: dtoverlay=w1-gpio,<param>=<val> Params: gpiopin GPIO for I/O (default "4") pullup Now enabled by default (ignored) Name: w1-gpio-pullup Info: Configures the w1-gpio Onewire interface module. Use this overlay if you *do* need a GPIO to drive an external pullup. Load: dtoverlay=w1-gpio-pullup,<param>=<val> Params: gpiopin GPIO for I/O (default "4") extpullup GPIO for external pullup (default "5") pullup Now enabled by default (ignored) 別の方々のサイトでは、pullup=yesとかonなどを指定可能、と書いてあったのですが、最近だと上記のように ignoreつまりこの値は無視される、ということのようです。 |