[아두이노 초급] 3. 아두이노 시작하기 2 (아두이노 IDE)

이전 포스트에선 아두이노 보드와 IDE의 설치, 설정 방법에 대해 알아보았다.

이번에는 IDE를 한 번 살펴보자.

위의 모습이 아두이노 IDE의 모습으로 앞서 설명한 1.8.19 버전과 2.3.8 버전이다.

간단하게 살펴보면 가장 위에는 ‘메뉴바’와 ‘툴바’가 존재하고 가운데는 흰색 바탕, 마지막엔 검은 바탕으로 구성되어 있는 것을 볼 수 있다. (2버전 부터는 검은 바탕이 컴파일 이후에 나오기 때문에 지금은 보이지 않는다.)

이 중 우리는 흰색 바탕에서 코딩을 하게 된다.

그런데 흰색 바탕에는 이미 어떤 내용이 작성되어 있는 것을 볼 수 있다.

여기를 자세히 살펴보면 두 개의 큰 틀로 구성된 것을 알 수 있는데 각각 ‘void setup’ ‘void loop’라고 되어 있다.

이 두 부분이 바로 아두이노 동작의 핵심 부분으로 이 두 가지가 없다면 아두이노는 동작하지 않는다.

그리고 ‘void setup’과 ‘void loop’는 반드시 하나씩만 존재해야 한다.

그럼 이제 이것들이 어떤 역할을 하는지 알아보자.

먼저 ‘void setup’이다.

‘void setup’은 이름 그대로 아두이노 보드를 설정(setup)하는 곳으로 아두이노 보드를 처음 켰을 때 즉, 처음 전원이 들어왔을 때 또는 리셋 버튼을 눌렀을 때 가장 먼저 동작하는 곳이다.

간단히 생각하면 게임이나 프로그램에서 하는 환경설정과 같은 역할을 한다고 볼 수 있다.

그래서 setup 동작을 하는 코드를 넣으려면 setup 뒤로 나오는 중괄호인 { 와 } 사이에 코딩을 하면 된다.

참고로 환경설정과 비슷하다고 했는데 우리가 다른 프로그램에서 처음에 설정을 하고 다른 동작을 하듯이 여기도 마찬가지로 전원이 들어왔을 때 가장 먼저 동작하지만 딱 한 번만 동작하는 곳이기도 하다.

그렇기 때문에 처음에 한 번만 동작하면 되는 코드들도 이곳에 작성하기도 한다.

참고로 계속 말하고 있는 코드란 아두이노 보드가 동작하기 위한 명령어를 뜻하고 코딩이란 이러한 코드를 작성하는 행위를 말한다.

다음은 ‘void loop’다.

여기는 setup과 달리 중괄호에 넣은 코드들은 전원이 꺼지지 않는 한 무한히 반복(Loop)하게 된다.

위의 그림을 예로들면 void loop가 6 ~ 9번째 줄에 해당하는데 6번째 줄부터 9번째 줄까지 순서대로 동작하고 동작이 끝나면 다시 6번째 줄로 돌아가 반복하게 된다.

그래서 아두이노를 처음 다루는 사람들은 코드를 작성하고 동작을 하게 되면 동작이 멈추지 않아 당황하면서 도대체 언제 멈추는지 묻곤 한다.

하지만 당연히 별도의 종료 코드가 없다면 멈추지 않고 계속 동작하게 된다.

그럴경우엔 동작을 멈추려면 전원을 제거하면 간단하니 참고하자.

그리고 loop를 좀 더 쉽게 비유를 하자면 가전제품을 예로 들 수 있다.

냉장고를 생각해보면 냉장고에 전원을 연결하면 지정된 온도를 유지하기 위해 냉장을 했다가 멈췄다가를 계속 반복하는데 이 부분이 바로 loop에 코드를 넣은 것과 같다고 볼 수 있다.

무한히 동작하니 이름이 loop인 것이고 계속 반복해서 동작하는 곳이니 아두이노 보드의 메인 동작 코드가 들어가게 된다.

이렇게 아두이노의 기본이 되는 setup과 loop에 대해 알아보았다.

하지만 본격적으로 코드를 작성하려고 setup과 loop 뒤쪽의 중괄호를 보면 이미 안에 어떤 글이 적혀있는 것을 볼 수 있다.

