HOBBY:RASPBERRYPI

구차니의 잡동사니 위키
이동: 둘러보기, 찾기

현재 보유중인 Raspberry pi 2를 기준으로 설명

목차

관련사이트

공식사이트

지원사이트

제조사

3rd party


라즈베리 파이 버전

  Model A  - 256MB, 1 USB,   no Ethernet, 26 PIN
  Model A+ -                              40 PIN (2014, 11)
  Model B  - 512MB, 2 USB, Fast Ethernet, 26 PIN
  Model B+ -        4 USB ,               40 PIN (2014, 7)
2 Model B  -   1GB, 4 USB, Fast Ethernet, 40 PIN (2015, 2)
3 Model B  -   1GB, 4 USB, Wifi/100M, BT, 40 PIN (2016, 2)

배포판 특징 및 계정

4GB 이상의 SD 메모리를 사용하는 것이 좋음

raspbian

  • pi / raspberry
  • raspi-config 를 사용하여 환경설정을 할 수 있음
  • rpi-update로 커널이나 커널모듈들을 업데이트 할 수 있음

ubuntu (snappy)

  • ubuntu / ubuntu
  • 타임서버 설정을 못하므로 수동으로 잡아주어야 함

openELEC

  • root / openelec
  • kodi(xbmc) 기반의 특화된 버전

OSMC

  • osmc / osmc
  • kodi 기반인데 무슨 차이인지 모르겠음

debian jessie

Hardware

Raspberry Pi B

  • Broadcom BCM2708 family BCM2835 - ARMv6 기반의 Single core ARM1176JZF-S
    • VFP 지원
    • 512MB PoP
  • SD (표준 사이즈)
  • 2 USB Ports
    • Fast Ethernet
  • Full size HDMI
  • 3.5 파이 3극 잭 - 스테레오 오디오
  • RCA - 콤포지트 비디오
  • GPIO 26pin

Raspberry Pi B+

  • USB 2port 에서 4port로 확장
  • GPIO 40pin

Raspberry Pi 2 Model B (2B)

  • Raspberry Pi B+와 CPU를 제외한 호환성
  • Raspberry Pi A/B와는 레이아웃이 다름
  • Broadcom BCM2709 family BCM2836 - ARMv7 기반의 Quad core Cortex-A7
    • NEON & VFP 지원
    • 700 ~ 800MHz(안정) 900 ~ 1000MHz(오버클럭)
  • B8132B4PB LPDDR2 1GB @ 450MHz (그래픽 메모리 공유)
  • microSD
  • 4 USB Ports (최대 100mA 까지만 공급 가능)
    • LAN9512 USB Fast Ethernet (5port USB 허브를 제공하며 그중 1포트를 랜으로 사용)
  • Full size HDMI
  • 3.5 파이 4극 잭 - 스테레오 오디오 및 콤포지트 비디오
  • GPIO 40pin
  • 650mA 소비로 USB 전력으로는 풀 로드시 불안정할 수 있음


rpi 2b 소비전류

  • idle
    • 1.70 W
  • idle + LAN
    • 1.93 W
  • idle + LAN + CAM
    • 2.20 W
  • idle + LAN + HDMI
    • 2.01 W

PMIC가 없어서 shutdown 해도 2.2W 먹고 있음

peripheral

GPU

  • 16MB 부터 설정이 가능
  • 16MB (2D / FullHD 해상도)
  • 32MB (2D / FullHD 해상도 / 3D / Video 가속) - 메모리 부족할 수 있으나 기능은 활성화
  • 128MB (rpi 2 기본 설정)

Audio

  • HDMI Audio output
  • 3.5 인치 Stereo Audio output / Composite Video
  • Audio capture device가 존재하지 않아 USB codec이나 I2S로 장착해야 함

UART

  • UART는 TTL 레벨로 연결해야 한다.
  • 시리얼 콘솔로 설정시 115kbps로 연결

SPI

  • SPI LCD + resistive touch 에서 SPI로 사용함.
  • 2개 채널이 존재
  • SPI 클럭 변경으로 통신 속도 향상 가능
  • SPI 클럭은 디바이더 값으로 설정가능한 값이 제한 됨.

CAN

  • 쓸일이 생기긴 생기려나?

I2C

  • config.txt 및 /etc/modules에서 설정을 해야 정상 작동함
  • 기본은 100kbps로 설정 됨.

