며칠 전에 라즈베리파이 패밀리에 피코(pico)라는 마이크로컨트롤러가 출시되었다.

프로세서가 듀얼코어에다가 133MHz 의 클럭속도를 가진다. C/C++ 뿐만 아니라 마이크로파이썬으로도 코딩이 가능하고 놀라운 점은 가격이 단 4$ 라는 것이다.


이제 제어프로그램을 파이썬으로 작성하기 위해서 메인PC와 마이크로콘트롤러를 어떻게든 연결해서 하드웨어를 구성할 필요가 없어졌다. 왜냐면 ESP32, 마이크로비트, stm32기반의 보드들, 혹은 RPi피코 보드를 이용하여 파이썬으로 제어프로그램을 구동시키는 데 별 무리가 없기 때문이다. (단, 아직은 ESP32 기반의 보드들의 성능이 가장 나아 보인다.)


Posted by 살레시오
,

  라즈비언에서 간단하게 텍스트 파일을 편집할 수 있는 nano는 가볍고 터미널에서 사용하기 편해서 자주 사용되는데 단축키가 윈도 표준과는 달라서 처음 익히는데 불편하다. (vim 보다는 훨씬 쉽긴 하지만)


  그래서 단축키를 다시 정의하는 설정파일(,nanorc)을 만들어서 github에 올려놓았다. 다음과 같은 명령을 터미널에서 실행하여 간단하게 설치할 수 있다.


curl https://raw.githubusercontent.com/salesiopark/nanorc/master/install.sh | sh


이 명령을 실행하면 ~ 디렉토리에 .nanorc 파일이 생성되고 터미널을 다시 실행시킨 후 nano를 실행하면 바뀐 설정이 적용된다. 설정은 다음과 같다.



ctrl+A : 블럭 선택 시작

ctrl+C :블럭 복사

ctrl+V: 붙이기

ctrl+X: 잘라내기


ctrl+Z : undo

ctrl+Y : redo


ctrl + S: 저장

ctrl+O : 파일 열기

ctrl+Q : 종료


블럭은 윈도 표준은 shift + 커서키이지만 nano 설정의 한계로 인해서 그것은 불가능하다. 그래서 ctrl+6 이 블럭 선택의 시작키인데 한 손으로 잡기가 힘들어서 ctrl+a 로도 되게끔 설정해 놓았다.


  이것으로 조금이라도 윈도 표준키를 사용하여 편집을 좀 더 수월하게 진행할 수 있다.

Posted by 살레시오
,

여기에서는 LED를 켜고 끄는 실험을 해 보도록 한다. LED는 파이썬 코드가 GPIO를 동작시키는 것을 시각적으로 확인할 수 있는 가장 간단한 도구이다. 다음 그림과 같이 LED를 저항과 직결한 뒤 12번 핀에 연결한다. 저항은 200Ω (혹은 그 이상) 이고 이것은 LED에 과전류가 흐르는 것을 막아주는 역할을 한다. LED는 극성이 있는 소자이다. 다리가 긴 쪽이 anode(+극), 짧은 쪽이 cathod(-극)이므로 연결할 때 방향을 주의해야 한다. 잘못 연결하면 LED가 켜지지 않는다. 짧은 다리는 저항과 직결하여 6번 핀(GND)에 연결하고 긴 쪽은 12번 핀과 연결하면 된다.


그림 9.2.1 LED 결선도 (긴 다리를 12번 핀에 연결)


 GPIO핀으로 LED를 제어하기 위해서 이 핀을 먼저 GPIO.setup()를 이용하여 출력으로 설정해야 한다. 그 이후에 GPIO.output()함수로 GPIO.HIGH 신호를 내보내면 LED가 켜지고 GPIO.LOW 신호를 내보내면 LED가 꺼진다.


blink.py

import RPi.GPIO as GPIO
import time

led = 12
GPIO.setmode(GPIO.BOARD)
GPIO.setup(led, GPIO.OUT)

for k in range(10):
   GPIO.output(led, GPIO.HIGH)
   time.sleep(0.5)
   GPIO.output(led, GPIO.LOW)
   time.sleep(0.5)

GPIO.cleanup()


이 프로그램은 LED를 10번 점멸시키고 난 뒤 종료된다. 이것을 실행하려면 다음과 같이 하면 된다.


