![]()
12.入出力ポートを拡張する (2025.6.24)
Arduinoには複数の入出力ポートが備わっていますが、色々なデバイスを制御しようとするとそれでは不足する場合も出てきます。そんな時に手軽にポートを拡張できるのがI/OエキスパンダーMCP23017です。8ビットのポートがAとBの2つあり、合計16ポートを増設できます。それぞれに入出力を設定できるため、非常に使い勝手の良いデバイスとなっています。また、ArduinoとはI2Cで通信するため、信号線はSCLとSDAの2本だけで済みます。これに電源(5V)、GNDを合わせて計4本です。
MCP23017用のライブラリも公開されていて、あらかじめAdafruit MCP23017 Arduino LibraryをIDEのライブラリに追加しておけば簡単に使えます。入出力テストは以前にRasPiでのテスト用に製作したボードを利用しました。そのためRasPiのGPIO接続コネクタが付いていますがArduinoでは使いません。このボードでは下位8ビットのGPA0~7を出力に、上位8ビットGPB0~7を入力に使用しています。プログラム上は入力をGPA、出力をGPBにした方が都合が良いのですが、製作当時はそこまで考えていませんでした。


入力はディップスイッチがOFFの時にポート入力が"H"、ONの時に"L"になります。一方、出力は"H"の時にLED消灯、"L"の時にLED点灯になります。これを連携させるとスイッチOFFではLED消灯、ONではLED点灯になります。ビットの状態が分かるように、LCDに2進数で表示するようにしました。表示はスイッチONの時に"1"としています。なお、上位のビットが0の場合は除かれて表示されないため(仕様による)、便宜上16bit表示にして上位8bitは1が並びます。これは無視して下さい。スイッチの状態は下位8bitで表示します。
![]()