CSI

  • 15핀 1mm pitch B 타입(서로 뒤집힌)
  • 케이블 구하기가 힘듬(카메라 구매시 주는걸 애지중지 사용...)

GPIO

  • GPIO는 3.3V tolerance를 가진다.
  • 과전류/과전압 방지기능 없음.
  • wiringPI를 이용하면 편리함
PWM
  • PWM 은 balanced(기본값) 모드와 MS(Mark:Space) 모드가 존재한다.
    • balanced mode는 LED 켜는게 유리하며(on/off 비율로 전류 제어)
    • ms mode는 서보 모터 제어하는데 유리하다.
IR Receiver(GPIO)
  • GPIO1은 IR receiver 용이며 GPIO로 구현된다.
  • 부팅시 커널에서 연결이 되어 있을 경우에만 활성화 하므로, 결선후 부팅을 해야 함


NEON

boot sequence

라즈베리 파이는 SD 카드를 기본으로 부팅을 하게 되며, FAT32 file system을 인식하여 아래와 같은 순서의 부팅을 수행한다.

  • bcm2835/bcm2836 내장 부트로더
  • bootcode.bin 부트로더
    • start.elf GPU 초기화
    • config.txt 환경설정
    • cmdline.txt 커널인자
  • kernel.img 커널


rootfs 구조 및 구성

root file system

FAT32
 /boot
 /boot/bootcode.bin  - Boot loader
 /boot/config.txt    - Bootloader environment
 /boot/start.elf     - GPU firmware
 /boot/kernel.img    - Kernel
 /boot/cmdline.txt   - Kernel argument for boot
 /boot/overlays      - device tree
EXT4
 /bin
 /sbin
 /home
 /proc
 /usr
 /opt

openelec FAT32 /boot 영역

$ file *
LICENCE.broadcom:    ASCII text
SYSTEM:              Squashfs filesystem, little endian, version 4.0, 98925267 bytes, 9140 inodes, blocksize: 131072 bytes, created: Wed Apr  1 06:38:30 2015
bcm2709-rpi-2-b.dtb: data
bootcode.bin:        data
cmdline.txt:         ASCII text
config.txt:          ASCII text
fixup.dat:           data
kernel.img:          Linux kernel ARM boot executable zImage (little-endian)
overlays:            directory
start.elf:           ELF 32-bit LSB  executable, version 1 (SYSV), statically linked, stripped

config.txt

cmdline.txt

  • kernel 인자를 저장하는 파일
  • UART를 통해 콘솔을 제공하기 위해서는 이 파일이 설정이 되어야 한다.

proc file system info dump

raspberry pi B

openelec

# cat /proc/cpuinfo
processor       : 0
model name      : ARMv6-compatible processor rev 7 (v6l)
Features        : half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xb76
CPU revision    : 7

Hardware        : BCM2708
Revision        : 000e
Serial          : 0000000055593a15
# cat /proc/meminfo
MemTotal:         348896 kB
MemFree:          135108 kB
MemAvailable:     249272 kB
Buffers:           36180 kB
Cached:           121204 kB
SwapCached:            0 kB
Active:            96116 kB
Inactive:         100096 kB
Active(anon):      42392 kB
Inactive(anon):     1344 kB
Active(file):      53724 kB
Inactive(file):    98752 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         38856 kB
Mapped:            35660 kB
Shmem:              4908 kB
Slab:               8980 kB
SReclaimable:       5296 kB
SUnreclaim:         3684 kB
KernelStack:         744 kB
PageTables:          700 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      174448 kB
Committed_AS:     302920 kB
VmallocTotal:    1712128 kB
VmallocUsed:        2180 kB
VmallocChunk:    1487128 kB

raspberry pi 2B

raspbian

$ cat cpuinfo
processor       : 0
model name      : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 38.40
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5

processor       : 1
model name      : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 38.40
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5

processor       : 2
model name      : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 38.40
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5

processor       : 3
model name      : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 38.40
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5