sudo python3 blink.py


전에 언급한 바와 같이 반드시 앞에 sudo 명령을 붙여야 한다는 것이 유의하자.


 한 가지 언급할 것은 저항 값을 선택하는 방법이다. 데이터 쉬트에 의하면 LED에는 10mA 정도 흐르도록 하면 되고 이때 LED의 전압 강하가 1.7V 정도이다. 따라서 오옴의 법칙에 의해서 R = (3.3-1.7)/0.01 = 160Ω  을 얻을 수 있다. 이 결과로부터 160Ω 이상의 저항을 선택하되 너무 저항 값이 크면 불빛을 눈으로 확인하기 어려우므로 160~500Ω 범위의 저항을 선택하면 된다.

원문링크

Posted by 살레시오
,

 GPIO를 제어하기 위한 방법은 여러가지가 있지만 여기에서는 파이썬으로 하는 방법에 대해서 소개하고자 한다. GPIO를 제어하기 위한 파이썬 패키지 중에서 RPi.GPIO 모듈과 WiringPi 라는 모듈이 가장 많이 쓰인다. 특히 RPi.GPIO는 라즈비언에 기본으로 설치되어 있으므로 별도로 설치하는 과정이 필요치 않다. 여기에서는 이것을 이용하기로 한다.


 RPi.GPIO 모듈을 사용하기 위해서는 먼저 다음과 같이 import 명령으로 불러와야 한다.


import RPi.GPIO as GPIO


그 이후에 다음과 같은 메서드들을 사용할 수 있다.


표 9.2.1 RPi.GPIO 모듈의 기본적인 메서드들

메서드 명

기능

GPIO.setmode(GPIO.BOARD)

GPIO.setmode(GPIO.BCM)

핀 번호를 라즈베리파이 보드(BOARD) 번호로 참조

BCM(Broadcom chip-specific pin numbers)모드

GPIO.setup(pin, GPIO.IN)

GPIO.setup(pin, GPIO.OUT)

핀을 입력으로 설정

핀을 출력으로 설정

GPIO.output(pin, GPIO.HIGH)

GPIO.output(pin, GPIO.LOW)

디지털 출력을 HIGH로 설정

디지털 출력을 LOW로 설정

GPIO.input(pin)

디지털 값을 읽음.

GPIO.cleanup()

GPIO 모듈의 점유 리소스를 해제

GPIO.VERSION

RPi.GPIO 모듈의 버전값을 갖는 변수


 GPIO.setmode()함수는 핀 번호를 지정할 때 어떤 참조 방식을 사용하는지를 설정하는 함수로서 다른 메서드를 사용하기 전에 반드시 사전에 호출해야 하는 함수이다. 인자로는 기정의된 상수를 받는데 GPIO.BOARD 는 핀 번호로 라즈베리파이 보드 상의 번호(1~40)를 이용하겠다고 설정하는 것이다. GPIO.BCM은 브로드컴칩의 번호를 참조하겠다는 것으로서 그림 9.1의 GPIOXX 에서 XX에 해당하는 번호를 사용하겠다는 것이다. 예를 들어 GPIO.BOARD 모드에서 12번 핀은 GPIO.BCM 모드에서 18번 핀과 동일하다. 다른 메서드들을 사용하기 앞서서 반드시 GPIO.mode()함수를 호출하여 핀 번호 참조 모드를 지정해 주어야 하며 이 모드의 설정없이 다른 메서드들을 호출하려고 하면 예외가 발생한다.


   GPIO.setup() 함수는 아두이노의 pinMode()함수와 유사한 기능을 수행한다. GPIO.input()이나 GPIO.output()함수를 호출하기 전에 사용하고자 하는 핀이 입력인지 출력인지를 먼저 설정해 주어야 한다. 만약 GPIO.setup() 함수 호출시 풀업(pull-up)이나 풀다운(pull-down) 저항을 연결하려면 다음과 같이 pull_up_down 키워드 파라메터를 GPIO.setup()함수에 넘겨야 한다.


GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP )

GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_DOWN )


