ラズパイpicoにMCP23017を繋いでI/Oを16ポート増設

電子工作

 ラズパイpicoにはGP0からGP28まで合計29個のI/Oポートがありますが、更にI/Oポートが欲しい時、IC2バスで接続できるMCP23017というDIPパッケージ28ピン(幅300mil)のICを使うことができます。これ1つで16ポート増設できます。一つのI2Cバスに最大8個接続できるので、ラスパイpicoにある2つのI2Cバスを使えば、8x2x16=256ポートまで増設可能です。
 取りあえず、MCP23017を1つだけ繋いで、実験してみました。

#include <Wire.h>
#include <MCP23017.h>

#define MCP23017_ADDR 0x20
MCP23017 mcp = MCP23017(MCP23017_ADDR);

void setup()
{
 Wire.setSDA(20); //GP20
 Wire.setSCL(21); //Gp21
 Wire.begin();
 pinMode(LED_BUILTIN, OUTPUT);
 digitalWrite(LED_BUILTIN, HIGH);

 Serial.begin(115200);
 while (!Serial); // wait for serial monitor
 Serial.println("\n Test program for the MCP23017\n");

 mcp.init();
 mcp.portMode(MCP23017Port::A, 0); //Port A as output
 mcp.portMode(MCP23017Port::B, 0); //Port B as output
 mcp.writeRegister(MCP23017Register::GPIO_A, 0x00); //Reset port A
 mcp.writeRegister(MCP23017Register::GPIO_B, 0x00); //Reset port B
}

void loop() {
 mcp.writePort(MCP23017Port::A, 0xff);
 mcp.writePort(MCP23017Port::B, 0x00);

 delay(500);
 Serial.print(".");
 digitalWrite(LED_BUILTIN, LOW);

 mcp.writePort(MCP23017Port::A, 0x00);
 mcp.writePort(MCP23017Port::B, 0xff);

 delay(500);
 digitalWrite(LED_BUILTIN, HIGH);
}

 WordPressにHighlighting Code Blockのプログインをインストールして、ソースコードを記述してみました。gooブログでは、色付けによるハイライトはおろかインデントさえ十分にできなかったので、凄く見易く良くなりました。WordPressに引っ越しして正解です。

コメント