自分への教訓
ボード定義をしっかり確認しなければ...
Raspberry Pi Pico を Arduino で使う場合
デフォルトは
SDA = GP4 = ボードの6ピン
SCL = GP5 = ボードの7ピン
に接続します。
// Wire
#define PIN_WIRE_SDA (4u)
#define PIN_WIRE_SCL (5u)
こちらのかたの記事ではGPIO6とGPIO7になっていたのですが,
私が使った環境ではそこから変更になっていたようです。確認した場所は以下です。
~/.platformio/packages/framework-arduino-mbed/variants/RASPBERRY_PI_PICO/pinmode_arduino.h
~/Library/Arduino15/packages/arduino/hardware/mbed_rp2040/3.0.1/variants/RASPBERRY_PI_PICO/pinmode_arduino.h
I2Cで使うピンを変更できそうな記事も見かけたのですが,私の環境では動きませんでした... なぜだろう
もともと u8g2ライブラリーでSSD1306を使いたかったのですが,上記の接続に半日かけてやっと気づき,無事動くようになりました。
#include <Arduino.h>
#include <U8x8lib.h>
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
void setup(void)
{
u8x8.begin();
}
void loop(void)
{
u8x8.setCursor(0, 0);
u8x8.setFont(u8x8_font_8x13B_1x2_f);
u8x8.print("Hello World!\r\n");
delay(2000);
u8x8.clear();
}
XIAO RP2040 で I2C を使う
もともとこちらの方の記事を参考に動かそうとしていたのですが,すっと動かずに苦戦しました...
そもそも
GPIO6 = SDA
GPIO7 = SCL
として引き出されていて,Raspberry Pi Picoのデフォルトである GPIO4/GPIO5 は使えません。
// Wire
#define SDA (6u)
#define SCL (7u)
なので,GPIO6/GPIO7にI2Cを接続しつつ,XIAO RP2040 専用のボード定義を使います。
これを Arduino IDE でインストール,無事I2Cが扱えました。拡張ボードのSSD1306が動き出しました。
Platformioで作業したかったのですが,
- Raspberry Pi Picoとしてビルドすると,上記の通り,I2CはGPIO4/GPIO5を使うことになりますので,XIAO RP2040 ではうまく動きません。
- I2Cピン定義変更を試みたのですが,うまくいってません。
- XIAO RP2040のピン定義を自力で追加すればいいのかな? 気が向いたらやってみようかな...
- https://qiita.com/WhiteGrouse/items/10c36e382efd2872d267