본문 바로가기
  • 개발자 Jueony의 블로그
개발 관련

Nvidia Jetson 보드 C++ GPIO 라이브러리

by jueony 2021. 4. 19.

 

2019년도에 Jetson Nano를 가지고 간단한 프로젝트를 진행한 적이 있는데, 지금은 어떤지 잘 모르겠지만 당시에는 Nvidia에서 공식으로 제공하는 GPIO 라이브러리가 Python 버전 밖에 없었다. 

 

당시 진행하던 프로젝트에서는 Python도 사용하였지만 C++로도 GPIO를 다뤄야해서 찾아보다가 공식에서 지원하는 Python 라이브러리 코드를 보니까 생각했던거보다 훨씬 단순해서 그냥 그걸 보고 직접 C++로 포팅작업을 했었다. 코드 내용은 파일시스템을 통해서 GPIO 핀에 접근하는 방식으로 매우 심플했기 때문에 사실 원리만 이해하면 만드는 것 자체는 어렵지 않았다.

 

포팅 작업은 최대한 Nvidia의 공식 Python 라이브러리와 API가 비슷하게 만드는 것에 집중하여 작업했다. (보니까 Nvidia의 공식 라이브러리도 라즈베리파이의 GPIO 라이브러리의 API를 본따서 거의 비슷하게 쓸 수 있도록 만들어 놓은듯 함). 공식에서 제공하는 라이브러리를 Python에서 C++로 거의 그대로 이식했는데, Jetson Nano 외에도 다른 Jetson 보드들에서도 쓸 수 있다.(TX2, AGX Xavier, Nano, NX 지원하는데, 실제로 내가 직접 테스트해본건 Nano와 TX2뿐임) 물론 당시 나는 내가 진행하는 프로젝트에서 쓰는게 주목적이었기 때문에 공식 Python 라이브러리의 모든 기능을 다 이식하지는 않아서 지원하지 않는 기능들도 있다.

 

당시 작업한걸 그냥 버리긴 아깝고 혹시나 나중에 다시 Jetson을 사용하게 될지도 모른다는 생각에 일단 github에 올려놓긴 했지만 "설마 누가 쓰기나 하겠어" 하는 생각으로 그 동안 방치했었다. 그런데 최근에 오랜만에 들어가보니 생각보다 많은(?) 사람들이 관심을 가져줘서 놀랐다. 버그 리포트가 올라온 것 뿐 아니라 그에 대한 fix와, 새로운 Jetson 모델(NX였나?)을 지원하는 update가 pull request로 들어와있는 것이 아닌가! 매우 작고 허접한 프로젝트지만 처음으로 open source 프로젝트에 참여했다는게(게다가 내가 시작한 프로젝트라니!) 뭔가 신기했다.

 

지금은 당시 진행했던 프로젝트도 끝나고 현재 나에게 Jetson 보드도 없기 때문에, 더 이상 개발을 하기 어려운(랄까 더 개발할 계획이 없는) 상황이지만, 그래도 혹시 필요한 사람이 있을까 해서 링크를 남겨둔다. 

 

Github 레포지토리: 

https://github.com/pjueon/JetsonGPIO

 

GitHub - pjueon/JetsonGPIO: A C++ library that enables the use of Jetson's GPIOs

A C++ library that enables the use of Jetson's GPIOs - GitHub - pjueon/JetsonGPIO: A C++ library that enables the use of Jetson's GPIOs

github.com

 

2022/02 수정:

아래 글에서 썼듯이 결국 Jetson Nano를 다시 구입했고 라이브러리 개발을 다시 시작했다!ㅋ

https://jueony.tistory.com/15

 

돌아온 Jetson Nano

이 글에서 잠깐 다뤘지만, 약 2년 전쯤에 Jetson Nano라는 Nvidia에서 나온 보드를 갖고 프로젝트를 진행한 적이 있다. 그때 잠깐 사용하고 다시 사용하게 될 일이 없을 것이라고 생각했는데... 최근에

jueony.tistory.com

 

이 글을 썼을 당시만 해도 이 라이브러리는 Python 공식 라이브러리의 기능을 전부 지원하지 않았지만

지금은 여러 contrubutor들 덕분에 Python 공식 라이브러리의 모든 기능을 지원하게 됐다!

라이브러리 자체의 기능적인 측면 뿐만 아니라, cmake를 이용해서 더 깔끔하게 패키징까지 하게 됐다!

 

이 프로젝트를 해보면서 개발자로서 많은 자극이 됐고 생각지도 못한 새로운 것들을 배웠다.

- Github을 통해서 개발자들이 소통하고 Open Source 프로젝트가 성장하는 과정을 처음 체험해봤다
(issue, pull request 등)

- 다른 성공한 Open Source 프로젝트들이 어떤식으로 문서를 작성하고 issue를 관리하는지 배울 수 있었다 

- 내가 평소에 잘 알지 못했던 cmake에 대해 새로 배우게 됐다

- 평소에 별로 관심이 없었던 하드웨어, 회로, 임베디드 등에 대해 좀더 관심을 갖게 됐다

- 이 프로젝트를 계기로 새로운 사이드 프로젝트에 대한 아이디어가 생겼다 (추후 포스팅 예정)

 

 

무엇보다도 다른 개발자들이 pull request를 통해 내가 미처 생각하지 못했던 측면에서 적극적으로 참여해주는것이 좋은 자극이 됐다. 왜 다들 사이드 프로젝트를 많이 하라고 권하는지 알 것 같다!