ラズベリーパイ3 温度センサ BMP085(1) 回路接続
前回はA/Dコンバータの値をspiインタフェースで読み込んだ。
ブレッドボードの裏側がおかしくなったせいか、A/Dコンバータから煙が出て
使えなくなったので、注意しないと(汗
テストに使った可変抵抗はテスタあててみると無事だった。
というか、ICではないので、壊れるものでもないか。
A/Dコンバータは内部に回路を持っているので、そこに過電流が流れるかなにかで
熱エネルギーで溶けて壊れたんだろうか・・・
可変抵抗の両足は3v、可変する脚は0~3vだかに変動する事はテスタで確認した。
今回は温度センサ(BMP085)を動作させてみる。
インタフェースはI2C。
spiは、シリアルペリフェラルインタフェース、素朴なマスタ・スレーブ通信プロトコルだった。マスタ側のR/W、スレーブ側のR/Wで構成され、クロックで同期。マスタのインプットはこの場合、スレーブへのデータ読み込みコマンドだった。それをクロック信号(LOW->HIGH)で送信通知していた。データ読み込みはクロック信号で受信通知してから実際のデータ受信していた。
I/C間の通信をどちらがマスタ、どちらがスレーブと見立てて、通信していた。
I2Cはどう違うのか。
おそらく、マスタ・スレーブという概念は存在しないのではなかろうか。
使用するのは、
SCL : シリアルクロック
SDA: シリアルデータ
確かに、spiにあったような、もしも (Master Output Slabe In)がない。
始めてみよう。
ラズパイ3のgpioをみてみると、
ピン3番:SDA1 (I2C)
ピン5番:SCL1 (I2C)
とある。これを温度センサの SDA, SCLに接続すれば良い。
ちなみに、SDA2とか、SCL2は見当たらない。gpioを拡張する場合のために、
識別番号つけてるだけなのか。
3.3v : pin1
gnd : pin6
scl : pin5
sda:pin3
接続ピンはこの4つだけ。
ラズパイ3と回路接続したら、まず、ラズパイ3がi2cデバイスとして認識しているか
確認してみる。
ラズパイ3では、bruetooth通信のために、UARTが安定しない、といった話があり、接続デバイスにはハードウェア設計上の制約が生まれるものらしい。
そういった話もあるからか、sudo raspi-configで i2cを有効にしなければならない。
i2cをラズパイ3で使えるようにする話は詳細には触れないが、このハードウェア事情的なコンフィグだけで良い。
ように見えるが、もちろんi2c制御ライブラリが必要になる。ラズベリーパイのパイは、「パイソン」のパイであり、パイソンライブラリとしてミドルウェア積み込みされているので、通常は意識しない。
(ちなみにspiの時はraspi-configとか、あまり考えなかった気がするけど、なぜだろう。忘れているだけ?)
話がそれたが、i2cデバイス認識しているか確認してみる。
もちろん回路接続しないと、ラスパイ3からはi2cデバイスは存在しない事になるので注意。
> sudo i2cdetect -y 1
ずらずらっと出力されるが、以下が BMP085を認識した、という証拠らしい。
70: -- -- -- -- -- -- -- 77
次は実際にgpioを読むための プログラムを動作させてみる。
今日はspi
ラズパイ3を購入したので、いろいろ試してる。
参考書籍は「RasberryPiで学ぶ電子工作」
ブルーバックのこういう実践本にはあまり良いイメージがなかったけど、
この本は結構いいかも。
試すICは MCP3208。
spiは連続する1/0の塊(=数値)をI/Oするための4つの端子(信号線)がある。
SCLK:シリアルクロック。同期用。
MISO: Master In Slave Out
MOSI:Master Out Slabe In
CEO:
ちなみに、spiは シリアル・ペリフェラル・インタフェース。
IC同士の直接通信をダイレクトに表しているだけの言葉。
spiは、二つの素子 マスタ⇔スレーブ間の通信規格。
ここでは ラズパイがマスタ、MCP3208がスレーブ。
従って、ラズパイ側のspi端子は以下のように設定する。
SCLK...出力に設定。ラズパイ側から通信の同期を指示する。
MOSI...出力に設定。ラズパイ側はマスタなので、Master Out=信号出力。
ここではMCP3208に、チャンネル0のアナログ値の取得を依頼するための
コマンドを送信する。
MISO...入力に設定。MCP3208からのAD変換されたデータを受信 Master Inputする。
CEO...出力ポートに設定。マスタ側の独り言を処理するためのポート。
・クロックは信号の出力の都度、HIGH→LOWする。
・スレーブ(MCP3208)に対して毎回、以下のループ。
1. CEOをHigh (spi送受信無効)
2.クロックをリセット(Low)
3.CEOをLOW (spi送受信開始)
4. xチャンネルのデータ読みたいコマンド送信
5ビットデータのループ
- ビットデータをMOSIに出力(High or Low)
- クロック HIGH->LOW で送信同期
5. xチャンネルのデータ受信
13ビットデータのループ
- クロック HIGH->LOWで受信同期
- MISOピンからビットデータ入力(High or Low)
6. CEOをHIGH (spi送受信無効)
さて、まずはサンプルのパイソンプログラムを動作させてみよう。