pull_up_down 파라메터를 주지 않으면 아무런 저항도 연결되지 않는다.


 GPIO 모듈의 사용이 모두 끝나면 GPIO.cleanup()함수를 호출하는 것이 좋다. 이 함수를 호출하면 사용 중인 핀을 포함해서 모든 리소스가 시스템에 반환된다.


 한 가지 주의할 점은 RPi.GPIO는 하드웨어에 접근하여 작업을 수행하기 때문에 root권한이 필요하다. 따라서 파이썬쉘을 실행할 때 반드시 sudo 명령을 사용해야 GPIO 메서드들을 정상적으로 사용할 수 있다.


sudo python3

sudo ipython3


또한 RPi.GPIO 패키지를 사용하는 스크립트파일(,py 파일)을 실행하는 경우에도 마찬가지로 sudo 명령을 사용해야 정상적으로 실행이 된다. 예를 들어 blink.py 파일에서 RPi.GPIO 패키지를 사용한다면


sudo python3 blink.py


와 같이 sudo 명령을 반드시 앞에 붙여야 한다.

원문링크

Posted by 살레시오
,

 라즈베리파이 2에는 40개의 헤더 핀(header pin)이 있는데 이것을 외부의 장치들을 연결하여  제어할 수 있다. 다음 그림에 그 구조를 도시하였다.



BCM

핀 번호

BOARD

BCM



3.3V

1

2

5V


SDA1

GPIO2

3

4

5V


SCL1

GPIO3

5

6

GND



GPIO4

7

8

GPIO14

TxD


GND

9

10

GPIO15

RxD


GPIO17

11

12

GPIO18



GPIO27

13

14

GND



GPIO22

15

16

GPIO23



3.3V

17

18

GPIO24


MOSI

GPIO10

19

20

GND


MISO

GPIO9

21

22

GPIO25


SCLK

GPIO11

23

24

GPIO8

CE0


GND

25

26

GPIO7

CE1

SDA0

GPIO0

27

28

GPIO1

SCL0


GPIO5

29

30

GND



GPIO6

31

32

GPIO12



GPIO13

33

34

GND



GPIO19

35

36

GPIO16



GPIO26

37

38

GPIO20



GND

39

40

GPIO21



그림 9.1.1 라즈베리파이 B+, A+, 2B의 GPIO 헤더핀들


라즈베리파이 초기 모델에는 26핀만 있었다. 라즈베리파이 B+ 을 포함한 이후의 모델은 (A+, 2 model B, zero) 이것이 확장되어 40핀 GPIO핀을 갖는데 26번 핀까지는 동일한 배치이고 27번부터 40번까지가 더 추가되었다.


  그림 9.1을 보면 40개 중 대부분이 GPIO라고 이름이 붙어 있는데 이는 디지털 신호(digital signal)를 입출력 할 수 있는 포트핀 (port pin)으로 사용할 수 있다는 의미이다. 디지털 신호란 두 가지 상태만을 갖는 신호를 의미하며 하나의 비트로 표시되며 0 혹은 1 값만을 가질 수 있다. 물리적으로는 전압으로 구별되며 라즈베리파이에서  0은 0V(GND), 1은 3.3V 전압을 의미한다. (라즈베리파이의 내부 로직은 3.3V로 동작한다. 반면 아두이노는 보통 5V로 동작하는데 따라서 이 둘을 직접 연결할 경우 라즈베리파이가 손상될 가능성이 있다.) 포트핀은 츨력 혹은 입력 기능을 수행할 수 있는데 출력으로 사용되면 0V 혹은 3.3V 전압값을 갖도록 할 수 있으며 입력으로 사용된다면 포트핀의 전압이 0V인지 3.3V인지를 감지할 수 있다. 이 기능을 이용하면 예를 들어 LED를 점멸한거나 혹은 연결된 버튼의 눌렸는지 여부를 알아낼 수 있다.


 이외에도 5V/3.3V/0V(GND)는 외부에 전원을 공급할 때 사용되는 전원핀이고,  시리얼 통신/SPI 통신/I2C통신을 할 수 있으며 PWM 기능을 갖는 핀도 있다. 하지만 아날로그 입력을 받을 수 있는 핀은 없으며 이를 위해서는 별도의 외부 장치를 이용해야 한다.


 라즈베리파이에는 헤더핀만 나와있어서 빵판을 이용하여 실험하고자 할 때는 조금 불편하다. 이를 개선하기 위해서 다양한 연결 부품이 시중에 시판되고 있다.


