もよいめも

不定期更新ものづくりブログ

【Raspberry Pi Pico】 Arduino IDEでI2cを動かしたい!

割と前に登場していたRaspberry Pi Picoですが、ついに私の手元にもやってきましたので色々試してみました。
開発環境はもちろんArduino IDE!(Arduino IDE 2.0.0 beta8)。割とそのまま使えるという噂を聞いていまいたので、使い慣れた環境で開発してました。

噂通り、大体のプログラムも、ライブラリーもそのままで動きましたが、意外と引っかかったのがまさかのI2c...

まだ出て間もないせいか、調べても「これだ!」という結果はなかなか見つかりませんでした。

ということで、Arduino IDEでのRaspberry Pi Pico開発の繁栄を願ってこの記事を書いております。

宣伝

Raspberry Pi Picoのシリアル通信(UART)、PIO、SDカード等々、色々まとめてあるのでぜひご覧ください!
moyoi-memo.hatenablog.com
moyoi-memo.hatenablog.com
moyoi-memo.hatenablog.com


開発環境の構築

github.com
こちらのページにボードの追加方法等が書いてあります。(英語)
もちろん「Raspberry Pi Pico Arduino IDE」で調べれば日本語の記事も出てきますのでアメリカ語がわからない人はそちらを確認してください。

マイコン本体に初めてプログラムを書き込む場合は色々やらなくちゃいけません。
Uploading Sketchesの項目に詳細が書いてありました。
ちなみに、パソコンの具合によって書き込めたり書き込めなかったりする謎仕様です。(コレガワカラナイ)

I2cを使うぞ!!

さて本題。Raspberry Pi PicoのI2cをArduino IDEで動かします。
プログラムはこちらから引用。部品も同じものを使用します。
【Arduino】LCDにi2cでカタカナを簡単に表示させる方法 - もよいめも
素晴らしいことに、まんまで動きます。

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);//左から(アドレス,LCDの列の長さ,LCDの行の長さ)となっています。
                                 //アドレスは「0x27」と「0x3F」の場合があります

void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(2,0);
  lcd.print("Hello,world!");
  lcd.setCursor(3,1);
  lcd.print("\xba\xdd\xc6\xc1\xca\xa4\xbe\xb6\xb2!");//コンニチハ、セカイ!
}


void loop()
{
  
}

接続方法は非常にかんたん

接続方法

黒がGND、赤がVCCです。

VCC--->VSYS
GND--->GND
SDA--->GP4
SCL--->GP5

余談

とりあえずのメモ書きなのでテキトーなのは勘弁してください。
データシートを見るI2c対応ピンはめちゃめちゃあるようですが、標準だとGP4とGP5が割り当てられています。

Wire.setSDA(8);
  Wire.setSCL(9);//setSDAになってたので修正

ちなみに詳細はこちらを御覧ください
arduino-pico.readthedocs.io

こいつをWire.begin();の前に書くことでI2cのピンを変えられるらしいですが、自分の環境だと通信できないし、Raspberry Pi Picoがパソコンに認識されなくなるというおまけ付きです。うーんこの
(そういうときはBOOTモードで起動させてシリアル通信系の処理を入れたバイナリファイルを突っ込めば治りますが)

とりあえず、まだRaspberry Pi Picoは私に心を開いてくれないので、気長に付き合っていこうかと思います。とほほ...

改めて確認したら両方setSDAになっていたではありませんか!
それは動くわけがありません...

ということで、正しく書き直したら全ピンで通信を確認できました。
くだらんなぁ。

ちなみにGP28以外のGPIOはすべてI2c対応しているのですが、その中で使えるのは2セットで、それぞれI2C0とI2C1に分けなければいけないので注意。
デフォルトのピンだけまとめた表(全ピン書くの面倒くさい)を下においておきます。

ポート IDE上の表記 デフォルトピン1(SDA、SCL)
I2C0 Wire GP4、GP5
I2C1 Wire1 なし

Raspberry Pi Pico強すぎ。以上!