setup에는
// put your setup code here, to run once:

loop에는
// put your main code here, to run repeatedly:

이렇게 되어 있는데 이 글들 앞에 있는 //를 주목하자.

아마 setup과 loop에 테스트를 위해 글을 써보면 알겠지만 보통 글을 쓰면 글자의 색상이 검은색으로 나오는데 글 앞에 //를 붙이면 글이 옅은 회색으로 변경되는 것을 볼 수 있을 것이다.

이렇게 //를 하고 뒤에 글을 적으면 이 글은 쉽게 말하자면 아두이노 보드가 볼 수 없는 글이 된다.

그럼 누가 보라고 적는 글일까.

당연히 코딩을 하고 있는 사람들이 보라고 적어놓은 것이다.

이런 것을 설명문이라고 하고 좀 어렵게는 ‘주석’이라고 부른다.

주석은 코딩이나 중요한 부분을 설명해 놓은 설명문으로 //로 표시하면 뒤에 따라오는 한 줄을 주석으로 만들 수 있고 /* */을 이용하면 특정 영역을 통째로 주석으로 만들어 줄 수 있다.

그래서 현재 적혀있는 내용은 setup과 loop에 대해 간단히 설명하고 있는 것이다.

영어를 해석하면 좀 더 명확히 알 수 있다.

하지만 뭐 우리에겐 필요없는 부분이라고 볼 수 있다.

그러니 아두이노를 처음 한다면 저 부분은 지우고 setup과 loop만 남겨두고 사용하는 것이 편리 할 것이다.

이번에는 메뉴바를 살펴보자.

메뉴바는 ‘파일’ ‘편집’ ‘스케치’ ‘툴 또는 도구’ ‘도움말’로 구성되어 있다.

참고로 메뉴바의 이름은 아두이노의 버전마나 바뀌는 경우도 있지만, 순서나 안의 구성요소는 동일하다.

‘파일’은 일반적인 프로그램과 같게 환경설정이나 새파일, 저장하기, 불러오기 등의 기능과 아두이노에서 지원하는 기본적인 예제 파일들을 불러올 수 있게 되어 있다.

‘편집’에서는 우리가 만든 코드를 잘라내거나 복사하는 기능, 들여쓰기 같은 문서를 작성하는데 도움이 되는 기능들이 있다.

‘스케치’에서는 아두이노에서 사용하는 ‘라이브러리’를 불러오거나 작성한 코드를 검사하는 ‘컴파일(Compile)’ 기능, 코드를 아두이노 보드로 전송하는 ‘업로드(Upload)’ 기능 등이 담겨있다.

그 다음이 ‘툴’ 또는 ‘도구’ 메뉴인데 이 메뉴가 우리가 많이 사용하는 기능 중 하나다.

이 메뉴를 눌러보면 위의 그림과 같이 나타나는데 여기있는 모두가 중요하지만 지금 우리가 중점적으로 볼 부분은 ‘보드’와 ‘포트’다.

먼저 보드를 눌러보자.

보드를 눌러보면 위의 그림과 같이 나타난다.
(필자는 여러 보드를 설치해서 저렇게 나오지만 일반적으론 Arduino AVR Boards, Arduino Mbed OS Boards 이렇게 두 개가 나올것이다.)

여기서 우리가 사용하는 보드를 선택해야 하는데 일반적으로 쓰는 보드들은 대부분 AVR 기반 보드다.

이 AVR 이라고 하는건 이전 포스트에서 말한 마이크로컨트롤러의 종류라고 생각해도 된다.
(좀 더 자세히 알고 싶다면 AVR 코딩 쪽의 포스트를 살펴보자.)

특히 보드의 메인 마이크로컨트롤러가 ATmega라는 이름이라면 AVR 보드라고 생각하면 된다.

아무튼 우리는 이 AVR 보드 중에서 아마 우노 보드를 많이 사용할 것이다.

그래서 그림처럼 Arduino Uno 보드를 선택하면 된다.
(만약 보드를 잘못 선택한다면 이후 코드를 전송하는 업로드가 정상 동작하지 않으니 반드시 확인하자)

다음으론 포트다.

이 포트는 시리얼 포트(Serial Port)를 말하는 것으로 컴퓨터의 USB 포트를 뜻한다라고 생각하면 된다.

