カーネルが3.8.13でもBeagleBone Blackで1-WireのDS18B20を使えるようにするのは結構面倒ですが、capemgrを使った方法が紹介されているのでなんとかなりそうです。DTSを記述後DTCでコンパイルして作成したDTBのバイナリを使ってpin muxしてピンの機能を変更します。
用意するもの
DS18B20は赤(VCC)、黄色 (DQ)、黒 (GND)の3本線です。水温を測りたいので防水仕様を購入しました。ミノムシクリップではさんでBeagleBone Blackに配線します。
配線
Fritzingのパーツは4本線ですが、購入したDS18B20は3本線でした。
- DQ -> P9_22
- GND -> P9_46 (GND)
- VDD -> P9_3 (VDD 5V)
DeviceTree
DeviceTreeとはARM Linuxで良く使われるハードウェアの詳細を記述したデータ構造体のことです。ハードウェアの詳細をKernelに書かずにDevice Treeの構造体の外部に記述します。
- Deviece Tree Source (DTS) を作成
- Device Tree Compiler (DTC) でコンパイル
- Device Tree Blob (DTB) のバイナリが作成される
DTSの作成
DTSを記述します。Dallas one-wire temperature reading on BeagleBone Black with dtoに掲載されているDTSをコピーしてファイルを作成します。
/dts-v1/; |
DTCでコンパイル
BeagleBone Blackのカーネル情報を確認します。
$ uname -a |
DTCをインストールします。DTCのバーションは1.4.0
でした。
$ wget -c https://raw.githubusercontent.com/RobertCNelson/tools/master/pkgs/dtc.sh |
コンパイルします。
$ dtc -O dtb -o BB-W1-00A0.dtbo -b 0 -@ BB-W1-00A0.dts |
DTBのインストール
コンパイルして作成したDTBのバイナリをインストールします。
$ sudo cp BB-W1-00A0.dtbo /lib/firmware/ |
/sys/devices/bone_capemgr.9/slots
への記述は再起動後消えてしますので、とりあえずDS18B20を使うときは毎回実行して有効にします。
$ sudo sh -c 'echo BB-W1:00A0 > /sys/devices/bone_capemgr.9/slots' |
DS18B20
DS18B20を使ってセンサーデータを取得する場合、/sys/bus/w1/devices/
の下にある28-xx
のディレクトリに移動します。w1_slaveを読むと温度が計測できます。摂氏28.4度Cです。
$ cd /sys/bus/w1/devices/ |
Pythonのプログラム
簡単なPythonプログラムを書いてみます。
#!/usr/bin/env python |
このDebianにはPythonもインストールされていないのでインストールします。
$ sudo apt-get update |
5秒間隔で温度を計測し始めました。
$ chmod +x w1_test.py |