Hardware        : BCM2709
Revision        : a21041
Serial          : 00000000a37ce24e
$ cat meminfo
MemTotal:         883164 kB
MemFree:          747608 kB
MemAvailable:     813484 kB
Buffers:           15936 kB
Cached:            68256 kB
SwapCached:            0 kB
Active:            65288 kB
Inactive:          44048 kB
Active(anon):      25264 kB
Inactive(anon):      608 kB
Active(file):      40024 kB
Inactive(file):    43440 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:        102396 kB
SwapFree:         102396 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         25140 kB
Mapped:            35728 kB
Shmem:               732 kB
Slab:              12112 kB
SReclaimable:       5780 kB
SUnreclaim:         6332 kB
KernelStack:        1528 kB
PageTables:         1492 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      543976 kB
Committed_AS:     261592 kB
VmallocTotal:    1171456 kB
VmallocUsed:        1492 kB
VmallocChunk:     947916 kB
CmaTotal:           8192 kB
CmaFree:            3740 kB

개발 환경 구축

개발 디렉토리 및 다운로드

패키지 설치

$ sudo apt-get install git-core

개발도구 다운로드

$ cd ~
$ mkdir rasp
$ cd rasp
$ mkdir modules
$ git clone --depth=1 https://github.com/raspberrypi/tools
$ git clone --depth=1 https://github.com/raspberrypi/linux
$ git clone --depth=1 https://github.com/raspberrypi/target_fs
$ git clone --depth=1 https://github.com/raspberrypi/firmware

환경변수 설정 x64는 64bit OS일 경우 없는 것은 32bit OS 일 경우 설정한다.

만약 64bit에서 32bit 경로로 설정하면 실행파일이 존재함에도 불구하고 찾을 수 없다고 에러가 발생한다.

$ export PATH=$PATH:~/rasp/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
$ export PATH=$PATH:~/rasp/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

개발환경 트리

~/rasp$ tree -L 2
.
├── firmware
├── linux
├── modules
├── target_fs
└── tools
   ├── arm-bcm2708
   ├── configs
   ├── mkimage
   ├── pkg
   ├── sysidk
   ├── test_code
   └── usbboot


커널 빌드

$ sudo apt-get install libncurses5-dev 
$ cd linux
$ make mrproper
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcmrpi_defconfig    // rpi 1
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig   // rpi 2
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install INSTALL_MOD_PATH=../modules

커널은 arch/arm/boot/zImage 위치에 옵션에 따라 uImzge(u-boot) zImage(gzip compressed) 파일이 존재할 수 있다.

해당 파일을 라즈베리2 에서는 boot 파티션(대개는 첫번째 파티션으로 FAT로 인식)에 kernel7.img로 이름을 바꾸어 복사하면 된다.


-*- Kernel->user space relay support (formerly relayfs)           
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
()    Initramfs source file(s)                                    
[*]   Support initial ramdisks compressed using gzip              
[ ]   Support initial ramdisks compressed using bzip2             
[ ]   Support initial ramdisks compressed using LZMA              
[ ]   Support initial ramdisks compressed using XZ                
[ ]   Support initial ramdisks compressed using LZO               
[ ]   Support initial ramdisks compressed using LZ4               
[ ] Optimize for size                                             
-*- Configure standard kernel features (expert users)  --->       
[*] Embedded system                                               
    Kernel Performance Events And Counters  --->                  
[*] Enable VM event counters for /proc/vmstat                     
[*] Enable SLUB debugging support                                 

빌드시 커널 initramfs 에서 LZMA 압축방법을 지원해 주도록 설정해야 함(2015/04 월 커널으로 테스트)


2015.08.18에 다운로드 한 결과 LZMA 설정되어 있음

-*- Kernel->user space relay support (formerly relayfs)           
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
()    Initramfs source file(s)                                    
[*]   Support initial ramdisks compressed using gzip              
[*]   Support initial ramdisks compressed using bzip2             
[*]   Support initial ramdisks compressed using LZMA              
[*]   Support initial ramdisks compressed using XZ                
[*]   Support initial ramdisks compressed using LZO               
[*]   Support initial ramdisks compressed using LZ4

개발 환경 구축 (yocto project)

