반응형

리눅스(우분투, 라즈베리 파이)에서 특정 프로그램이 자동 실행 되도록 해 보자.

 

/etc/rc.local 파일에 실행하고 싶은 명령을 추가한다.

위 예제는 루트 디렉토리(/)의 파일 목록을 /home/sean/test.txt 파일로 출력한다.

'exit 0' 명령 위에 추가한다.

 

/lib/systemd/system/rc-local.service 파일을 열어준다.

 

아래 명령을 추가한다.

[Install]

WantedBy=multi-user.target

 

서비스를 활성화한다.

 

 

재부팅 해보면 rc.local 파일이 자동 실행되어 ~/test.txt 파일이 생성돼 있다.

 

반응형
Posted by J-sean
:
반응형

라즈베리 파이 피코는 컴퓨터에 연결 하고 전원을 공급한 상태에서 소스를 입력하고 실행(F5)해야 프로그램이 작동한다. 컴퓨터 연결 없이 자동으로 실행되도록 해 보자.

 

소스를 입력하고 파일명을 main.py로 Pico에 저장한다.

이제 컴퓨터 없이도 피코 LED가 깜빡인다. MicroPython은 전원 공급시 자동으로 파일 시스템에서 main.py를 찾아 실행한다. (Headless Operation)

 

반응형
Posted by J-sean
:
반응형

 

 

Raspberry Pi Pico를 사용해 보자.

 

Pico를 컴퓨터에 연결하면 기타 장치 - RP2 Boot로 인식된다.

 

파일 익스플로러에서도 확인 할 수 있다. (RPI-RP2)

만약 파일 익스플로러에 Pico가 표시되지 않는다면 BOOTSEL 버튼을 누른 상태에서 컴퓨터에 연결한다.

 

MicroPython을 설치하기 위해 아래 링크에 접속해 MicroPython UF2 파일을 다운로드한다.

Raspberry Pi Documentation

 

MicroPython is a full implementation of the Python 3 programming language that runs directly on embedded hardware like Raspberry Pi Pico. You get an interactive prompt (the REPL) to execute commands immediately via USB Serial, and a built-in filesystem. The Pico port of MicroPython includes modules for accessing low-level chip-specific hardware.

 

 

다운로드한 UF2 파일을 Pico(RPI-RP2)에 복사해 넣는다.

 

한 쪽 구석에 디바이스 설정 중이라는 메세지가 나타난다.

 

설정이 끝나면 기타 장치였던 Pico는 USB 직렬 장치(COMX)로 표시된다.

 

Thonny를 다운로드하고 설치한다.

Thonny

 

 

Thonny를 실행한다.

 

Run - Select interpreter...를 클릭한다.

 

MicroPython (Raspberry Pi Pico)와 USB 직렬 장치(COMX)를 선택한다.

 

간단한 소스를 입력하고 Run 버튼(F5)을 클릭한다.

 

 

소스를 어디에 저장할지 물어 보면 Raspberry Pi Pico를 선택한다.

 

적당한 이름을 지정한다.

Run 버튼을 클릭했으므로 소스가 저장되고 나면 바로 실행된다.

Pico에 달려있는 LED(GP25)가 1초 간격으로 깜빡인다.

 

LED(GP25)

 

Pico를 다시 연결하면 아무것도 실행되지 않는다. File - Open...을 클릭한다.

 

 

Raspberry Pi Pico를 선택한다.

 

Pico에 저장되어 있는 소스를 선택하고 실행한다.

 

WAVESHARE의 Pico-like MCU, RP2040-Zero도 같은 방식으로 동작한다.

RP2040-Zero는 Raspberry Pi Pico와 Pinout이 다르고 단색 LED가 아닌 WS2812 RGB LED(GP16)가 사용되었다.

단색 LED가 아니기 때문에 간단한 Blink.py 예제는 동작하지 않는다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import time
from machine import Pin
import rp2
 
