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 のプログラムで読んだ値までおかしくなってしまう。

実際にどんな波形が出ているのか気になるところだけど、とりあえず動いたのでよしとする。


今回参考にしているのは以下のサイト。
http://raspberrywebserver.com/cgiscripting/rpi-temperature-logger/

コメント

このブログの人気の投稿

Gbps でなく GT/s

HCSLに33オームの直列抵抗が必要な理由

PowerShellによるExcel/PowerPointの操作