아두이노 D1 R2 사용기

힘센캥거루·2025-06-11

그냥 아두이노 uno로 하면 될 것을, 괜히 내장 와이파이 달린거 써보겠다고 wemos d1 r2를 쓰다가 고생을 꽤나 했다.

이 글은 d1 r2와 같이 핀맵핑이 다른 아두이노를 사용하는 이들을 위한 글이다.

1. IDE 셋팅

아두이노의 종류가 다양해서 각 보드에 맞는 보드 패키지도 설치해 주어야 한다.

아두이노 IDE에서 파일(file)-기본설정(Preferences)로 들어간다.

arduino

그리고 추가 보드 관리자에 아래의 주소를 추가해주자.

https://arduino.esp8266.com/stable/package_esp8266com_index.json

alt text

그리고 왼쪽의 보드 패키지에서 d1 r2를 검색한 뒤 설치해준다.

alt text

마지막으로 usb포트와 보드 종류를 알맞게 매칭 하면 끝이다.

alt text

2. D1, D2와 같은 핀은 뭐야?

WeMos D1 R2를 연결하고 가장 헷갈렸던 것은 핀 번호였다.

아두이노 우노와 같은 보드들은 구조가 비교적 간단하기에 보드의 핀번호와 아두이노 IDE 상에서의 핀번호가 일치한다.

예를들어 아두노의 4번 핀을 out으로, 5번 핀을 in으로 설정하고 싶으면 아래와 같이 하면 된다.

int outputPin = 4;
int inputPin = 5;
 
void setup(){
    pinMode(outputPin, OUTPUT);
    pinMode(outputPin, INPUT);
}

하지만 이런식으로 Wemos D1 R2에 그대로 적용시키면 작동하지 않는다.

이는 핀 번호 체계가 다르기 때문이다.

Wemos 보드에서는 D1, D2와 같은 이름이 IDE 상 숫자와 다르게 매핑되어 있기 때문이다.

Wemos D1 R2
#define outputPin D4
#define inputPin D5
 
void setup(){
    pinMode(outputPin, OUTPUT);
    pinMode(outputPin, INPUT);
}

그럼 이 아두이노는 왜 이런 구조를 가지고 있는 걸까?

3. GPIO 핀과 아두이노의 핀맵

아두이노 우노를 보면 커다란 칩셋이 하나 박혀 있다.

이게 컴퓨터로 치면 cpu와 같은 연산장치라고 생각하면 된다.

아두이노의 가장 측면에 달려있는 핀들은 아두이노 칩셋에 있는 각각의 다리에 할당된다고 생각하면 된다.

arduino Uno

아래 사진을 보면 각각의 핀이 칩셋의 어떤 다리에 할당되는지 볼 수 있다.

이렇게 연결하는 핀들 중 디지털 신호의 입출력이 가능한 핀들을 GPIO 핀이라고 한다.

GPIO는 General Purpose Input/Output의 약자이다.

arduino Uno Pin Map

아두이노 우노의 경우에는 GPIO 핀이 보드의 핀 번호와 거의 일치하는 것을 볼 수 있다.

그래서 IDE에서도 핀 번호를 적힌대로 하면 별일없이 코드를 실행할 수 있다.

4. Wemos D1 R2의 핀맵

D1 R2 보드는 기본 칩셋 외에 와이파이 모듈이 함께 장착되어 있다.

이때 칩셋의 일부 핀들은 와이파이 모듈과 통신하는 데 사용되기 때문에, 입출력에 사용할 수 있는 핀의 수가 제한적이다.

남은 핀들을 아두이노 보드 상에 배치하면서, GPIO 번호가 순서 없이 배정되는 문제가 생기게 된다.

pinMap

이로 인해 보드 제조사에서는 사용자가 혼동하지 않도록 각 핀에 D0, D1, D2와 같은 논리적인 번호를 다시 부여했고, 이 번호를 아두이노 IDE에서도 그대로 사용할 수 있게 만든 것이다.

위의 핀맵 이미지처럼, D1, D2와 같은 번호는 실제 내부 GPIO 번호와는 다르니, 핀을 사용할 때는 꼭 이 맵을 참고해야 한다.

5. 그럼 어떻게 사용해야 하나?

아두이노 IDE에서 설치한 보드 패키지에는 D5, D6 같은 논리 핀 이름을 실제 GPIO 번호로 매핑하는 정의가 포함되어 있.

그래서 맨 위쪽에서 #define myPin D5와 같이 정의하면 보드 패키지 내부에는 #define D5 14이 들어있어, 결국에 myPin은 GPIO14번 핀을 가리키게 된다.

alt text

#define myPin D5
 
void setup(){
    pinMode(myPin, OUTPUT);
}

그 다음에는 그냥 일반 핀과 같이 사용하면 된다.

다만, 몇가지 핀들은 부팅이나 플래시와 관련되어 있어서 주의가 필요하다.

보드 핀(Dn)실제 GPIO 번호비고
D0GPIO16
D1GPIO5I2C SCL
D2GPIO4I2C SDA
D3GPIO0부트 관련 핀, 주의
D4GPIO2내장 LED
D5GPIO14SPI SCK
D6GPIO12SPI MISO
D7GPIO13SPI MOSI
D8GPIO15부트 관련 핀, 주의
RXGPIO3시리얼 수신
TXGPIO1시리얼 송신

6. 글을 마치며

alt text

지난번에 D1 R2를 사용할 때는 단순하게 온습도 센서만 달았기 때문에 그리 어려운점이 없었다.

이번에는 핀을 좀 더 많이 연결하다보니 새로운 것들을 조금 더 배우게 되었다.

내년에는 메이커 동아리나 한번 운영해볼까 싶다.