ただArduino Unoを使えばよかったのに、内蔵WiFi付きのを試そうとしてWemos D1 R2を使ったせいでかなり苦労しました。
この文章はD1 R2のようにピンマッピングが異なるArduinoを使用する人のためのものです。
1. IDE設定
Arduinoの種類が多様なので、各ボードに合ったボードパッケージもインストールしなければなりません。
Arduino IDEでファイル(file) - 基本設定(Preferences)に入ります。

そして追加ボードマネージャに以下のアドレスを追加しましょう。
https://arduino.esp8266.com/stable/package_esp8266com_index.json
そして左のボードパッケージでD1 R2を検索してインストールします。

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

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チップセットにあるそれぞれの足に割り当てられていると考えることができます。

下の写真を見れば、それぞれのピンがチップセットのどの足に割り当てられているかを見ることができます。
こうした接続するピンのうち、デジタル信号の入出力が可能なピンをGPIOピンと呼びます。
GPIOはGeneral Purpose Input/Outputの略です。

Arduino Unoの場合にはGPIOピンがボードのピン番号とほぼ一致することを見ることができます。
そのため、IDEでもピン番号を記載された通りにすれば問題なくコードを実行できます。
4. Wemos D1 R2のピンマップ
D1 R2ボードは基本チップセットのほかにWiFiモジュールが一緒に装着されています。
このとき、チップセットの一部ピンはWiFiモジュールと通信するのに使用されるため、入出力に使えるピンの数が制限されます。
残りのピンをArduinoボード上に配置する際に、GPIO番号が順番に割り当てられない問題が発生します。

これにより、ボードの製造元はユーザーが混乱しないように各ピンにD0、D1、D2のような論理的な番号を再度付与し、この番号をArduino IDEでもそのまま使用できるようにしました。
上記のピンマップ画像のように、D1、D2のような番号は実際の内部GPIO番号とは異なるので、ピンを使用するときは必ずこのマップを参照しなければなりません。
5. それではどうやって使えばいいのか?
Arduino IDEでインストールしたボードパッケージには、D5、D6のような論理ピン名を実際のGPIO番号にマッピングする定義が含まれています。
そのため、最初に#define myPin D5のように定義すると、ボードパッケージ内部には#define D5 14が入っており、最終的にmyPinはGPIO14番ピンを指すことになります。

#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. 結論

前回D1 R2を使用したときは単純に温湿度センサーだけ取り付けたので、それほど難しいことはありませんでした。
今回はピンをもう少し多く接続したことで新しいことを少し学びました。
来年はメイカー同好会でも一度運営してみようかと思います。
댓글을 불러오는 중...