Raspberry Pi 2 + Mono 3.12.0 + Raspberry# IO で GPIO を使ったアプリケーションを書いてみる - しばやん雑記 では Raspberry# IO を使って GPIO を操作してみましたが、今回はちょっと複雑ですが A/D コンバーターを使ってアナログの値を取得してみました。
きっかけは Raspberry# IO が Raspberry Pi 2 への対応が追加されたっぽいのを発見したことです。
しかし、残念なことにまだ Raspberry# IO では SPI を使った処理が行えなかったので諦めました。
今回は A/D コンバーターとして MCP3002 を使っているので検索したところ、以下の記事がとても参考と言うかこの記事に出会わなければ今日は寝れないぐらいの勢いでした。
アナログ値を測る(ADコンバータ使用)(WebIOPi利用)
とても分かりやすく説明されているので、初心者の私でも簡単に使うことが出来ました。というわけで、まずは WebIOPi を使って値を取得することを優先してみました。
SPI の有効化
デフォルトでは無効化されているようなので sudo raspi-config を実行して有効化しました。
この後、有効化するかとかドライバをロードするかと聞かれるので、とりあえず yes と答えていきます。
設定が終わったら再起動が要求されるので、再起動後に /dev/spi* が存在しているか確認します。
pi@raspberrypi ~ $ ls -l /dev/spi* crw-rw---T 1 root spi 153, 0 Jan 1 1970 /dev/spidev0.0 crw-rw---T 1 root spi 153, 1 Jan 1 1970 /dev/spidev0.1
デバイスが見えていれば OK です。
WebIOPi のインストール
WebIOPi のインストールは SourceForge.net からソースをダウンロードして setup.sh を叩くだけなので、割とサクッと終わります。
WebIOPi - Browse Files at SourceForge.net
今回は 0.7.1 をダウンロードして使いましたが、気になる記述をブログで発見しました。
WebIOPi currently does not support Raspberry Pi 2 yet, but some good things are coming. Stay tuned for updates.
WebIOPi 0.7.1 with Weaved IoT Kit | trouch.com
と書いてありましたが、とりあえず動いたので良しとします。
スクリプトの実行
先ほどの記事にあるサンプルコードでは実行時にエラーになってしまったので、新しいバージョンでも動作するように手を加えてみました。
import webiopi from webiopi.devices.analog.mcp3x0x import MCP3002 webiopi.setDebug() mcp = MCP3002() while 1: ch0 = mcp.analogRead(0) webiopi.debug( "Ch0 : " + str(ch0) ) webiopi.sleep( 1.0 )
新しいバージョンの WebIOPi には MCP3002 用のクラスが用意されていたので、それをそのまま使うことにしました。このスクリプトを実行した結果は以下の通り。
今回はフォトトランジスタを使っているので、スマートフォンのライトを使って明るさを変化させてみたところ、ちゃんと出力される値も変わりました。
とりあえず動作確認は出来たので、C# から使う方法を探ってみたいと思います。