Adafruit MCP23017 Arduino Library (Adafruit_BusIO)で I2C ピンを変更する
環境
- Arduino IDE 1.8.19
- esp32 by Espressif Systems Version 2.0.14
- Adafruit MCP23017 Arduino Library Version 2.3.2
- Adafruit BusIO Version 1.14.5
プログラム
「ファイル」-「スケッチ例」-「カスタムライブラリのスケッチ例」-「Adafruit MCP23017 Arduino Library」-「mcp23xxx_blink」
冒頭部分を MCP23017 に合わせて書き換え
#include <Adafruit_MCP23X17.h>
#define LED_PIN 8
Adafruit_MCP23X17 mcp;
void setup() {
Serial.begin(115200);
Serial.println("MCP23xxx Blink Test!");
if (!mcp.begin_I2C()) {
Serial.println("Error.");
while (1);
}
mcp.pinMode(LED_PIN, OUTPUT);
Serial.println("Looping...");
}
void loop() {
mcp.digitalWrite(LED_PIN, HIGH);
delay(500);
mcp.digitalWrite(LED_PIN, LOW);
delay(500);
}
エラー
実行すると
MCP23xxx Blink Test!
Error.
I2C ピンの変更
これは、デフォルトでは ESP32 は
- SDA:GPIO21
- SCL:GPIO22
となっているため。しかしながら今回使用したハードウェアでは以下のようになっていた。
- SDA:GPIO14
- SCL:GPIO15
さて、 Adafruit_MCP23017 Arduino Library ではどのように指定したらいいかな・・・と調べてみたがドキュメントが無い? ソースもみてみたが関係しそうな記述がなかった。多分 Adafruit_MCP23017 Arduino Library が使用する Adafruit_BusIO でそこらへんは管理しているのだろう。
解決策
setup()
中に以下を入れる。
Wire.setPins(14,15);
実行すると、
MCP23xxx Blink Test!
Looping...
となり、ポート8(MCP23017 のGPB0)に接続した LED を Blink できた。