pi@raspberrypi ~ $ sudo apt-get install sed wget cvs subversion git-core coreutils unzip texi2html texinfo libsdl1.2-dev docbook-utils gawk python-pysqlite2 diffstat help2man make gcc build-essential g++ desktop-file-utils chrpath libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake groff libtool xterm
pi@raspberrypi ~/src $ git clone git://git.yoctoproject.org/poky yoctoProject
pi@raspberrypi ~/src $ cd yoctoProject/
pi@raspberrypi ~/src/yoctoProject $ git clone git://git.yoctoproject.org/meta-raspberrypi
pi@raspberrypi ~/src/yoctoProject $ source oe-init-build-env raspberryPiBuild/
pi@raspberrypi ~/src/yoctoProject/raspberryPiBuild $ vim conf/local.conf
MACHINE ?= "raspberrypi" 
MACHINE ?= "raspberrypi2"
pi@raspberrypi ~/src/yoctoProject/raspberryPiBuild $ vim conf/bblayers.conf
# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
LCONF_VERSION = "6"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS ?= " \
  /home/pi/src/yoctoProject/meta \
  /home/pi/src/yoctoProject/meta-yocto \
  /home/pi/src/yoctoProject/meta-yocto-bsp \
  /home/pi/src/yoctoProject/meta-raspberrypi \
  "
BBLAYERS_NON_REMOVABLE ?= " \
  /home/pi/src/yoctoProject/meta \
  /home/pi/src/yoctoProject/meta-yocto \
  "
pi@raspberrypi ~/src/yoctoProject/raspberryPiBuild $ bitbake rpi-basic-image
pi@raspberrypi ~/src/yoctoProject/raspberryPiBuild $ bitbake core-sato-image

기능별 설정

wiring PI 설치

$ cat wiringpi.sh
sudo apt-get install git-core
mkdir ~/src
cd ~/src
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
./build 

적외선 리모컨 - lirc

openelec 에서 작업한 내용으로, config.txt를 변경하고 나서는 시스템을 재시작 해주어야 한다.

$ cat /boot/config.txt
dtoverlay=lirc-rpi
$ sudo reboot

lircd 데몬이 구동되면 irrecord가 정상작동하지 않으므로 lircd 관련 프로세스를 모두 kill 한다음 시도한다.

$ irrecord /storage/.config/lircd.conf
$ cat lircd.conf

# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.9.1-git(default) on Tue Aug 11 02:51:10 2015
#
# contributed by
#
# brand:                       /storage/.config/lircd.conf
# model no. of remote control:
# devices being controlled by this remote:
#

begin remote

  name  /storage/.config/lircd.conf
  bits           16
  flags SPACE_ENC|CONST_LENGTH
  eps            30
  aeps          100

  header       9085  4524
  one           646  1604
  zero          646   490
  ptrail        646
  pre_data_bits   16
  pre_data       0xFF
  gap          108567
  toggle_bit_mask 0x0

      begin codes
          KEY_UP                   0x7A85
          KEY_DOWN                 0x1AE5
          KEY_LEFT                 0x609F
          KEY_RIGHT                0x20DF
          KEY_OK                   0x9A65
          KEY_PLAY                 0xE01F
          KEY_FASTFORWARD          0x42BD
          KEY_STOP                 0x629D
          KEY_MENU                 0xC03F
          KEY_EXIT                 0x50AF
          KEY_VOLUMEUP             0xA25D
          KEY_VOLUMEDOWN           0x22DD
       end codes

end remote

SPI LCD - fbtft

라즈비안에서 테스트한 내용임

$ git clone https://github.com/swkim01/waveshare-dtoverlays.git
$ sudo cp waveshare-dtoverlays/waveshare35a-overlay.dtb /boot/overlays/
$ sudo vi /boot/config.txt
dtparam=spi=on
dtoverlay=waveshare35a,speed=31200000,fps=30
$ sudo raspi-config
8 Advanced Options
A6 SPI
$ wget http://tronnes.org/downloads/xinput-calibrator_0.7.5-1_armhf.deb
$ sudo dpkg -i -B xinput-calibrator_0.7.5-1_armhf.deb
$ DISPLAY=:0.0 xinput_calibrator
$ cat /usr/share/X11/xorg.conf.d/99-fbturbo.conf
# This is a minimal sample config file, which can be copied to
# /etc/X11/xorg.conf in order to make the Xorg server pick up
# and load xf86-video-fbturbo driver installed in the system.
#
# When troubleshooting, check /var/log/Xorg.0.log for the debugging
# output and error messages.
#
# Run "man fbturbo" to get additional information about the extra
# configuration options for tuning the driver.

Section "Device"
        Identifier      "Allwinner A10/A13 FBDEV"
        Driver          "fbturbo"
        Option          "fbdev" "/dev/fb1"

        Option          "SwapbuffersWait" "true"