max_lum =100
r=0
g=0
b=0
 
@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
def ws2812():
    T1 = 2
    T2 = 5
    T3 = 3
    wrap_target()
    label("bitloop")
    out(x, 1)               .side(0)    [T3 - 1]
    jmp(not_x, "do_zero")   .side(1)    [T1 - 1]
    jmp("bitloop")          .side(1)    [T2 - 1]
    label("do_zero")
    nop()                   .side(0)    [T2 - 1]
    wrap()
 
 
# Create the StateMachine with the ws2812 program, outputting on Pin(4).
sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(16))
 
# Start the StateMachine, it will wait for data on its FIFO.
sm.active(1)
 
# Color change
while True:
    for i in range(0,max_lum):
        r=i
        b=max_lum-i
        rgb =(g<<24| (r<<16| (b<<8)
        sm.put(rgb)
        time.sleep_ms(10)
    time.sleep_ms(300)
    for i in range(0,max_lum):
        g=i
        r=max_lum-i
        rgb =(g<<24| (r<<16| (b<<8)
        sm.put(rgb)
        time.sleep_ms(10)
    time.sleep_ms(300)
    for i in range(0,max_lum):
        b=i
        g=max_lum-i
        rgb =(g<<24| (r<<16| (b<<8)
        sm.put(rgb)
        time.sleep_ms(10)
    time.sleep_ms(300)
 

 

조금 복잡한 WS2812 Test Code로 RGB값 변화를 확인할 수 있다.

 

반응형
Posted by J-sean
:
반응형

최신 버전의 OpenCV를 리눅스나 라즈베리 파이에 설치하기 위해서는 길고 지루한 과정을 거쳐야 한다. 꼭 최신 버전의 OpenCV가 필요한게 아니라면 간단하게 설치하고 사용해 보자.

 

libopencv-dev를 설치한다.

 

3.2.0 버전의 OpenCV가 설치 되었다.

 

텍스트 편집기에서 간단한 소스를 입력하고 저장한다.

 

컴파일 한다. pkg-config 명령어를 감싸고 있는 ` 기호는 Tab 키 위에 있는 backtick이다.

 

 

컴파일된 파일을 실행하면 라즈베리 파이에 연결된 카메라가 작동되고 sample.jpg가 생성된다.

 

sample.jpg

 

라즈베리 파이가 아닌 PC(우분투)에서 위 내용을 진행하면 opencv2/opencv.hpp가 없다는 에러가 발생하게 된다.

 

설치한 libopencv-dev의 버전이 다르기 때문인데 PC(우분투)에서는 라즈베리 파이보다 높은 버전의(4.2.0) opencv가 설치된다.

 

 

pkg-config --list-all 명령으로 확인된 opencv4 옵션을 사용해 컴파일 한다.

 

반응형
Posted by J-sean
:
반응형

레트로파이에 한글 폰트, 게임 마키, 이미지, 플레이 영상, 설명등을 넣어 보자.

 

2020/02/13 - [Raspberry Pi & Arduino] - Raspberry Pi Desktop(Debian), Ubuntu에서 RetroPie 설치하기

 

특별한 설정을 하지 않았다면 레트로파이(아케이드)에 게임 이름 정도만 표시된다. 등록된 게임을 잘 아는 사람은 문제 없겠지만 모르는 사람은 무슨 게임인지 알 수가 없다. 처음 하는 사람도 어떤 게임인지 알 수 있도록 이미지, 플레이 영상, 설명등을 넣어 보자.

 

Cabin-Bold.ttf 가 기본(영문) 폰트다. 한글이 표시 될 수 있도록 원하는 한글 폰트(KATURI.TTF)를 /etc/emulationstation/themes/carbon/art/ 에 복사한다. 

 

/etc/emulationstation/themes/carbon/ 에 있는 'carbon.xml', 'theme.xml' 파일에 설정된 폰트를 변경한다.

 

두 파일을 열고 'Cabin-Bold.ttf'가 나오는 부분을 모두 한글 폰트 이름(KATURI.TTF)으로 바꾼다. (원래 있던 'Cabin-Bold.ttf' 파일을 지우고 한글 폰트 이름을 'Cabin-Bold.ttf'로 바꾸면 두 파일의 내용을 바꾸지 않아도 된다)

 

 

RetroPie를 실행해 보면 바뀐 폰트가 적용되어 있다.

 

/opt/retropie/configs/all/emulationstation/gamelists/arcade/gamelist.xml 에 게임 이름, 이미지, 플레이 영상, 설명등을 등록 할 수 있다.

 

gamelist.xml
5.73MB

 

아래와 같은 형식으로 작성 한다.

 

<?xml version="1.0"?>

<gameList>

<game>

<path>게임 파일 경로</path>

<name>게임 이름</name>

<image>게임 이미지 파일 경로</image>

<video>게임 플레이 영상 파일 경로</video>

<marquee>게임 마키 파일 경로</marquee>

<developer>게임 제작사</developer>

<publisher>게임 판매사</publisher>

<genre>게임 장르</genre>

<players>게임 플레이어 수</players>

<releasedate>게임 발매일</releasedate>

<desc>게임 설명</desc>

</game>

<game>

...

</game>

...

</gameList>

 

'gamelist.xml'에 등록한 파일 경로 및 이름대로 marquee, snap, video 디렉토리를 /home/pi/RetroPie/roms/arcade/ 에 생성하고 각 디렉토리에 맞는 파일을 복사한다.

 

 

마키(marquee)

 

이미지(image)/스냅(snap)

 

영상(video)

 

 

예를 들어 marquee 디렉토리의 내용은 위와 같다.

 

RetroPie를 실행해 보자. ARCADE - 메탈 슬러그의 마키, 플레이 영상, 게임 설명등이 디스플레이 된다.

 

스트리트 파이터 2의 내용도 잘 디스플레이 된다.

 

반응형
Posted by J-sean
:
반응형

라즈베리 파이 카메라를 이용해 실시간 영상 스트리밍을 해 보자.


실시간 영상 스트리밍은 기본 설치되어 있는 cvlc(command-line vlc)를 이용한다. 만약 vlc가 설치되어 있지 않다면 설치하고 위 명령어를 입력한다.


위와 같이 대기 상태가 된다. (명령어 끝에 &를 붙여주면 백그라운드로 실행 할 수 있다)


다른 컴퓨터(우분투)에서 VLC를 실행한다. Media - Open Network Stream... 을 선택하고 '라즈베리파이 IP 주소:9000/'을 입력하면 스트리밍된 영상이 플레이 된다.


윈도우에서도 VLC를 설치하면 영상을 플레이 할 수 있다.


■ raspivid 옵션

  • -t, --timeout: Time (in ms) to capture for. If not specified, set to 5s. Zero to disable

  • -d, --demo: Run a demo mode (cycle through range of camera options, no capture)

  • -fps, --framerate: Specify the frames per second to record

  • -k, --keypress: Cycle between capture and pause on ENTER

  • -w, --width: Set image width <size>

  • -h, --height: Set image height <size>

  • -o, --output: Output filename <filename> (to write to stdout, use '-o -'). If not specified, no file is saved

  • -v, --verbose: Output verbose information during run

  • -cs, --camselect: Select camera <number>. Default 0

  • -p, --preview: Preview window settings <'x,y,w,h'>

  • -f, --fullscreen: Fullscreen preview mode

  • -op, --opacity: Preview window opacity (0-255)

  • -n, --nopreview: Do not display a preview window

  • -dn, --dispnum: Display on which to display the preview window (dispmanx/tvservice numbering)

  • -sh, --sharpness: Set image sharpness (-100 to 100)

  • -co, --contrast: Set image contrast (-100 to 100)

  • -br, --brightness: Set image brightness (0 to 100)

  • -sa, --saturation: Set image saturation (-100 to 100)

  • -ISO, --ISO: Set capture ISO

  • -rot, --rotation: Set image rotation (0, 90, 180, or 270)

  • -hf, --hflip: Set horizontal flip

  • -vf, --vflip: Set vertical flip

  • -roi, --roi: Set region of interest (x,y,w,d as normalised coordinates [0.0-1.0])

  • -a, --annotate: Enable/Set annotate flags or text

  • -ae, --annotateex: Set extra annotation parameters (text size, text colour(hex YUV), bg colour(hex YUV), justify, x, y)


반응형
Posted by J-sean
:
반응형

라즈베리 파이 카메라를 사용해 보자.


중국에서 구매한 라즈베리 파이용 카메라가 1주일만에 배송 되었다. 라즈베리 파이에서 판매하는 정품 카메라가 아닌 5MP 저가 호환 카메라이다. 약 3만원에 판매되는 8MP 정품 카메라보다 성능은 떨어지지만 가격이 1/10이다.


뒷면


HDMI Port와 Audio Jack 사이에 CSI Camera Port가 있다.


보호 테이프를 제거하고 latch를 들어 올린 다음 케이블을 삽입하고 고정한다.



라즈베리 파이를 부팅하고 Raspberry Pi Configuration에서 Camera - Enable을 선택한다. 재부팅 한다.


파이썬 Picamera 모듈을 사용해 보자. (Picamera 모듈은 기본 설치되어 있다)


파이썬 코드를 실행하면 라즈베리 파이에 연결한 카메라 LED에 불이 들어오고 preview 화면이 30초동안 표시된다.


반응형
Posted by J-sean
:
반응형

분당의 많은 아파트가 90년대 초에 지어졌다. 이제 그 아파트들은 내부 자재/기기가 노후되어 제기능을 못 하는 경우가 많은데, 덕분에 한 아파트 내에서도 두어달에 한 집씩은 내부 인테리어를 진행 한다는 안내문이 붙고 며칠 후 큰 소음을 내며 공사가 진행되곤 한다.


물론 우리집도 예외는 아니다. 벽지는 변색되어 몇 년 전에 전체 도배를 새로 했으며 화장실에서 물을 쓰면 어디선가 삐~ 하는 소리가 들려오곤 한다. 겨울철 내 방의 보일러는 무조건 24시간 가동되는 등 크고 작은 문제점들이 많이 발생하고 있다. 한 집에서 오랫동안 살아 오며 하나 둘 발생하는 고장이라 그런 걸까? 그런 현상들이 너무나도 자연스럽게 생활의 일부가 되어 버리고 문제라 생각치 못하게 되는 문제가 문제이다(?)


어쨌든 어릴적 처음 이 아파트로 이사 왔을 때 참 신기했던 장치가 하나 있다. 문 밖에서 서 있는 사람을 화면으로 볼 수 도 있고 아파트 경비실로 전화도 걸 수 있으며 화재, 가스등의 경보도 해 주던, 흔히 인터폰이라고 불리는 인터컴(도어폰)이 신기했을 뿐 아니라 새 집에 이사온 느낌을 한층 배가시켜 주었었다. 벨을 누른 사람도 없는데 괜히 화면을 켜서 작은 모니터를 통해 문 밖 세상을 바라보게 만들기도 했으니 말이다.


꺼져있는 거실의 인터컴. 이젠 얘도 나이가 많다.


그런 인터컴이 이젠 더 이상 작동 하지 않는다. 언제부터 전원이 꺼져 있었는지는 기억도 나지 않고, 몇 달 전 오븐에 피자를 굽다 작은 불을 냈을땐 화려한 조명 마냥 검은 연기가 온 집안을 따뜻하게 감쌌지만 어떤 장치에서도 경보를 해 주지 않는걸 확인 하며 이 집에서 믿을 건 우리 가족 밖에 없다는 걸 다시 한 번 확인 했다.


그러다 더 이상 쓰지도 않고 새로 바꾸고 싶지도 않은 인터컴이 지저분해 보였다. 그냥 깔끔하게 떼버리려 했으나 드러나게 될 인터컴의 뒷 공간때문에 잠시 망설이다 뭔가 비슷하게 꾸며야겠다는 생각이 들었다.


우선 다이소로 달려 갔다.


다이소에서 3,000원 주고 구입해 온 코르크 보드.


10.1인치 LCD 디스플레이를 대본다.


양 옆에 작은 스피커를 달면 귀여울거 같다. 사진에 보이는건 스피커 커버.



이게 스피커(뒷 부분). (3W X 2EA)


대충 잘라 내야 할 부분을 따라 그렸다.


자르고 보니 안쪽은 싸구려 스티로폼이다. 부서진 스티로폼 조각이 막 날린다. 난 분명히 코르크 보드를 샀는데...


모니터와 스피커 커버를 대본다. 모니터는 보드 뒤에 대려고 했는데 아무래도 앞으로 보내야 할 거 같다.



전체적으로 모양이 나쁘지 않다.


글루건으로 고정 한다.


고정 했다.


모니터 AD 보드(Analog to Digital Board)와 (리모콘)컨트롤 보드도 붙여 준다. 오른쪽 케이블이 전원 케이블이다.



글루건이 이것 저것 잘 붙여 준다.


모니터가 잘 나오는지 확인 한다.


설치에 문제가 없는지 확인하기 위해 인터컴을 제거한 벽에 대본다.

문제 없을리가 없다. 스피커 때문에 벽에 안들어 간다. 먼저 확인 했어야 했는데... 그래... 한 번에 될리가 없지...


모니터 아래로 위치를 바꾼다. 스피커를 뗀 자리에 큰 구멍이 두 개 남았다. 후......



전원 공급을 위해 AC to DC 컨버터를 두 개 준비 한다. (220ACV → 5DCV 2A)

한 개는 라즈베리 파이용, 다른 한 개는 모니터와 앰프용이다.

라즈베리 파이는 전원 버튼이 없기 때문에 종료 후 전원 차단을 위한 스위치와 모니터 전원 공급용 터미널도 준비 했다. (모니터 구매 시 받은 터미널은 USB 타입이다)


케이블을 연결하고 글루건으로 고정 한다.


앞면을 보니 그럴 듯 하다. 옆에 튀어 나온건 모니터 (리모콘)컨트롤 보드


라즈베리 파이에 사용할 운영체제를 준비 한다. 집 안의 다른 컴퓨터와 연결 될 수 있도록 네트워크, Samba, VNC등도 세팅 한다.


2020/01/16 - [Raspberry Pi & Arduino] - Raspberry Pi Raspbian 설치 후 업데이트, 한글, 고정 IP, VNC, Samba 설정



지저분한 케이블을 정리 하자.


사용하지 않는 신호 케이블은 모두 정리하고 전원 공급용 220ACV 케이블만 따로 빼서 AC to DC Converter에 연결 한다.


라즈베리 파이를 연결 하고 벽에 붙여 전원을 넣었다. 폭발 하지 않았다. 다행이다.

이것 저것 실행해 본다.


무선 인터넷으로 연결 되어 유튜브도 잘 나온다.



모니터 양 옆의 포스트잇은 신경 쓰지 말자. 무언가를 가리기 위한 것은 아니다.


손님이 놀러 오면 사진을 띄우고 음악을 틀어 준다. (feat. 조카들)


키보드와 마우스를 연결 할 수 도 있지만 거실 벽에 설치 되어 있는 라즈베리 파이에 사용하기는 불편하므로 안쓰는 스마트폰을 무선으로 연결해 컨트롤 한다.


반응형
Posted by J-sean
: