Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

M5stackにMCP23017をつかってIOを拡張する

MCP23017という石があります。
IO拡張系の石なのですが、マイコン側からはI2Cで通信できるので線の分お得。
配線も減るし、上手に分離すればモジュール化も容易なんじゃないかと思い、手元のM5stackで実験してみました。

実際のところ

#include <M5Stack.h>
#include "Wire.h"

void setup() {
  M5.begin();  //Init M5Core.
  M5.Power.begin(); //Init Power module.
  Wire.begin(); // wake up I2C bus
  // set I/O pins to outputs
  Wire.beginTransmission(0x20);
  Wire.write(0x00); // IODIRA register
  Wire.write(0x00); // set all of port A to outputs
  Wire.write(0x00); // set all of port B to outputs
  Wire.endTransmission();
}

void ledBup(int val) {
  Wire.beginTransmission(0x20);
  Wire.write(0x13); // address bank B
  Wire.write(val); // except B0, all Bs HIGH
  Wire.endTransmission();
  delay(500);
}


void loop() {
  M5.update();
  ledBup(0xf0);
  ledBup(0xf1);
  ledBup(0xf2);
  ledBup(0xf4);
  ledBup(0xf8);
  ledBup(0xff);
}