ラズパイを使って自作の温度計を作りたいのですが、ラズパイってADコンバーターがないんですよね。。

なのでADコンバーターICを外付けで接続します。ADコンバーターとして選んだのは秋月電子で販売している10bit 2ch ADコンバータ MCP3002-I/P

SPI通信でデータをやりとりするのでライブラリとしてwiringPiSPIを使ってc++のクラスを作成しました。
サンプルプログラムと一緒にご紹介します(◍•ᴗ•◍)♡ ✧*。

MCP3002のスペックは?

MCP3002のスペックをご紹介します。

MCP3002の画像

MCP3002の特徴
  • 10bitの分解能を持つADコンバーターです。
  • 2CHついています。
  • データのやり取りはSPI通信で行います。
  • 価格はひとつ180円と安いです。

ちなみにこちらにスペックシートがあります。

wiringPiSPIを使おう

WiringPiのサイトにSPIのライブラリの使い方が紹介されていますので使う関数をご紹介します。

まずはheaderの取り込み

専用のライブラリが用意されています。こちらをincludeしましょう。

wiringPiSPISetupコマンドで通信の設定

実際にSPIでデータのやり取りをする前にSPIの設定をします。

ラズパイにはSPIのチャネルが2つあるのでchannelでどちらを使うのかを設定します。
通信速度はspeedで設定でき、500,000から32,000,000Hzの間で値を選ぶことができます。

ちなみに返り値はLinuxのFD(File Descriptor)です。-1の場合にはエラーとなります。

wiringPiSPIDataRWでデータの書き込みと読み込み

次に実際にデータを送受信します。

設定したchannelに対し、*data bufferを介して書き込み読み込みを行います。
送りたいデータをdata bufferに設定しこのコマンドを実行すると、データがdata bufferに上書きされて返ってきます。

コンパイルの時はライブラリの指定を忘れずに

コンパイルの時には”-lwiringPi”と指定するのを忘れないようにしましょう。

MCP3002のサンプルプログラムはこちら

それでは実際にwiringPiSPIを使ってMCP3002とSPI通信ができるプログラムをご紹介します。
ちなみにラズパイへのSPIの設定方法はラズパイでSPI通信を有効にするにはどうすればいい?で記載しているので参考にしてください。

チャネルの設定は設定しなくても済むようにデフォルト引数を渡すようにしました。

まとめ

MCP3002でSPI通信を使ってデータのやりとりをするサンプルプログラムをご紹介しました。次回は実際にこのサンプルプログラムを使ってサーミスタの温度を取得します!

記事を読んでいただいてありがとうございます。この記事がいいなと思ったら下記のSNSボタンのクリックをお願いします。励みになります😁