라즈베리

1-236 Ubuntu Mate 라즈베리파이+3 gpiozero 라이브러리로 LED ON/OFF

coding art 2019. 9. 9. 23:40
728x90



지난해 겨울 텐서플로우 OpenCV 출간 이후 7개월 만에 2권에 해당하는 “Scikit PyTorch 머신러닝을 출간하게 되었다. 각권이 450 페이지이므로 합 900 페이지에 달하는 내용이라 무슨 머신러닝을 공부하는데 분량이 왜 이렇게 많은가? 하고 의문을 가질 수도 있겠으나 그 내용이 튜토리얼성에 가까워 사실 그렇게 큰 부담은 없는 책이다. 물론 책 내부에 파이선 코드를 끼워 넣는 먹통 짓은 지금 세상에서는 할 필요가 없을 것이다. 해당 책의 머리말에 써둔 하이퍼링크 목차를 다운받으면 블로그를 직접 열어 볼 수 있으며 거기서 예제 코드를 다운 받을 수 있다.


 

1권에 해당하는 텐서플로우 OpenCV 머신러닝에서는 20179월경부터 201812월 사이에 머신러닝을 이해하고자 하는 필자의 열공(?) 내용을 담아 보았다면 2권에서는 1권에서 제기되었던 여러 내용들에 대해서 해답을 찾아가는 내용들을 꽤 많이 포함하였다. 2권이라고 해서 내용적으로 완전히 정리된 것은 아니기 때문에 다시 3권의 출발점이 될 수도 있을 것이다.

 

다소 아쉬운 점은 흥미 위주로 시작했던 1, 2권의 Softmax 관련 내용을 완전히 정리하지는 못했는데 이 그 이유는 R&D 영역으로 넘어갔기 때문이다. 2020년에는그 내용까지도 포함하여 출간할 계획이다.

 

본 서의 출간 목적은 작가들과 출판사가 염원하는 베스트셀러 화가 목표가 아니다. 사회적으로 인공지능(머신러닝)에 대한 이해 필요성이 점증하는 시기이며, 인공지능 분야의 발전 속도가 상당히 빠르기 때문에 그에 맞춰서 비전공자라 할지라도 머신러닝에 입문해 볼 수 있도록 경험과 생각을 공유해 보고자 하는 것이다.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

원래의 라즈비안 시스템

OS Jessie, Stretch, Buster 에서 Wubuntu 로 바뀌어 버린 상태에서 GPIO 방식에 의해 단 하나의 LEDON OFF 시키는 것조차 만만치 않은 작업이다. 컴퓨터 실력에 관계없이 그냥 실패해 버릴 수도 있는데 남의 얘기가 아니라 바로 필자의 사례이다.

 

지금 현재 인공지능(머신러닝) RC카를 제작하기 위한 NVIDIA Jetson Nano 보드가 곧 도착하기 이전에 미리 Wubuntu 사용 경험을 쌓기 위한 차원에서 여분으로 가지고 있는 Pi3+ Wubuntu를 설치하고 GPIO 라이브러리를 사용하여 17번 핀에서 1초 간격으로 LED 회로를 ON OFF 시킬 수 있도록 T-bar를 사용하여 점퍼선 배선을 준비하였다.



GPIO 배선을 작동시키기 위한 파이선 코드는 라즈베리파이에서와 거의 동일하지만 사용하는 라이브러리 모듈이 다를 수밖에 없다. 라즈베리파이의 라즈비안 OS 에서는 주로 Rpi.GPIO 가 사용되지만 Wubuntu 에서는 gpio zero 가 사용된다.




Wubuntu 파이선 코드에 의해 LEDON OFF 하기 위해서는 위에서와 같이 첫 번째 와 두번째 command line만을 실행하면 다 될 줄 알았다. 이때에 셸(Shell)에 뜬 아래의 경고 메시지를 참조해 보자.



gpio zero 홈페이지에서도 언급되지 않고 있는 ‘colorzero’ 라는 라이브러리 모듈의 부재를 지적하고 있다. 처음 경험하는 이름의 라이브러리 모듈 부재 에러인데 이 부분에서 해결 방법이 없었다. 만약 당신이 코딩이 좋아서 하는 사용자라면 이 지점에서 약간의 기지를 발휘할 필요가 있다. 위 그림에서 3번째 command line 입력이 바로 그것이다. 이 명령 한 줄을 추가하여 해결이 되었다.

 

LED1초에 한 번씩 ON OFF 시키기 위한 파이선 코드는 다음과 같다.

 

from gpiozero import LED

from time import sleep

 

led = LED(16)

 

while True:

led.on()

sleep(1)

led.off()

sleep()