Raspberry Pi で温度ロガーの続き
前回は、Ruby のコードで SPI 経由で ADC (MCP3002) のサンプル値を読むことができた。そこで、これをデータベースに取り込み、Webから読めるようにしようと思い、ネットで調べてみたら、Pythonで書いているのが多かったので、それにならってみたのだが、どうも SPI の Python ドライバ(というかラッパーAPI?)py-spidev がうまく動かず、温度を読み取れない。
MCP3002 のデータシートも読みながら、xfer2 関数を呼び出してみるのだが、読み込まれるのは 0 とか、たまに、書き込んだ値がループバックのように返ってくるだけ。SPIかADCがおかしくなったのかと思いきや、Ruby のプログラムからは値が読めている。
調べていくと、 SPI のループバックテストをするコード spidev_test.c があったので、これを試したところ、SPIは問題なく動作している。
で、もういちどRPiを再起動したりして、いろいろやってみたところ、うまくいく方法が見つかった。
r = spi.xfer2([1, (2<<6 0="" p="">
とするとうまく行くようだ。もともと Ruby のコードや ADC のデータシートを参考にして、引数のリストを [0x68, 0x0] としていたけど、これだとうまくいかない。それどころか、SPIが中途半端な状態になってしまうのか、Ruby のプログラムで読んだ値までおかしくなってしまう。
実際にどんな波形が出ているのか気になるところだけど、とりあえず動いたのでよしとする。
6>
今回参考にしているのは以下のサイト。
http://raspberrywebserver.com/cgiscripting/rpi-temperature-logger/
MCP3002 のデータシートも読みながら、xfer2 関数を呼び出してみるのだが、読み込まれるのは 0 とか、たまに、書き込んだ値がループバックのように返ってくるだけ。SPIかADCがおかしくなったのかと思いきや、Ruby のプログラムからは値が読めている。
調べていくと、 SPI のループバックテストをするコード spidev_test.c があったので、これを試したところ、SPIは問題なく動作している。
で、もういちどRPiを再起動したりして、いろいろやってみたところ、うまくいく方法が見つかった。
r = spi.xfer2([1, (2<<6 0="" p="">
とするとうまく行くようだ。もともと Ruby のコードや ADC のデータシートを参考にして、引数のリストを [0x68, 0x0] としていたけど、これだとうまくいかない。それどころか、SPIが中途半端な状態になってしまうのか、Ruby のプログラムで読んだ値までおかしくなってしまう。
実際にどんな波形が出ているのか気になるところだけど、とりあえず動いたのでよしとする。
6>
今回参考にしているのは以下のサイト。
http://raspberrywebserver.com/cgiscripting/rpi-temperature-logger/
コメント