본문 바로가기

관련 기술/SBC(싱글보드컴퓨터)

환경설정 하기 전에 일단 GPIO부터 사용해보자

728x90

Jetson Nano에 OS를 설치한 후, 이것저것 오류투성이인 환경을 설정하다가 문득 꼭 환경을 잘 맞춰놓고 해야하나.. 라는 의문이 들었습니다.

물론 모든 환경을 잘 맞춰두고 시작하면 앞으로 편하겠지만 반드시... 라는 것은 없으니까요.

환경설정 과정을 나중에 관련 강의에도 사용할 것이기때문에 이왕 할 것은 정확하게 준비해야 하니까 좀 느긋하게 오류들을 구경해 가면서 설정하자.. 라고 생각하게 되었습니다.

 

그래서 일단...

처음 OS를 설치하고 나면 어떤 상태인지부터 살펴보기로 했습니다.

 

먼저 NVIDIA 드라이버가 잘 설치되어 있는지부터 확인해 보았습니다.

Edge Computing 환경에서 AI 프로그램을 돌려보기 위해서 Jetson Nano를 구매한 것이기때문에 CUDA를 사용하기 위해선 NVIDIA 드라이버의 설치가 필수겠죠.

기본적인 설정은 다 되어있다고 소개를 받았기 때문에, 그리고 NVIDIA에서 개발된 데모 프로그램이 잘 동작하기때문에 NVIDIA 드라이버는 잘 설치되어 있을거라고 생각했습니다.

응?

그러나 NVIDIA 드라이버가 설치되어 있다는 내용은 찾아볼 수 없습니다.

Other Software 탭에서 file:///var/cuda-repo-l4t-10-2-local/ 라는 경로만 등록되어 있고 다른 탭에는 아무런 정보가 없네요.

해당 경로에 찾아가보면 cuda 관련 압축 파일들이 수 십개 깔려있을 뿐 다른 것은 없습니다.

뭔가 찜찜하네요.

 

그래서 터미널을 실행시키고 파이썬과 같은 기본 프로그램들을 확인해 보았습니다.

파이썬은 2.7버전과 3.6버전이 설치되어 있습니다.

pip는 2버전, 3버전 모두 설치되어 있지 않네요.

그리고 중요한 nvidia-smi가 인식되지 않습니다.

아무래도 NVIDIA 드라이버는 설치되어 있지 않거나.. 다른 방법을 통해서 확인해야 하는 것 같습니다.

 

어쨋든 파이썬은 설치되어 있으니 어떤 라이브러리들이 깔려 있는지 확인해 보기로 했습니다.

Jetson Nano를 이용해서 다른 디바이스들을 제어하려면 GPIO (General-Purpose Input/Output)를 사용해야 하는데 제가 가지고 있는 Jetson Nano 책들을 보면 Jetson.GPIO 라는 것을 설치하고, 또 GPIO를 사용하기 위한 유저, 그룹 등을 생성한 후, 권한부여 등의 작업을 해 주어야 한다고 합니다.

 

일단 뭐가 깔려있는지부터 보겠습니다.

파이썬에서 가장 기본적으로 사용하는 라이브러리라고 하면 당연히 numpy겠죠.

그리고 pandas, matplotlib 등의 라이브러리가 있을 것입니다.

다음과 같은 항목을 확인해 보았습니다.

  • numpy
  • pandas
  • matplotlib
  • Pillow
  • tensorflow
  • torch
  • Jetson.GPIO

파이썬 버전이 2.7과 3.6이 깔려있으므로 둘 다 확인해 보았습니다.

파이썬 2.7에는 numpy와 Jetson.GPIO가 깔려있다.

numpy는 깔려있는데 다른 것은 아무것도 안깔려있네요.

그런데... 설치해야 한다고 되어있던 Jetson.GPIO는 이미 깔려 있습니다.

왜일까요?

 

그럼 파이썬 3.6도 살펴보겠습니다.

Tensorflow, torch 빼고는 깔려있다.

파이썬 3.6에서는 tensorflow와 torch(파이토치)를 제외하고는 확인했던 라이브러리는 다 깔려있습니다.

역시 Jetson.GPIO도 설치되어 있습니다.

책에 나온 내용들은 아무래도 최신 버전의 OS 이미지가 아닌가 봅니다.

 

그럼 다음으로는 GPIO의 동작을 확인해야겠죠.

그룹, 유저, 권한 등을 등록해야 한다고 하는데...

Jetson.GPIO도 이미 설치되어 있고 import도 무리없이 수행되는 것으로 봐서 따로 그룹, 유저, 권한 등록은 하지 않아도 될 것 같습니다.

인터넷에서 검색해 본 결과로는 그룹, 유저, 권한 등록을 하지않으면 import가 되지 않는다고 하더군요.

그래서 그냥 바로 Jetson.GPIO를 사용해 보기로 했습니다.

 

파이썬 코드를 작성하기 전에 GPIO에 연결할 간단한 회로부터 구성해야겠죠.

간단하게 LED를 켜는 작업을 해 볼거라서 LED 하나와 220Ω 저항만 하나 꽂았습니다.

그런데 브레드보드에 부품들을 꽂고나니... 

점퍼와이어가 죄다 M-M 타입뿐이네요.

M-F 타입이 있어야 Jetson Nano의 GPIO 핀에 꽂을텐데..

일단 온라인 구매를 해놓고..

가지고 있는 부품통을 다 뒤집어서 찾아보니 저 케이블(윗 그림에서 우측하단 그림) 하나가 쓸 수 있는 유일한 케이블이더군요.

핀 홀은 4개인데 와이어가 3개만 체결되어 있는 케이블이라... 어떻게 써야하나.. 잠시 고민했는데 GPIO의 33번핀과 GND(그라운드, 접지)가 나란히 붙어있더군요.

그래서 그 자리에 케이블을 꽂고, 브레드보드에 연결했습니다.

 

자 그럼 이제 파이썬 코드를 작성해야합니다.

간단하게 만들어봅시다.

import Jetson.GPIO
import time

LEF_PIN = 33

GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED_PIN, GPIO.OUT)

GPIO.output(LED_PIN, True)
print("LED turn on")
time.sleep(2.0)
GPIO.output(LED_PIN, False)
print("LED turn off")

GPIO.cleanup()

이제 동작을 시켜보겠습니다.

LED에 불이 잘 들어왔습니다.

GPIO를 위한 그룹, 유저, 권한 등록을 해 주지 않아도 잘 동작하는군요.

그런데 사진이 밝아서 LED에 불이 켜진게 잘 안보이네요.

방의 불을 끄고 다시 한 번 보죠.

이제 확실하게 보입니다.

Jetson Nano의 화면은 어떤지 보겠습니다.

잘 동작했네요.

 

이렇게 개발환경을 완전히 구축하기 전에... OS 이미지만 설치한 가장 초기상태에서 Jetson Nano의 GPIO를 이용해 제어를 해 보았습니다.

 

흠....

개발 작업이 좀 불편하긴 해도... 그냥 이대로 써도 문제는 없어보이네요.

그래도 강의에 활용하려면 개발 환경 구축은 해야겠죠.

잘 동작하는 것을 확인했으니.. 적당한 선까지만 환경을 구축하고 내용을 정리해서 올리도록 하겠습니다.

 

 

 

 

 

728x90
반응형