EndSection

Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "Calibration"   "237 3965 3888 214"
        Option  "SwapAxes"      "1"
        Option "InvertX" "1"
        Option "InvertY" "1"
EndSection

SPI + HDMI/composite 출력 설정 단, 터치는 HDMI/composite쪽으로 주로 작동하며 창 이동 가능. 누르고 있으면 우클릭 인식

pi@raspberrypi /usr/share/X11/xorg.conf.d $ cat 99-fbturbo.conf
# and load xf86-video-fbturbo driver installed in the system.
#
# When troubleshooting, check /var/log/Xorg.0.log for the debugging
# output and error messages.
#
# Run "man fbturbo" to get additional information about the extra
# configuration options for tuning the driver.

Section "Device"
        Identifier      "rpi"
        Driver          "fbturbo"
        Option          "fbdev" "/dev/fb0"
        Option          "SwapbuffersWait" "true"
EndSection


Section "Device"
        Identifier      "spi"
        Driver          "fbturbo"
        Option          "fbdev" "/dev/fb1"
        Option          "SwapbuffersWait" "true"
EndSection

Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option          "Calibration"   "237 3965 3888 214"
        Option          "SwapAxes"      "1"
        Option          "InvertX" "1"
        Option          "InvertY" "1"
        Option          "EmulateThirdButton" "1"
        Option          "EmulateThirdButtonTimeout" "750"
        Option          "EmulateThirdButtonMoveThreshold" "30"
EndSection

Section "Monitor"
        Identifier      "rpi hdmi"
EndSection

Section "Monitor"
        Identifier      "rpi spi"
EndSection

Section "Screen"
        Identifier      "primary"
        Device          "rpi"
        Monitor         "rpi hdmi"
EndSection

Section "Screen"
        Identifier      "secondary"
        Device          "spi"
        Monitor         "rpi spi"
EndSection

Section "ServerLayout"
        Identifier      "default"
        Screen 0        "primary" 0 0
        Screen 1        "secondary" LeftOf "primary"
        Option          "Xinerama" "1"
EndSection

카메라 - MMAL/CSI

CSI 케이블 규격

Type : FFC / FPC (Flat Flex)
Wires : 15 
Pitch : 1mm
Contacts : Type B (This means you have the contacts at opposite sides of the cable. So one is at the top and the other at the bottom)

라즈비안에서 카메라 사용하도록 설정

  • raspi-config 사용
$ sudo raspi-config
5 Enable Camera
  • config.txt를 직접 수정하여 사용
$ cat /boot/config.txt
start_x=1
  • 카메라의 LED 끄도록 설정
$ cat /boot/config.txt
disable_camera_led=1

v4l2를 이용하여 사용하도록 설정(1회성)

$ sudo modprobe bcm2835-v4l2

v4l2를 이용하여 사용하도록 설정(자동)

$ cat /etc/modules
bcm2835-v4l2

유틸리티

$ whereis raspistill
raspistill: /usr/bin/raspistill /usr/bin/X11/raspistill /opt/vc/bin/raspistill
$ whereis raspivid
raspivid: /usr/bin/raspivid /usr/bin/X11/raspivid /opt/vc/bin/raspivid
$ raspivid -t 0 -v

카메라 - motion

$ cat /etc/modules
bcm2835-v4l2
우분투 패키지 설치(v4l2)
$ sudo apt-get install motion
$ sudo vi /etc/motion/motion.conf
daemon on
width 640
height 480
framerate 15
webcam_maxrate 15
webcam_localhost off
control_localhost off
stream_port 8081
webcontrol_port 8080

$ sudo vi /etc/default/motion
start_motion_daemon=yes
pre-build 바이너리(MMAL)

mmal motion은 motion 과 거의 동일하나 바이너리를 다운받아서 해야 함.

$ sudo apt-get install motion
$ sudo apt-get install libjpeg62
$ sudo apt-get remove motion
$ vi motion-mmalcam.conf
# Start in daemon (background) mode and release terminal (default: off)
daemon on

# Restrict stream connections to localhost only (default: on)
stream_localhost off

# Image width (pixels). Valid range: Camera dependent, default: 352
width 640

# Image height (pixels). Valid range: Camera dependent, default: 288
height 480

# Maximum number of frames to be captured per second.
# Valid range: 2-100. Default: 100 (almost no limit).
framerate 10

