本来用 Arduino Uno 就够了,偏偏想试试带内置 Wi‑Fi 的板子,结果用 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 号引脚设为输出、5 号引脚设为输入,可以像下面这样写:
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 两侧排列的那些引脚,可以认为是分别连接到芯片各个“脚”上的。

从下图可以看到,每个引脚具体对应到芯片的哪一只脚。
在这些连接中,能够进行数字信号输入输出的引脚被称为 GPIO 引脚。
GPIO 是 General Purpose Input/Output(通用输入/输出)的缩写。

在 Arduino Uno 上,GPIO 引脚与板子上的引脚编号几乎是一一对应的。
所以在 IDE 中直接使用板子上写着的引脚号,一般就能顺利运行代码。
4. Wemos D1 R2 的引脚映射
D1 R2 板子在基本芯片之外,还集成了 Wi‑Fi 模块。
这时候,芯片的部分引脚要用于和 Wi‑Fi 模块通信,因此能拿来做普通输入输出的引脚数量就有限了。
在把剩余的引脚布到 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);
}之后就可以像普通引脚一样使用它了。
不过,需要注意的是,有些引脚和启动(Boot)或 Flash 有关,使用时要小心。
板上引脚(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 时只是简单接了个温湿度传感器,所以没遇到什么困难。
这次连接的引脚多了一些,也就多学到了一些新东西。
明年想试着办一个创客社团玩一玩。
댓글을 불러오는 중...