일반적으로 USB를 사용하는 장치들은 USB 포트에 연결되면 가상의 번호를 부여 받는데 이 번호를 보통 시리얼 포트 번호라고 말하고 이 번호를 통해 컴퓨터는 장치들을 구분하고 사용할 수 있게 한다.

우리가 사용하는 아두이노 역시 USB 포트에 연결하는 장치이기 때문에 연결하게 되면 하드웨어 장치 드라이버 설치라는 메뉴가 나타나고 가상의 포트 번호가 배정된다.

부여 받은 포트 번호는 장치 관리자를 통해 확인할 수 있다.

그리고 우리는 이 번호를 통해 코드를 전송하게 된다.

그렇기 때문에 ‘툴’ 메뉴의 ‘포트’에서 배정 받은 번호를 선택해주어야 하는 것이다.

보드가 선택된 포트 번호를 누르고 다시 ‘툴’ 메뉴로 들어가면 포트에 선택된 번호가 나타나 있고 안에는 체크 표시가 되어 있는 것을 볼 수 있다.

참고로 위의 그림에 보이는 것처럼 보통은 COM49 (Arduino Uno)와 같이 번호와 연결된 보드의 이름이 같이 나오는데 일부 호환 보드에서는 연결된 보드의 이름이 나오지 않는 경우가 있다.

그럴 경우 장치 관리자로 들어가서 내 보드가 어떤 번호에 연결되어 있는지 확인해야 한다.

그림처럼 나오는게 일반적이긴 하지만 이렇게 말고 USB Serial Port 이렇게만 나오는 경우도 있다.

이건 컴퓨터의 운영체제, 보드에 따라 나오는게 다르게 나올 수 있는 점도 참고하자.

그리고 만약 장치관리자를 확인할 수 없는 상황이다라고 한다면 웬만하면 가장 큰 번호가 지금 연결한 아두이노 보드의 번호일 확률이 높다.

일반적으로 사용하는 보드를 처음 연결하는 경우가 많을테니 그럼 가장 높은 번호로 배정받게 된다.

참고로 같은 종류의 보드라도 보드 자체가 다르다면 포트 번호는 계속 새롭게 배정받는다.

필자는 한참 실험을 많이 할 땐 300번대 이상까지 가본적도 있다.

이런 경우 아두이노 IDE에서는 문제가 없지만, 만약 아두이노로 블록코딩과 같은 다른 프로그램에 사용한다면 문제가 발생하는 경우가 많으니 번호가 100번 가까이 간다고 하면 한 번씩 초기화시켜주는 것도 좋다.

이렇게 보드와 포트를 선택했다면 이제 아두이노 IDE의 오른쪽 아래를 보면 선택된 보드와 번호가 표시되어 있는 것을 볼 수 있다.

그리고 아마 눈치챘을지 모르겠지만 지금 보드, 포트를 설명할 때 자료로 1.8.19 버전을 토대로 설명했다.

이건 2버전도 동일하게 사용하는 것이라 그런 것도 있지만 2버전에서는 좀 더 쉽게 선택할 수 있게 되어 있어서 그 부분을 설명하기 위해 1.8.19 버전만을 이용해서 설명했다.

우리가 2버전을 보면 1.8.19 버전과 달리 메뉴바 밑의 ‘툴바’에 흰색 바가 있는 것을 볼 수 있다.

2버전에선 이 바를 통해서 한 번에 아두이노가 연결된 포트를 바로 확인해 볼 수 있다.

바 옆의 화살표를 누르면 밑으로 보드 이름과 포트 번호가 나오는데 이것을 통해 한 번에 연결할 수 있다.

하지만 위에서 이야기한 것 중에서 포트 번호 옆에 보드 이름이 나타나지 않는 경우가 있다고 했었다.

그런경우 그림처럼 보드 이름 자리에 ‘알 수 없음’이라고 나오는데 이렇게 되면 동일하게 ‘도구’ 메뉴로 가서 보드와 포트를 별도로 지정해주어야 한다.

선택을 마치면 위의 그림처럼 이제 짙은 검은색으로 현재 연결된 보드 이름이 나오는 것을 볼 수 있다.

다음으로 우리가 자주 쓰는 메뉴를 모아둔 ‘툴바’를 살펴보자.

