Embedded Lecture/Arduino2017. 4. 11. 21:10


아두이노 라이브러리는 다른 언어와 마찬가지로 코드의 재사용성을 높혀 유지관리를 쉽게 만들어줍니다. 물론 상업용 업체에서는 코드를 컴파일하여 제공하므로써 우선 코드 암호화를 통한 보안 등에 더 관심을 갖을 수는 있지만, 아두이노(Arduino)나 리눅스(Linux)처럼 컴파일된 파일 혹은 실행 파일과 더불어 소스 코드도 제공하는 경우에는 사용자가 코드의 디버그(debug)와 같은 효율성 및 유지관리 측면에서 보다 촛점을 맞출 수 있습니다.


라이브러리(Library)는 기본적으로 사용자가 작성한 코드로 자주 사용하는 코드를 모듈화하여 추후에 쉽게 불러다 사용할 수 있도록 소스 코드 자체나, 컴파일하여 목적코드(object) 형태로 저장한 것입니다. 사실 사용자 뿐만 아니라 소프트웨어 환경제공자나 제조업체에 의해서 제공되는 경우가 많습니다. 이러한 라이브러리는 재사용이 가능한 루틴이나 함수 등으로 구성되며, 이 루틴이나 함수의 내부를 모르고도 설명만으로 누구나 헤더파일에 선언하여 컴파일 시 쉽게 가져다 사용할 수 있습니다.


여기서는 인터넷상에서 다운로드한 아두이노용 라이브러리를 설치하는 방법과 직접 라이브러리를 작성하는 방법에 대해서 설명합니다. 우선 Arduino IDE를 설치하면 {내문서}\Arduino\libraris 폴더가 생성되고, 여기에 다운로드 받은 라이브러리를 복사하거나 사용자가 직접 작성한 라이브러리를 저장합니다. 컴파일을 수행할 때 이 폴더는 자동으로 'include'되어서 여기에 있는 라이브러리들이 링크하게 됩니다.


라이브러리는 기본적으로 폴더 단위로 저장되어야 하는데, 예를 들어 'MyLib' 라는 이름(통상 라이브러리명은 대문자로 시작함)으로 라이브러리를 작성한다면, {내문서}\Arduino\libraris 폴더 밑에 MyLib라는 폴더가 있어야 하고, 이 폴더 밑에 MyLib.h 헤더 파일과 MyLib.cpp 파일이 있어야 합니다. 만일 예제 파일을 제공하고 싶다면 별도의 example 폴더 밑에 예제 파일의 이름과 같은 폴더를 두고 그 밑에 .ino 파일을 위치해 두어야 합니다. 이와 같은 폴더 구조를 유지하는 것이 다수의 사용자들에게 통일되고 익숙하기 때문입니다.



통상 라이브러리는 클래스나 변수 등을 선언한 헤더 파일(*.h)과 클래스 멤버함수의 정의부가 있는 *.cpp 파일로 나뉩니다. 그리고 헤더 파일에는 MyLib 클래스가 선언되어 있어야 합니다. 보통은 헤더 파일과 *.cpp 파일로 구분되지만 모든 선언과 정의를 헤더 파일에 둘 수도 있습니다만, 헤더 파일에는 클래스의 선언부를 작성하고 그것을 구현한 *.cpp 파일을 별도로 두는 것이 더 일반적이고 바람직하다는 것입니다. 이렇게 구성하면 이 라이브러리를 사용하는 스케치 파일에서는 헤더 파일만 include 해서 사용할 수 있고, 여러 곳에서 중복해서 사용할 경우에도 헤더 파일만 포함하면 되기 때문입니다.


아두이노 홈페이지에서 다양한 아두이노 라이브러리를 제공하고 있습니다. 사용자는 여기에서 필요한 라이브러리를 다운로드 받아서 설치할 수 있습니다. 예를 들어 OneWire 라는 라이브러리를 다운로드 받았다고 가정하면, 다운로드 폴더에 OneWire.zip 파일이 다운로드 되어 있을 것입니다. 이 압축파일에는 OneWire.h, OneWire.cpp 파일이 들어 있습니다. 이 경우 이 압축파일을 이용하여 바로 사용자 라이브러리 폴더에 복사할 수 있는데 다음과 같이 'Sketch>Include library > Add .ZIP Library' 메뉴를 이용하여 압축파일을 선택해 주면 됩니다.


아두이노 라이브러리


이 경우에, OneWire.zip 파일을 선택하면 자동으로 사용자 라이브러리 폴더에 압축이 해제되서 복사하게 됩니다. 만일에 인터넷 상에서 특정 라이브러리의 특정 버젼을 필요로 하는 경우에는 사용자가 직접 압축을 해제한 후에 필요한 폴더 혹은 파일만을 사용자 라이브러리 폴더에 수동으로 복사해도 무방하다는 것입니다.



'Embedded Lecture > Arduino' 카테고리의 다른 글

인터럽트의 처리(2)  (0) 2017.05.08
초음파 센서를 이용한 거리 측정 예제  (0) 2017.04.16
아날로그 출력(PWM)  (0) 2017.03.20
아날로그 입력 및 온도계 예제  (0) 2017.03.19
아날로그 입력  (0) 2017.03.18
Posted by Nature & Life