Raspberry Pi と 1-wireデバイス
1-wire は非同期シリアルインターフェースで
1本の信号線を使ってデータの送受信ができるインターフェース
信号線が1本でも
複数デバイスを接続することができ
電源を信号機からとることもできる
通信速度は 15.4kbps
125kbps となっていて
I2C SPIに比べると低速
個々の 1-wire デバイスには
ROM ID
という重複しない固有IDが振られているので
同じ種類のデバイスを
同じ 1-wire 上のパス上に複数接続できる
これはIPで振り分けている複数のパソコンが
インターネットに接続できる
ように
複数の接続が可能
例えば20個の温度の監視をするときにも
使用する Raspberry Pi のGPIOポートは
1つで済む
まずは実践したほうがわかりやすいので実験
使うものは
1-wire デバイスの温度センサーDS18B20
ジャンパーワイヤー 3本
そしてブレッドボードと raspberry Pi 本体
Amazon で調べたけどみあたらないので
今回も秋月電子でネットで購入
複数の抵抗をかったためわかりにくいので
をみて
一番右の金色以外すべて赤が 2,2 kΩなので
これを使う
そして配線
3.3V 左下11番め
GPIO 4 左下4番め
GND 左上3番め
から
ブレッドボードにさす
さすときに、これらを縦に同じ列にする
そして
3.3V と GPIO 4 のピンの部分へまたぐように
2.2KΩの抵抗をさす
そして、
GPIO 4
3.3V
GND
のそれぞれの横の列と同じようになるように
温度センサーDS18B20
をさす
センサーには向きがあるので注意
今回、反応しなかったので
検索したところ
[コラム] 第9回『1-wire温度センサーで部屋の温度を測定しよう』
に
接続例がでていたので、それを参考にさせてもらいました
どうやら文字がかかれていて
1番左がGND
真ん中が GPIO 4
一番右が 3.3V
なるようです
GND側に抵抗を入れるのがプルダウン
で
+のほうに抵抗を入れるのがプルアップ
今回はプルアップを行う
配線ができても、そのままだと Raspberry Pi は
1-wire が有効になっていないので使えない
1 | sudo vim /etc/modules |
でファイルを開いて編集する
最終行に
1 2 | w1-gpio w1-therm |
を追記する
編集が終わったら再起動することで
設定が有効になり
1-wire デバイスを使えるようになる
一時的に使うのなら
1 2 | sudo modprobe w1-gpio sudo modprobe w1-therm |
を実行することで使えるようになる
ただしこれだけだと再起動すると使えない状態に戻る
設定ができたら、次に 1-wire デバイスのIDを調べる
1-wire デバイスには ROM ID というIDが振られているので
1-wireデバイスを配線したら
1 | ls /sys/bus/w1/devices/ |
で調べると
1 | 28-000006479c5b |
みたいに
28-0000 ではじまるシンボリックリンクがみつかる
これが接続しているデバイスのIDになる
ちなみに、何も接続していないと
1 | w1_bus_master1 |
として表示される
これで認識しているのがわかったので
次に温度センサーの値を取得
1 | cat /sys/bus/w1/devices/28-000006479c5b/w1_slave |
で値を得ることができる
実行結果は
1 2 | c6 01 4b 46 7f ff 0a 10 17 : crc=17 YES c6 01 4b 46 7f ff 0a 10 17 t=28375 |
この2行めの
t=28375
が温度になる
これは1000倍された値のため
実際の温度は 28.375 度となる
このままだと読みにくいけど
perl とかシェルスクリプトなどを使えば
温度だけを表示できるので見やすくできる