Arduino D1 R2 使用記

힘센캥거루
2025년 6월 11일(수정됨)
66
arduino

ただArduino Unoを使えばよかったのに、内蔵WiFi付きのを試そうとしてWemos D1 R2を使ったせいでかなり苦労しました。

この文章はD1 R2のようにピンマッピングが異なるArduinoを使用する人のためのものです。

1. IDE設定

Arduinoの種類が多様なので、各ボードに合ったボードパッケージもインストールしなければなりません。

Arduino IDEでファイル(file) - 基本設定(Preferences)に入ります。

Arduino D1 R2 使用記-1

そして追加ボードマネージャに以下のアドレスを追加しましょう。

https://arduino.esp8266.com/stable/package_esp8266com_index.json
Arduino D1 R2 使用記-2

そして左のボードパッケージでD1 R2を検索してインストールします。

Arduino D1 R2 使用記-3

最後にUSBポートとボードの種類を正しくマッチングさせれば終了です。

Arduino D1 R2 使用記-4

2. D1, D2といったピンは何?

WeMos D1 R2を接続して最も混乱したのはピン番号でした。

Arduino Unoのようなボードは構造が比較的単純なのでボードのピン番号とArduino IDE上のピン番号が一致します。

例えばArduinoの4番ピンをoutに、5番ピンをinに設定したい場合は、以下のようにします。

int outputPin = 4;
int inputPin = 5;

void setup(){
    pinMode(outputPin, OUTPUT);
    pinMode(inputPin, INPUT);
}

しかし、Wemos D1 R2にそのまま適用すると動作しません。

それはピン番号の体系が違うからです。

WemosボードではD1、D2といった名前がIDE上で異なる数字にマッピングされているためです。

#define outputPin D4
#define inputPin D5

void setup(){
    pinMode(outputPin, OUTPUT);
    pinMode(inputPin, INPUT);
}

それでは、このArduinoはなぜこんな構造になっているのでしょうか?

3. GPIOピンとArduinoのピンマップ

Arduino Unoを見ると大きなチップセットが一つ組み込まれています。

これがコンピューターで言うところのCPUのような演算装置と考えればいいです。

Arduinoの最も端にあるピンはArduinoチップセットにあるそれぞれの足に割り当てられていると考えることができます。

Arduino D1 R2 使用記-5

下の写真を見れば、それぞれのピンがチップセットのどの足に割り当てられているかを見ることができます。

こうした接続するピンのうち、デジタル信号の入出力が可能なピンをGPIOピンと呼びます。

GPIOはGeneral Purpose Input/Outputの略です。

Arduino D1 R2 使用記-6

Arduino Unoの場合にはGPIOピンがボードのピン番号とほぼ一致することを見ることができます。

そのため、IDEでもピン番号を記載された通りにすれば問題なくコードを実行できます。

4. Wemos D1 R2のピンマップ

D1 R2ボードは基本チップセットのほかにWiFiモジュールが一緒に装着されています。

このとき、チップセットの一部ピンはWiFiモジュールと通信するのに使用されるため、入出力に使えるピンの数が制限されます。

残りのピンをArduinoボード上に配置する際に、GPIO番号が順番に割り当てられない問題が発生します。

Arduino D1 R2 使用記-7

これにより、ボードの製造元はユーザーが混乱しないように各ピンにD0、D1、D2のような論理的な番号を再度付与し、この番号をArduino IDEでもそのまま使用できるようにしました。

上記のピンマップ画像のように、D1、D2のような番号は実際の内部GPIO番号とは異なるので、ピンを使用するときは必ずこのマップを参照しなければなりません。

5. それではどうやって使えばいいのか?

Arduino IDEでインストールしたボードパッケージには、D5、D6のような論理ピン名を実際のGPIO番号にマッピングする定義が含まれています。

そのため、最初に#define myPin D5のように定義すると、ボードパッケージ内部には#define D5 14が入っており、最終的にmyPinはGPIO14番ピンを指すことになります。

Arduino D1 R2 使用記-8
#define myPin D5

void setup(){
    pinMode(myPin, OUTPUT);
}

その後は普通のピンと同じように使用すれば良いです。

ただし、一部のピンはブートやフラッシュに関連しているため注意が必要です。

ボードピン(Dn)

実際のGPIO番号

備考

D0

GPIO16

D1

GPIO5

I2C SCL

D2

GPIO4

I2C SDA

D3

GPIO0

ブート関連ピン、注意

D4

GPIO2

内蔵LED

D5

GPIO14

SPI SCK

D6

GPIO12

SPI MISO

D7

GPIO13

SPI MOSI

D8

GPIO15

ブート関連ピン、注意

RX

GPIO3

シリアル受信

TX

GPIO1

シリアル送信

6. 結論

Arduino D1 R2 使用記-9

前回D1 R2を使用したときは単純に温湿度センサーだけ取り付けたので、それほど難しいことはありませんでした。

今回はピンをもう少し多く接続したことで新しいことを少し学びました。

来年はメイカー同好会でも一度運営してみようかと思います。

댓글을 불러오는 중...