# The mini-http server listens to this port for requests (default: 0 = disabled)
stream_port 8081

# Maximum framerate for stream streams (default: 1)
stream_maxrate 10

# TCP/IP port for the http server to listen on (default: 0 = disabled)
webcontrol_port 8080

# Restrict control connections to localhost only (default: on)
webcontrol_localhost off

# Output for http server, select off to choose raw text plain (default: on)
webcontrol_html_output on

$ sudo ./motion -c motion-mmalcam.conf


아래와 같은 에러 발생시 libjpeg62 패키지 설치필요

./motion: error while loading shared libraries: libjpeg.so.62: cannot open shared object file: No such file or directory



motion.conf 설정
$ sudo vi /etc/motion/motion.conf

########### 움직임 감지시 이미지로 저장
# Output 'normal' pictures when motion is detected (default: on)
output_normal off

# Output pictures with only the pixels moving object (ghost images) (default: off)
output_motion off

########### 움직임 감지시 동영상으로 저장
# Use ffmpeg to encode mpeg movies in realtime (default: off)
ffmpeg_cap_new off

# Use ffmpeg to make movies with only the pixels moving
# object (ghost images) (default: off)
ffmpeg_cap_motion off

카메라 - 스트리밍

cvlc - RTSP / HTTP
$ sudo apt-get install vlc
$ raspivid -o - -t 0 -n | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
$ raspivid -o - -t 0 -n | cvlc stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8090}' :demux=h264

raspivid의 기본 출력 해상도는 1920x1080 이므로 -md 옵션을 주어 해상도를 변경해도 출력 해상도에 맞춰 1920x1080으로 스케일링 된다.

아래는 2592x1944 영상을 1920x1080으로 스트리밍 하는 예제

$ raspivid -o - -t 0 -n -md 2 | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
gstreamer - RTP
$ sudo apt-get update
$ sudo apt-get install gstreamer1.0 gstreamer1.0-omx

server

$ raspivid -t 0 -w 1280 -h 720 -fps 30 -hf -b 2000000 -n -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=192.168.10.23 port=5000

client

$ gst-launch-1.0 -v tcpclientsrc host=192.168.10.23 port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false
gstreamer - RTSP with GST-RTSP

server

$ mkdir src
$ cd src
$ wget http://gstreamer.freedesktop.org/src/gst-rtsp/gst-rtsp-0.10.8.tar.bz2
$ tar -xvf gst-rtsp-0.10.8.tar.bz2
$ sudo apt-get install libglib2.0-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev gstreamer-tools gstreamer0.10-plugins-base  gstreamer0.10-plugins-good gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly
$ cd gst-rtsp-0.10.8
$  ./configure
$ make -j4
$ cd examples
$ raspivid -t 0 -n -o - | gst-launch -v fdsrc ! h264parse ! gdppay ! tcpserversink host=127.0.0.1 port=5000 | ./test-launch "( tcpclientsrc host=127.0.0.1 port=5000 ! gdpdepay ! avdec_h264 ! rtph264pay name=pay0 pt=96 )" 

client(vlc는 잘 안되고, 팟플레이어로 테스트)

rtsp://ip:8554/test


카메라 - 고속촬영

MP4Box 설치(30fps로 저장되는 90fps 영상을 보정해 줌)

$ sudo apt-get install gpac

640*480 에서는 90fps

$ raspivid -h 640 -w 480 -fps 90 -t 10000 -o video.h264
$ MP4Box -fps 30 -add video.h264 video.mp4

320*240 에서는 120fps까지 지원한다.

$ raspivid -w 320 -h 240 -fps 120 -t 10000 -o video.h264
$ MP4Box -fps 30 -add video.h264 video.mp4

단, 녹화시에만 차이가 나며, MP4Box를 통해 30fps로 변환해야 슬로우 모션으로 재생이 가능해진다.

I2C

$ sudo raspi-config
$ cat /boot/config.txt
dtparam=i2c_arm=on

raspi-config에서 i2c를 활성화 하여도 /etc/modules에 모듈이 제대로 적재되지 않아 수작업으로 로드해야 함

$ sudo vi /etc/modules
i2c-dev
i2c-bcm2708
$ ls -al /dev/i2c*
crw-rw---T 1 root i2c 89, 1 11월  2 16:41 /dev/i2c-1
$ sudo apt-get install i2c-tools libi2c-dev python-smbus
$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- 53 -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