그림 9.1.2 GPIO 핀을 빵판에 편리하게 연결해주는 제품의 예


이러한 확장 보드를 이용하면 앞으로의 실험을 좀 더 편하게 실행할 수 있다.

원문링크

Posted by 살레시오
,

1.3 Raspian(Debian)에서 ipython 설치 방법  c{ipy04}

라즈비안(rasbian)에서는 python3는 기본으로 설치되어 있다. 여기에 ipython3을 설치하는 방법은 매우 간단하다.


~$ sudo apt-get install ipython3

설치가 끝난 다음에 다음과 같이 실행할 수 있다.


~$ ipython3

이렇게 명령을 내리면 ipython쉘이 실행된다.


Posted by 살레시오
,

라즈베리파이1에서는 netbeans 를 설치할 수는 있지만 사용이 불가할 정도록 느렸다. 라즈베리파이2에서는 어떤지 궁금해서 설치를 진행해보았다. 설치 방법은 정말 간단한데 오라클 홈페이지에서 리눅스용으로 다운로드를 받는다.


[그림 1] 홈페이지에서 리눅스용으로 선택한 후 JAVA SE 버전을 다운받는다.


그러면 사용자의 Download 디렉토리에 netbeans-8.0.2-javase-linux.sh 라는 파일이 다운로드되는데 명령창에서 다음과 같이 한다. (이 파일을 다 타이핑할 필요 없이 ne 까지만 치고 tab키를 누르면 자동완성된다.)


$sudo sh netbeans-8.0.2-javase-linux.sh


그러면 설치 대화창이 화면에 나타나고 그대로 진행하면 된다.


 설치가 끝났다면 사용자 디렉토리에 netbeans-8.0.2 디렉토리가 생성되고 그 안에 실행파일이 있다. <userHome>/netbeans-8.0.2/bin/netbeans 파일을 실행하면 IDE가 실행된다.


 잠깐 사용해 본 느낌은 의외로 잘 동작한다는 것이다. JDK8과 JVM도 무난하게 깔리고 잘 동작한다. 윈도에서 개발하던 도구 그대로 라즈베리파이(2)의 데비안 OS에서 사용할 수 있다는 것이 무척 신기하다.



Posted by 살레시오
,

 라즈베리파이2에서 무선랜을 설정하는 방법을 알아보자. 라즈비안에 무선랜을 반자동으로 설정해주는 Wifi_Config 가 없어서 쉘명령어로 설정을 해야하는데 비교적 간단히 할 수 있다.


 무선랜 동글을 꼽고 먼저 다음과 같은 명령어로 이것이 인식이 되는지 확인한다.


$sudo iwlist wlan0 scan


그러면 랜카드가 인식한 와이파이 리스트가 나오는데 검색된 무선 공유기의 ESSID 를 확인한다. 그리고 다음과 같은 화일을 nano 에디터로 연다.


$sudo nano /etc/network/interfaces


이 파일에 다음과 같이 내용을 추가한다.



여기서 wpa-ssid 옆에 문자열로 방금 전 검색한 ESSID를 입력하고 wap-psk 옵션에는 비밀번호를 입력한다.


이 파일을 저장하고 나오면 자동으로 설정이 적용되는데 만약 인터넷에 여전히 연결이 안 된다면 다음과 같이 무선랜을 껐다가 켠다.


$sudo ifdown wlan0

$sudo ifup wlan0


그러면 새로운 설정이 적용되어 무선 인터넷에 연결이 된다.



Posted by 살레시오
,

 라스베리파이(이하 RPi)의 GPIO 핀들은 파이썬으로 제어할 수 있다는 점에서 무척 매력적이지만 GPIO 자체의 기능이 아두이노에 비해서도 빈약하다. 포트핀으로 흘릴 수 있는 전류가 수mA 정도로 제한되어 있으며 특히 PWM핀은 하나이고 아날로그 핀(ADC)은 없어서 아쉽다.

 

 그래서 아두이노의 기능을 얹은 RPi 인터페이스 보드들이 이러한 단점을 상쇄해 줄 수 있으리라 기대가 되어서 구글링 해보니 다음과 같이 몇 가지가 눈에 띄어서 정리해 보았다.

