I/O Expanderを使ってみる その1(MCP23S08-E/P)
はじめに
今回はI/O ExpanderのMCP23S08を使ってみました。
I/O Expanderを使うと、マイコンのピンを増やすことができます。SPI通信やI2C通信でI/O Expanderのピンを制御するのですが、その中でもMCP23S08はSPI通信で制御するものです。GPIOピンを8本増やすことができます。
他にもMCP23017というI/O Expanderがあるのですが、こちらはI2C通信でGPIOピンを16本増やすことができます。MCP23017のほうがネット上の情報が多くて、ピンの数も多いので、そちらのほうが便利かもしれません。
なおI/O Expanderをカタカナで書くと、「IOエキスパンダ」とか「IOエクスパンダ」になってパンダっぽくなるので、このサイトでは英語で書いています。
▼今回購入したものはこちら
https://akizukidenshi.com/catalog/g/gI-10643/
▼MCP23017も使ってみました。
回路を組む
MCP23S08のGPIOピンで、8つのLEDを制御します。ArduinoからはSPI通信用に4つのピンを使います。これだけだとあまりピンが増えていないように感じますが、MCP23S08はアドレスを指定することで最大4つまで扱えるのでもっと増やせます。
▼LEDはこれに似たバーグラフというものです。
https://eleshop.jp/shop/g/gB5G366/
▼回路図はこちら
▼実際の配線
プログラムを書く
Arduino IDEでプログラムを書くのですが、MCP23S08のライブラリを検索したらありました。まずはライブラリをインストールしてください。
▼Arduino IDEの「ツール→ライブラリを管理」でライブラリマネージャを開きます。
▼MCP23S08のライブラリはいくつかありますが、今回はAdafruitのものを使いました。
このライブラリを使うと、MCP23S08のピンを、Arduinoのピンを制御するときと同じように扱うことができます。pinMode()やdigitalWrite()などで制御できます。
注意点があるのですが、setup()関数のところにあるpinModeでピンの宣言をしないと制御できません。ArduinoのピンだとpinModeを省略しても制御出来たりするのですが、MCP23S08のピンは省略すると制御できませんでした。
▼参考にしたサンプルプログラム
- KMP_MCP23S08 - Arduino Reference
- GitHub - adafruit/Adafruit-MCP23017-Arduino-Library: Arduino Library for Adafruit MCP23017
▼サンプルプログラムを組み合わせたプログラム
▼実際の動作
最後に
今回のプログラムはアドレスの指定をしていませんが、それができればピンをもっと増やせます。ライブラリを詳しく見てみようと思います。MCP23S08は日本語のデータシートがあったからという理由で買ったのですが、用語が多くてよく分からないんですよね。
I/O Expanderについて調べていたら、本当にMCP23017のほうが情報が多くて使いやすそうでした。MCP23S08は全然使わないかもしれません…
“I/O Expanderを使ってみる その1(MCP23S08-E/P)” に対して1件のコメントがあります。