$ i2cdetect -y 0
Error: Could not open file `/dev/i2c-0' or `/dev/i2c/0': No such file or directory

$ i2cdetect -l
i2c-1   i2c             3f804000.i2c                            I2C adapter

$ i2cdetect -F 1
Functionalities implemented by /dev/i2c-1:
I2C                              yes
SMBus Quick Command              yes
SMBus Send Byte                  yes
SMBus Receive Byte               yes
SMBus Write Byte                 yes
SMBus Read Byte                  yes
SMBus Write Word                 yes
SMBus Read Word                  yes
SMBus Process Call               yes
SMBus Block Write                yes
SMBus Block Read                 no
SMBus Block Process Call         no
SMBus PEC                        yes
I2C Block Write                  yes
I2C Block Read                   yes

wiringpi gpio util - pwm

rpi2에는 2개의 H/W PWM 포트가 있는데 2개를 각각 PWM 용으로 설정

$ gpio mode 1 pwm
$ gpio mode 23 pwm

pwm 파형을 mark-space 로 신호-간격으로 출력. 기본은 bal로 등간격 PWM으로 LED 등에 쓰이는 모드이다.

$ gpio pwm-ms

pwm 클럭 디바이더를 설정하여 20Hz 주기로 PWM 신호가 나오도록 설정

 $ gpio pwmc 400

pwm 범위를 설정 기본값은 0~1023

$ gpio pwmr 1024

범위는 1024로 0~1023 이지만 실험적으로는 30~110 사이에 설정됨

$ gpio pwm 1 70
$ gpio pwm 23 70

부팅 후 기본값상태

$ gpio readall
 +-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+

H/W PWM 모드로 전환

$ gpio readall
 +-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | ALT5 | GPIO. 1 | 1   | 18  |
 |  13 |  23 | GPIO.23 | ALT0 | 0 | 33 || 34 |   |      | 0v      |     |     |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+

400/1024로 설정하듯 비율을 맞춰 PWM의 정밀도를 올릴수 있음

  • 2.25도
$ gpio pwmc 400
$ gpio pwmr 1024
$ gpio pwm 1 30
$ gpio pwm 1 70
$ gpio pwm 1 110 
  • 1.125도
$ gpio pwmc 200
$ gpio pwmr 2048
$ gpio pwm 1 60
$ gpio pwm 1 140
$ gpio pwm 1 220
  • 0.5625도
$ gpio pwmc 100
$ gpio pwmr 4096
$ gpio pwm 1 120
$ gpio pwm 1 280
$ gpio pwm 1 440

wiringpi api - pwm

$ gcc -lwiringPi wpi.c
#include <wiringPi.h>

void main()
{
        if(wiringPiSetup() == -1) exit(0);

        pinMode(1, PWM_OUTPUT);
        pwmSetMode(PWM_MODE_MS);
//      pwmSetRange(1024);
//      pwmSetClock(400);

        pinMode(23, PWM_OUTPUT);
        pwmSetMode(PWM_MODE_MS);
        pwmSetRange(1024);
        pwmSetClock(400);

        pwmWrite(1,     70);
        pwmWrite(23,    70);
}

void setPWM_1(int val)
{
        pwmWrite(23, val);
}

void setPWM_2(int val)
{
        pwmWrite(1, val);
}

Trouble shooting

한글 폰트 출력 문제

  • jessie
$ sudo apt-get install ttf-unfonts-core
  • stretch
$ sudo apt-get install fonts-unfonts-core

라즈비안 키보드 배열

라즈베리 파이에 USB 키보드를 사용시 키가 다르게 입력되는 경우 해결법

$ sudo cat /etc/default/keyboard
# KEYBOARD CONFIGURATION FILE
# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
#XKBLAYOUT="gb"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS=""

BACKSPACE="guess"
$ sudo raspi-config

를 통해서도 설정이 가능하다.

라즈비안 타임존(timezone)

$ cat /etc/timezone
Asia/Seoul
$ sudo raspi-config

를 통해서도 설정이 가능하다.

USB 전류 제한 해제

B+ / 2B에 적용가능

$ sudo vi /boot/config.txt 
safe_mode_gpio=4
max_usb_current=1
$ gpio -g mode 38 out
$ gpio -g write 38 1
개인 도구
이름공간

변수
행위
둘러보기
도구모음