arduberry

 RPi 위에 장착하여 RPi에서 아두이노 IDE를 이용하여 프로그래밍 가능하다. getting start 를 대충 읽어보았는데 이것은 PC대신 RPi 로 프로그래밍한다는 개념인 것 같다. 필요한 프로그램을 설치하면 아두이노 IDE 의 다운로더 메뉴에 'Arduino GPIO' 메뉴가 생기고 이것을 선택하여 RPi에서 직접 코딩을 하고 컴파일과 다운로딩을 할 수 있다.



단순히 PC대신 RPi를 사용할 수 있도록 설계되었기 때문에 PC가 없는 환경이라면 초저가 아두이노 프로그래머를 RPi로 꾸밀 수 있겠으나,  PC를 이미 가진 사용자들에게 어떤 장점을 가지는 지는 의문이다.

 

2. alamode

 RPi 위에 장착가능한 아두이노 호환보드이며 아듀베리와 유사하게 시리얼포트가 연결되어서 RPi가 호스트가 되어 alamode 를 프로그래밍 할 수 있다.

그 뿐만 아니라 alamode 가 RPi를 이더넷쉴드로 사용할 수 있는 등 양방향 통신을 한다고 한다.

3. RPino GOGO

  아듀베리와 비숫한 개념의 국산 아두이노 보드이다. 특이한 점은 전용 스케치로더를 이용하면 독립적인 아두이노보드로 사용할 수 있다는 점이다. RPi 연결모드와 독립 사용 모드를 설정할 수 있다. RPi와 I2C 통신을 하기 위한 전압 레벨 변환기도 내장하고 있다. 개인적으로 구입해서 구동해 보았는데 잘 동작한다.

하지만 아듀베리와 마찬가지로 단순히 PC대신 RPi를 사용할 수 있도록 설계되었기 때문에 PC가 없는 환경이라면 초저가 아두이노 프로그래머를 RPi로 꾸밀 수 있겠으나,  PC를 이미 가진 사용자들에게 어떤 장점을 가지는 지는 의문이다.

 위의 세 가지 제품들은 라즈베리파이가 단순히 컴파일/다운로드를 수행하는 PC대신으로 사용하는 방식인데 사실 보통의 아두이노보드를 라즈베리파이와 USB로 연결해서 프로그램할 수 있으므로 확장보드로서의 의미가 크지 않다는게 필자의 생각이다. 단지 usb케이블을 이용하지 않고 깔끔하게 결합된다는 점과, alamode 의 경우 라즈베리파이를 이더넷쉴드 대용으로 사용할 수 있다는 점은 장점이라 할 수 있다.

4. piFace

 아두이노 호환은 아니지만 RPi GPIO핀에 장착하여 여러가지 IO실험을 할 수 있는 확장보드로 해외에서는 교육용으로 많이 사용되는 것 같다. 영국 맨체스터대에서 교육용으로 개발하였으며 파이썬 모듈을 제공하며 스크래치 언어와의 통합기능을 제공한다. 스크래치 언어를 지원한다는 것은 저학년 아이들의 교육에 무척 유용할 것이라는 예상을 할 수 있다.

piFace (왼쪽) 와 아두이노에 장착한 모습(오른쪽)


 입출력에 RPi의 GPIO 핀을 직접 사용하지 않고 MCP23S17 칩을 사용하며 I2C로 이를 제어하므로 대전류 구동이 가능하며 arduberry, alamode, RPino 와 다르게 독립적으로 구동되지 않고 반드시 RPi쪽에서 제어 프로그램을 구동하여야 한다.

 

5. pcDuino / 갈릴레오 보드 / udoo neo 보드

 이것들은 종류가 다른 보드이지만 리눅스 머신과 아두이노를 아예 하나의 보드 위에 섞어놓은 것이다. 아예 리눅스 보드 위에 아두이노 호환 핀들이 있는 것들이다. 따라서 아두이노가 지원하는 아날로그 핀이나 pwm 등을 바로 사용할 수 있다.

pcDuino3 nano : 아두이노 핀과 호환되기 때문에 아두이노 쉴드들을 바로 사용할 수 있다.