그림에 표시된 부분이 ‘툴바’로 여기서 우리가 생각할건 체크 표시 버튼과 화살표 버튼이다.

각각 버튼에 마우스를 올려보면 이름이 나오는데 체크 표시에 마우스를 올리면 확인이라는 이름이, 화살표에 마우스를 올리면 업로드라는 이름이 나오는 것을 볼 수 있다.

여기서 확인은 컴파일을 번역해 놓은 것으로 위에서 말한 것과 같이 작성한 코드의 문법적 오류가 있는지 확인하는 것이다.

업로드는 이름 그대로 아두이노 보드로 작성한 코드를 전송하는 버튼이다.

이때 업로드할 때 잘못된 코드를 전송할 수 없으므로 기본적으로 업로드 전에 확인(컴파일)을 하고 전송하게 된다.

그리고 오류가 발견되면 업로드를 중지하게 된다.

오류가 발견되면 컴파일 실패라는 문구와 함께 아래쪽 검은 바탕에 오류 사유가 나타난다.

오류 사유와 함께 위쪽 코드에 잘못된 부분을 표시해주는데 이런말 하긴 좀 그렇지만 이 내용이 절대적인 것은 아니어서 오류가 났다면 해당 줄만 확인하는 것이 아닌 앞 줄, 뒷 줄도 확인해야 하고 만약 거기도 오류가 없다면 전체 코드도 살펴보아야 한다.

그래도 어지간한 오류는 제대로 표기되니 일단 여기를 확인하고 오류를 수정하면 좋다.

그리고 확인에 성공하면 컴파일 완료라는 문구와 함께 세부정보가 검은 바탕에 나타난다.

세부 정보를 읽어보면 저장 공간에 대한 내용이라는 것을 알 수 있을 것이다.

우리가 사용하는 우노 보드는 ATmega328p 마이크로컨트롤러를 사용하고 있고, 이 마이크로컨트롤러의 스팩을 보면 이렇게 되어 있다.

  • Flash Memory : 32KB (32,768 byte)
  • SRAM : 2KB (2,048 byte)

위의 그림과 비교하면 프로그램 저장 공간은 Flash Memory에 해당하고 동적 메모리는 SRAM에 해당한다.

이때 우리가 사용할 수 있는 공간은 프로그램 저장 공간은 32,256 바이트, 동적 메모리는 2,048 바이트고, IDE에서는 이 중 현재 코드가 얼마나 사용되었는지를 표시해 주고 있는 것이다.

우리 컴퓨터로 쉽게 비유하자면 프로그램 저장 공간은 하드디스크나 SSD와 비슷한 역할을 하고, 동적 메모리가 램과 비슷한 역할을 한다고 생각하면 된다.

다만, 컴퓨터와 약간 차이가 있는데 동적 메모리의 경우 최대 용량에 가까워질수록 오류가 발생하는 경우가 많아 70% 이내로 사용하기를 권장하고 있다는 것이다.

그래서 IDE에서도 70% 이상 용량을 사용하면 안정성 문제가 발생할 수 있다는 경고 메시지를 표시한다.

지금은 용량이 실감이 나지 않겠지만 나중에 아두이노를 이용해서 프로젝트나 시제품을 만든다고 한다면 한 번쯤 볼 수 있는 경고다.

이런 경고를 피하기 위한 코딩 방법들도 있는데 그 부분은 질의응답 쪽을 참고하자.

이렇게 해서 확인과 업로드 버튼에 대해 알아보았고 이것을 제외하면 ‘툴바’에서 중요한 부분은 오른쪽 끝에 있는 돋보기 모양 버튼이다.

이 버튼은 ‘시리얼 모니터’라고 하는데 간단히 말하자면 센서나 다른 보드 또는 컴퓨터와 통신을 할 때 그 내용을 볼 수 있는 곳이라고 생각하면 된다.

자세한 것은 이후에 통신을 다룰 때 다시 살펴보자.

여기까지해서 간단한 아두이노 IDE의 사용법에 대해 살펴보았다.

설명하지 않은 부분은 지금 당장 필요한 것이 아니기 때문에 앞으로 아두이노를 해가면서 하나하나 익혀갈 수 있게 남겨두었다.

그럼 다음 포스트에서는 실제 코딩을 해보고 아두이노 보드를 동작해보자.

error: Content is protected !!