[Tinker Board S] GPIO이용#1 - 개발환경 및 Digital I/O(C/C++) 설명/RPI3 비교
Small Devices/Tinker Board S 2018. 8. 16. 22:16본 체험 제품은 아이씨뱅큐(주)에서 진행하는 무상 체험단 활동으로 작성한 것입니다.
이전 포스팅(http://alnova2.tistory.com/1223) 에서는 ASUS Tinker Board S 의 H/W 측면에서 설명하였습니다. H/W만을 보았을때는 메이저 SBC라고 할 수 있는 라즈베리파이 3 B에 비하여 월등한 스펙을 보여줍니다. 하지만 SBC의 특성상 활용성, 즉 S/W가 중요한 요소라고 할 수 있습니다. 이번 포스팅에서는 S/W 측면, 그것도 기본 OS에서의 GPIO 이용 환경 중심으로 Raspberry Pi 3B와 비교하면서 설명하도록 하겠습니다.
1. 기본 OS
[Tinker Board S]
ASUS Tinker Board S에 기본으로 제공되는 OS는 debian stretch 기반의 Tinker OS라고 할 수 있습니다. TinkerOS 는 ASUS 페이지에서 다운로드 할 수 있으며 현재(2018.08.16) 최신 버전은 v2.0.7 (2018.06.22 Release)입니다. OS를 eMMC에 설치하고 uname 명령어로 커널 정보를 보면 다음과 같이 나옵니다.
리눅스 커널 버전은 4.4.103 이고 armv7l 버전임을 알 수 있습니다.
OS가 인지하는 CPU 정보를 보도록 하겠습니다.
[Raspberry Pi 3 B]
Raspberry Pi의 기본 OS는 역시 raspbian이라고 할 수 있습니다. raspbian 역시 debian stretch 기반이며 현재(2018.8.16) 최신 버전은 2018-06-27 Release 버전 입니다. OS는 sdcard에 설치하고 uname 명령어로 커널 정보를 보면 다음과 같이 나옵니다.
리눅스 커널 버전은 4.14.50 이고 arm7l 버전임을 알수 있습니다.
OS가 인지하는 CPU정보를 보도록 하겠습니다.
tinker board에 비해서 thumbee가 없으며 crc32는 raspberry pi 3에만 존재하네요.
[비교]
역시 메이저 SBC답게 라즈베리파이의 기본 OS가 커널 버전이 높다는 것을 알수 있습니다. CPU정보를 보았을때 CPU Core 는 Tinker Board S 보다는 raspberry pi3가 신형이라는 것을 알 수 있습니다. 이는 Model Name에서 Tinker Board S는 ARMv7 Processor rev1 이고 Raspberry Pi3는 rev4라는 것에서 확인 가능합니다. 또한 Tinker Board S에서 지원하는 Flag인 thumbee는 사실 deprecated 되는 항목입니다. ARMv8은 ThumbEE 지원을 없앤다고 하네요. CPU 관련으로는 https://en.wikipedia.org/wiki/ARM_architecture 를 참고하시면 되겠습니다.
사실 SoC가 나온 연도를 보면 RockChip RK3288은 2014년도이고, Raspberry Pi 3의 SoC인 BCM2837은 2016년도 정도이니 차이가 있으리라 생각 됩니다.
호기심에 이것저것 확인해 보았지만, 사실 이 부분은 일반 사용자에게 중요한 부분이 아닐 수도 있습니다. 커널 버전보다는 패키지의 종류와 호환성등이 더 중요하니까요.
2. Build(glibc/gcc/g++ version)
[Tinker Board S]
Tinker Board S는 다음과 같은 빌드 환경을 가지고 있습니다.
[Raspberry Pi 3 B]
Raspbrry Pi는 다음의 빌드 환경을 가지고 있습니다.
[비교]
빌드 환경의 경우 debian stretch의 기본 배포판과 연관이 있는듯 합니다. Tinker OS, Raspbian 둘다 debian stretch 기반이다 보니 동일합니다!
3. Python/Node.js
[Tinker Board S]
기본적으로 깔려 있는 Python 버전은 2.7.13입니다. node.js 의 경우 sudo apt-get install nodejs 하게 되면 debian stretch 의 기본 버전인 4.X대가 설치 됩니다. 현재 node.js의 LTE버전은 8.x 대 버전으로 가능하면 8.x버전을 설치해 주는 것이 좋습니다. 다음처럼 설치해 줍니다.
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt-get install -y nodejs
이후 node 및 npm version을 확인해 봅니다.
8.11.4, 5.6.0이 설치되었네요.
[Raspberry Pi 3B]
기본적으로 깔려 있는 Python버전은 동일합니다. 이 역시 debian 배포판과 연관이 있는듯 합니다.역시 node.js의 경우에도 sudo apt-get install nodejs 하게 되면 debian stretch의 기본 버전인 4.X대가 설치됩니다. 8.x 버전으로 설치해주는 것이 좋습니다. Tinker Board S와 동일하게 설치해줍니다. 이후 node 및 npm 의 버전을 확인해 보면 동일한 버전이 설치됨을 알 수 있습니다.
4. GPIO 이용
기본 OS 이외에 2 Build 환경, 3 Python/Node.js 를 설명했던 이유는 결론적으로 GPIO이용과 관련이 있기 때문이었습니다. 사실 Raspberry Pi의 업력과 활성화된 커뮤니티에 비하면 Tinker Board는 초라한것은 사실 입니다. 이 부분은 사실상 후발주자가 어떻게 해당 디바이스를 활성화 시킬 것인지 많은 고민이 필요한 부분입니다. Raspberry Pi와 그대로 호환이 된다면 더할 나위 없겠으나, SoC(즉CPU)에 의존성이 있는 부분이어서, Rockchip을 이용하는 Tinker Board의 경우 그대로 호환이 100% 안된다고 봐야 합니다. 즉 전용 소프트웨어를 이용하거나, 새로 빌드해야 하는 것이죠.
GPIO는 Tinkerboard와 Raspberry Pi 3를 섞어서 설명하도록 하겠습니다.
[GPIO Pinout]
ASUS Tinkerboard의 wiki 에는 GPIO에 대한 설명이 있습니다.(https://tinkerboarding.co.uk/wiki/index.php/GPIO) ` GPIO Pinout은 다음과 같습니다.
라즈베리파이3B의 pintout은 다음과 같습니다.
이전 H/W 설명에서 잠깐 이야기 드렸던 것처럼 Raspberry PI 와 Power/GND/GPIO 핀은 일치합니다만, I2C, SPI를 이용할때는 번호에 주의해야 할듯 합니다.(이 부분은 향후 포스팅에서 검증해 보도록 하겠습니다.) 그리고 UART의 경우 RPI는 1개를 지원하는데 반해서 Tinker Board는 4개의 UART를 지원한다고 되어 있습니다.
H/W PWM은 32, 33번 Pin으로 제공합니다. Raspberry Pi3의 경우 33(=35), 32(=12)번을 지원하고 33번-35번, 32번-12번은 사실상 동일한 PWM Signal을 받습니다. 따라서 Raspberry Pi의 35,12번을 PWM으로 이용하지 않으면 PWM 핀번호는 동일합니다.
[GPIO Library]
Tinker Board S의 GPIO Library는 gpio_lib_c 에 기반합니다. (https://github.com/TinkerBoard/gpio_lib_c) github에 설명을 보면 WiringPi 의 extension이라고 되어 있는데요. GPIO이용 C/C++ 프로그램에서 헤더에 #include <wiringPi.h>를 포함시키고 컴파일 시 옵션으로 -lwiringPi를 넣으라고 하는 것을 봐서는 wiringPi와 빌드시에 호환되는 것으로 보입니다. 그렇다고 하면 wiringPi 기반의 Python/Node.js 모듈이 raspberry pi와 tinker board와 호환될 가능성이 있어 보입니다. gpio_lib_c는 다음과 같이 설치할 수 있습니다.
$ sudo apt-get install git
$ git clone https://github.com/TinkerBoard/gpio_lib_c.git
$ cd gpio_lib_c
$ chmod a+x build
$ sudo ./build
raspberry pi 처럼 콘솔에 pinout을 뿌려주는 프로그램이 있습니다. 다음과 같이 사용합니다.
$ gpio readall
실행 결과는 다음과 같이 나옵니다.
raspberry pi의 경우 wiringPi 라이브러리를 별도로 설치할 필요 없고 gpio utility는 별도 설치 없이 이용 가능합니다. wiringPi 라이브러리는 기본 OS에 담겨져 있습니다.
raspberry pi 3에서gpio readall 명령 실행 결과는 다음과 같습니다.
그리고 Raspberry Pi3는 WiringPi이외에 bcm2835( http://www.airspayce.com/mikem/bcm2835/) 라이브러리도 많이 사용 됩니다. (예를 들어 node.js 패키지의 rpio는 bcm2835 라이브러리 기반입니다.) bcm2835 라이브러리는 사실상 브로드컴 chipset만 지원될 것이기 때문에 bcm2835 라이브러리로 빌드된 패키지/모듈들은 tinker board에서는 사용이 불가할것 같습니다.
[Blink Led 예제]
Blink LED는 기본적인 GPIO Digital I/O 예제입니다.
tinker board wiki사이트에 있는 C프로그램을 약간 변경해서 테스트 해보겠습니다. 코드는 다음과 같습니다.
#include <stdio.h> #include <wiringPi.h> #define LED 8 int main (void) { printf ("TB blink\n"); wiringPiSetup (); pinMode (LED, OUTPUT); for (;;) { printf ("led on\n"); digitalWrite (LED, HIGH); delay (1000); printf ("led off\n"); digitalWrite (LED, LOW); delay (1000); } return 0; } |
LED 핀은 8번으로 지정하였는데요, gpio readall에서 보면 wPi 번호에 해당됩니다. (wPi는 wirpingPi의 핀번호라는 의미 입니다.) 다음과 같이 LED를 연결합니다.
test.c로 저장하고 다음과 같이 컴파일 합니다.
$gcc -o led ./test.c -lwiringPi
다음은 실행 결과 입니다.
이 소스 코드가 Raspberry Pi3 에서도 같은 핀으로 동일하게 동작하는지 확인해 보도록 하겠습니다.
Raspberry Pi에 test.c 코드를 생성하고 다음과 같이 컴파일 합니다. led라는 실행 프로그램이 생성됩니다.
$gcc -o led ./test.c -lwiringPi
led를 실행시켜 보면 raspberry pi3에서도 다음과 같이 LED 가 깜빡거리게 됩니다.
wiringPi를 이용하는 C/C++은 라즈베리파이3와 동일하게 동작할 것으로 생각됩니다만, 그렇다면 이 라이브러리에 기반한 node.js 패키지는 어떻게 될지 알아보겠습니다. node.js npm 라이브러리중 wiringPi를 이용하는 gpio npm 모듈이 tinker board에서 동작하는지 확인해 보겠습니다.
node 모듈 중 wiring-pi가 wiringPi 라이브러리를 사용하는 것으로 알려져 있습니다. tinker board에서 다음과 같이 wiring-pi모듈을 설치해 보겠습니다.
$ npm install wiring-pi
설치는 잘 됩니다. 하지만 다음과 같이 node.js에서 코드를 입력해 보면 브로드컴 칩셋이 아니면 동작을 안하도록 되어 있네요. -_-;
즉 Raspberry Pi 3에서 node.js의 wiring Pi 기반 모듈들은 정상 동작 안할 가능성이 많아 보입니다.
다음 편에서는 Digital I/O(Python/node.js) PWM, I2C 등에 대해서 비교해보도록 하겠습니다.
다음은 GPIO 관련 포스팅입니다.
1. 개발 환경 및 Digital I/O(C/C++) 설명/RPI 비교: http://alnova2.tistory.com/1225
2. Digital I/O 설명(Python/Node.js) 및 PWM 설명/RPI비교 : http://alnova2.tistory.com/1226
3. i2c 설명 및 총평/RPI 비교: http://alnova2.tistory.com/1227
- ASUS 팅커보드 S 공식 구입처: 아이씨뱅큐 http://www.icbanq.com/
- 아이씨뱅큐 공식 카페: http://cafe.naver.com/icbanq
- 아이씨뱅큐 공식 블로그: http://blog.naver.com/icbanq