인텔 갈릴레오 gen 2 보드 : 피씨두이노와 마찬가지로 아두이노 쉴드를 바로 장착하여 사용할 수 있다.

 갈릴레오보드는 특이하게도 리눅스를 OS로 사용하지만 비디오 아웃풋 포트가 없으며, 호스트PC를 이용하여 아두이노IDE 와 동일한 인터페이스를 사용하여 프로그래밍할 수 있다는 것이 특징이다. 보드 자체는 아두이노에 비해서 훨씬 고성능이지만 포트핀들의 동작 속도는 아두이노보다 더 떨어지는 단점이 있다. ( 따라서 당연하게도 그렇다면 왜 궂이 이것을 사용해야 하는 지 의문이 드는 제품이다.)


 그리고 현재 (2015년 5월) udoo neo 라는 보드가 킥스타터에서 캠페인을 진행 중이다.



리눅스 보드인데 아두이노 호환 외부핀을 가지고 있으며 와이파이, 블루투스, 9축 가속센서를 내장하면서 $49불 정도의 가격에 판매될 거라고 한다.

6. 비글본블랙(beaglebone black)

  라즈베리파이를 사용하고 있는데 아두이노의 기능이 필요하다면 필자는 개인적으로 비글본블랙을 추천하고 싶다.

비글본 블랙 보드. 저 넘치도록많은 gpio 핀들에서 알 수 있듯이 왠만한 기능은 다 가지고 있다.

 최근에 출시된 dev C는 아예 데비안리눅스가 내장된 eMMC 플래시메모리(용량은 4G)에 올려져서 출시된다. 따라서 추가적인 외부메모리가 필요치 않다. 사진에서 보듯이 GPIO핀이 많을 뿐만 아니라 PWM과 ADC 핀도 넉넉하다. 라즈베리파이보다 약간 고성능인데다 개발에 편리한 기능(예를 들면 usb로 연결하면 바로 터미널 접속이 가능하다던지)들이 있다. 또한 파이썬으로 GPIO핀들을 제어할 수 있으므로 보다 복잡한 제어 알고리듬을 바로 적용해 볼 수 있다. 단 가격은 $55 정도로 라즈베리파이보다는 비싸고 USB포트도 하나 밖에 없는 것이 조금은 불편하다.




Posted by 살레시오
,

  라즈베리파이 컴퓨트 모델에 이어서 새로운 모델이 출시되었다. 이름은 model b+ 인데 기존 model b 의 단점과 제기되었던 불편한 요소들을 개선한 최종 진화판이라고 소개하고 있다.



하지만 아쉽게도 모델B와 동일한 프로세서를 사용하므로 사용자들이 가장 원했던 성능의 향상은 없지만 소소하게 개선된 점들을 짚어보면 다음과 같다.


  1. 전원부의 회로를 개선하여 불안정했던 전원을 보완하였다.
  2. 오디오 회로의 수정으로 잡음이 많았던 단점을 보완하였다.
  3. 아날로그 비디오와 오디오 단자를 하나로 통합하였다.
  4. USB포트를 두 개에서 네 개로 늘려서 키보드, 마우스, 와이피이동글을 꽂고도 하나가 남는다.
  5. 마이크로SD카드 채용하여 메모리카드의 고정성이 좀 더 향상되었다. 
  6. GPIO가 26핀에서 40핀으로 확장되었으나 추가된 핀들이 대부분 포트핀(디지털입출력핀)이다. 외부의 EEPROM을 자동 인식하기 위한 통신선 두 개가 추가되었고, PWM은 여전히 하나이며 ADC는 없다.
  7. 그외 마운트 홀의 위치를 좀 더 안정적으로 변경하였고 모서리를 둥글게 처리하였다.


그외 크기나 성능 사양은 model B와 동일하다. 프로세서와 동작클럭도 같고 램도 512MB 이다. 가격은 모델B와 같은 가격으로 책정되었다.


  참고로 (3)번 항에서 알 수 있듯이 새로운 A/V 단자가 있는데 이 단자에 스테레오 이어폰을 끼우면 그냥 오디오 단자로 사용할 수 있는데 아래 그림과 같은 케이블을 이용하면 영상신호와 음향신호를 모두 뽑아낼 수 있다고 한다. 이건 참 개인적으로 기발한 변경점이라고 생각된다.


[#00072]

Posted by 살레시오
,