Raspberrypi 2021. 9. 1. 10:24

라즈베리파이 핀 맵

핀 맵 이미지

명령어 pinout

계속 위의 이미지들을 참고했었는데, 라즈베리파이에서 명령어로 pinout을 입력하면 터미널에 핀 맵이 나온다.

$ pinout
,--------------------------------.
| oooooooooooooooooooo J8   +======
| 1ooooooooooooooooooo  PoE |   Net
|  Wi                    1o +======
|  Fi  Pi Model 4B  V1.4 oo      |
|        ,----. +---+         +====
| |D|    |SoC | |RAM|         |USB3
| |S|    |    | |   |         +====
| |I|    `----' +---+            |
|                   |C|       +====
|                   |S|       |USB2
| pwr   |hd|   |hd| |I||A|    +====
`-| |---|m0|---|m1|----|V|-------'

Revision           : c03114
SoC                : BCM2711
RAM                : 4GB
Storage            : MicroSD
USB ports          : 4 (of which 2 USB3)
Ethernet ports     : 1 (1000Mbps max. speed)
Wi-fi              : True
Bluetooth          : True
Camera ports (CSI) : 1
Display ports (DSI): 1

J8:
   3V3  (1) (2)  5V    
 GPIO2  (3) (4)  5V    
 GPIO3  (5) (6)  GND   
 GPIO4  (7) (8)  GPIO14
   GND  (9) (10) GPIO15
GPIO17 (11) (12) GPIO18
GPIO27 (13) (14) GND   
GPIO22 (15) (16) GPIO23
   3V3 (17) (18) GPIO24
GPIO10 (19) (20) GND   
 GPIO9 (21) (22) GPIO25
GPIO11 (23) (24) GPIO8 
   GND (25) (26) GPIO7 
 GPIO0 (27) (28) GPIO1 
 GPIO5 (29) (30) GND   
 GPIO6 (31) (32) GPIO12
GPIO13 (33) (34) GND   
GPIO19 (35) (36) GPIO16
GPIO26 (37) (38) GPIO20
   GND (39) (40) GPIO21

POE:
TR01 (1) (2) TR00
TR03 (3) (4) TR02

참고

Raspberrypi 2021. 4. 30. 22:18

라즈베리파이 USB 부팅

  • 라즈베리파이3B에서 테스트했다.

  • USB 부트 모드를 설정해야 하므로 일단 micro sd카드에서 부팅해야 한다.


USB에 라즈베리파이 OS 올리기

  • 컴퓨터에 USB를 꽂고 아래 사이트에서 Raspberry Pi Imager를 다운받는다.


  • 받는 동안 라즈베리파이에서 아래 설정을 변경한다.


라즈베리파이 설정 변경

  • USB 부트 모드를 활성화해야 한다.

    sudo apt update
    sudo apt upgrade
    echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt
    sudo reboot
    • program_usb_boot_mode = 1 이런 식으로 띄어쓰기를 하면 적용이 되지 않는다.
  • 리부팅 후 정상 적용이 되었는지 확인한다.

    vcgencmd otp_dump | grep 17
    17:3020000a
  • 확인됐으면 종료한 다음 sd카드를 빼고 usb를 꽂아서 부팅하면 정상적으로 작동한다.

Raspberrypi 2021. 4. 2. 22:44

VSCode로 라즈베리파이 빌드 시 메모리 부족

  • VSCode의 remote-ssh 플러그인으로 라즈베리파이에 연결하여 작업 중에 메모리 부족 문제가 발생했다.

  • yarn build로 프로젝트를 빌드하면 다음과 같은 에러가 발생했다.

      The build failed because the process exited too early. This probably means the system ran out of memory or someone called `kill -9` on the process.
  • VSCode 연결을 끊고 git bash로 ssh 연결해서 사용해보니 해결되었다.

  • 메모리 사용량 확인 명령어

      free -m  // 용량을 MB 단위로 출력
      free -h  // 용량 + 단위로 출력
      cat /proc/meminfo  // 메모리 사용량 상세

참고

Raspberrypi 2021. 3. 13. 03:17

라즈베리파이 부팅 시 자동 실행

  • rc.local, .bashrc, init.d, systemd 등의 방법이 있지만 crontab이 가장 간편하다.

crontab

  • 자동 실행하고 싶은 명령어를 정리해서 쉘 스크립트로 작성한다.

  • 다음 명령어를 입력한다.

    sudo crontab -e
    • 나는 처음 입력하니까 에디터를 선택하라고 했는데, vim basic이 무난할 것 같아서 선택했다.
  • crontab 설정 파일이 에디터로 열렸으면 맨 밑에 다음과 같이 실행하고 싶은 파일을 입력한다.

    • 파일명은 절대경로로 입력해야하는 듯 하다.
    ...
    
    @reboot sudo 파일명.sh
  • 리부팅하면 적용된다.

참고

Raspberrypi 2021. 3. 9. 04:02

라즈베리파이에서 리액트 작업 환경 설정

nodejs

  • nodejs는 크롬 V8 js 엔진으로 빌드한 js 런타임이다.

    • 웹 브라우저가 아니어도 js 연산이 가능하다.

    • 설치 시 npm도 같이 설치된다.

  • https://github.com/nodesource/distributions/blob/master/README.md#debinstall에 설치 방법이 나와있다.

  • https://nodejs.org/en/에 접속해보니 LTS 버전이 14.x라서 해당 버전으로 설치하려는데..

    pi@raspberrypi:~ $ sudo curl -fsSL https://deb.nodesource.com/setup_14.x | bash -
    
    ## Installing the NodeSource Node.js 14.x repo...
    
    ## Populating apt-get cache...
    
    + apt-get update
    패키지 목록을 읽는 중입니다... 완료
    E: 잠금 파일 /var/lib/apt/lists/lock 파일을 열 수 없습니다 - open (13: 허가 거부)
    E: /var/lib/apt/lists/ 디렉터리를 잠글 수 없습니다
    W: /var/cache/apt/pkgcache.bin 파일을 삭제하는데 문제가 있습니다 - RemoveCaches (13: 허가 거부)
    W: /var/cache/apt/srcpkgcache.bin 파일을 삭제하는데 문제가 있습니다 - RemoveCaches (13: 허가 거부)
    Error executing command, exiting
    • https://stricky.tistory.com/181 이거 다 해봐도 안된다..

    • https://blog.naver.com/nkkh159/220832107076 여기 참고해서 sudo su 명령어로 root 상태에서 진행하니 됐다.

      sudo su
      sudo curl -fsSL https://deb.nodesource.com/setup_14.x | bash -
      apt-get install -y nodejs
      • root 권한이니까 두 번째 줄의 sudo는 안써도 될듯..?

      • 다시 pi 유저로 돌아올 때는 Ctrl + DEOF?EOT?를 주면 된다. exit를 입력해도 된다.

  • nodejs -v로 버전을 확인할 수 있다.


yarn

  • npm보다 빠르고 효율적인 캐시 시스템과 기타 부가 기능을 제공한다고 한다.

  • 위에서 npm이 설치되었으므로, 다음 명령어로 바로 yarn을 설치할 수 있다.

    sudo npm install --global yarn
    yarn -v
  • 참고 : https://classic.yarnpkg.com/en/docs/install/#debian-stable

Raspberrypi 2021. 3. 9. 03:48

라즈베리파이 USB 마운트 해제

  • 기본적인 마운트 위치는 /media/pi/ 디렉토리 내부이다.

  • 다음과 같이 umount 명령어로 언마운트 시킬 수 있다.

    umount /media/pi/USB
    • 위치를 잘 모르면 umount를 치고 탭을 눌러가며 보면 된다.
Raspberrypi 2021. 3. 9. 03:02

라즈베리파이 Nginx

설치

  • 다음 명령어로 nginx 설치

    sudo apt install nginx -y
  • 설치가 완료되면 웹서버가 켜진다.

    service nginx status
    • active 상태임을 알 수 있다.

설정 변경

  • 기본 설정은 /etc/nginx/sites-available/default 파일에 있다.

    • 권한때문에 sudo vi로 편집해야 수정 가능하다.

    • SPA의 경우 index.html만을 가지고있기 때문에 location / 부분을 수정해야 한다.

  • 변경된 설정을 적용하려면 nginx를 다시 시작해야 한다.

    sudo service nginx restart

접속

  • 웹 브라우저에서 라즈베리파이의 ip로 접속하면 Welcome to nginx! 페이지가 보인다.
Raspberrypi 2021. 3. 9. 02:28

라즈베리파이 SSH 설정

SSH Enable

  • 왼쪽 위의 시작메뉴 - 기본 설정 - Raspberry Pi Configuration

    • Interfaces 탭에서 SSHEnable로 설정한 뒤 OK

putty로 접속

  • https://www.putty.org/ 에서 Download PuTTY의 here 항목 클릭

  • 지금은 단순히 ssh로 접속하는 것이 목적이므로 Alternative binary files 탭의 putty.exe (the SSH and Telnet client itself)만 다운로드했다.

    • 사용하던 ssh key가 없거나 파일 전송이 목적이라면 패키지 파일로 통합 설치를 하는게 편할 듯 하다.
  • putty.exe를 실행하여 ip와 port(처음엔 22번)를 적고 Open을 누르면 첫 연결 시 나오는 문구가 있는데, 를 눌러서 저장해준다.

    • ip는 공유기 기본 게이트웨이 페이지에서 확인하는게 간편한 것 같다.

패스워드 로그인 방식 대신 SSH 키로만 접속하기

  • 아이디와 비밀번호로 로그인하는 방식은 보안이 취약하다고 생각한다.

라즈베리파이 SSH 생성

  • 라즈베리파이에 ssh 키가 있는지 확인한다.

    ls ~/.ssh
    
    /* 출력
    ls: cannot access '/.ssh': 그런 파일이나 디렉터리가 없습니다
    */
    • SSH 생성

      ssh-keygen
      • 키의 저장 위치와 passphrase를 입력하라고 하는데, 엔터를 누르면 생략된다.

      • 이후 다시 ls ~/.ssh 명령어를 입력하면 개인키(id_rsa)와 공개키(id_rsa.pub)가 생긴 것을 알 수 있다.


컴퓨터에서 ssh 키 옮기기

  • 컴퓨터에서 ~/.ssh 위치(윈도우에서는 보통 C:\Users\사용자명\.ssh)로 들어간다.

    • 해당 폴더가 없는 경우 PuTTYgen.exe키를 생성해야 한다.

    • 공개키인 id_rsa.pub를 메모장으로 열어서 내용을 전부 복사한다.

    • 아까 접속한 라즈베리파이의 터미널에서 ~/.ssh로 들어간다.

    • 다음 명령어로 authorized_keys 파일을 열어서 복사한 공개키를 붙여넣기한다.

      vi authorized_keys
      • 입력 : i

      • 붙여넣기 : shift + insert

      • 저장 후 종료 : esc 누르고 :wq 입력

  • 이후 putty.exe를 종료하고, Git Bash로 다음 명령어를 통해 접속할 수 있다.

    • ip는 라즈베리파이의 ip이다.
    ssh pi@ip
    • Git Bash에서 ssh 명령어를 사용할 수 있는건 Git for Windows를 설치해서 그런 것 같다.

패스워드 로그인 금지 설정

  • 라즈베리파이의 /etc/ssh/sshd_config 파일이 ssh 데몬 설정 파일이다.

  • 644 권한이라서 sudo로 다뤄야 편집할 수 있다.

    sudo vi sshd_config
  • 37번째 줄의 PubkeyAuthentication yes 주석을 풀어준다.

    • 37G를 입력하면 37번째 줄로 이동한다.

    • x 버튼을 한번 누르면 커서의 글자가 하나 사라진다.

    • u를 누르면 undo

  • 56번째 줄의 PasswordAuthentication yes 설정을 no로 바꿔준다.

    • 56G를 입력하면 56번째 줄로 이동한다.

    • i를 입력해서 입력모드로 들어간 후, 글자를 수정해준다.

    • esc 누르고 :wq로 저장하면서 나온다.

  • 이후 service ssh restart 명령으로 ssh를 재시작하면 설정이 적용된다.

    • 다시 putty.exe를 실행하여 ip와 port를 입력한 뒤 접속해보면, login id를 입력하자마자 다음과 같은 에러가 발생한다.

      No supported authentication methods available (server sent: publickey)
    • Git Bash로 ssh 명령어를 통해 접속하면 별다른 유저 인증 절차 없이 바로 접속할 수 있다.


SSH 포트 변경

  • 2개의 파일을 수정하면 된다.

    /etc/ssh/sshd_config

    ...
    Port 포트번호
    ...

    /etc/services

    ...
    ssh             포트번호/tcp                         # SSH Remote Login Protocol
    ...
  • 리부팅하면 적용된다.

    sudo reboot
  • 참고 : https://yourjune.tistory.com/962

Raspberrypi 2021. 3. 8. 23:03

라즈베리파이 VNC 설정

VNC (Virtual Network Computing)

  • RFB 프로토콜 방식을 이용해 화면 정보를 서버에서 클라이언트로 전송한다.

    • RFB 프로토콜 (Remote Frame Buffer)

      • 프레임 버퍼 레벨에서 동작한다.

      • OS에 관계없이 모든 OS에서 프레임 단위로 통신한다.

  • SSH보다 느리지만 화면을 보고 싶을 때 유용하다.


라즈베리파이에서 vncserver 실행

  • 라즈비안에 기본적으로 vncserver 프로그램이 있기 때문에, 다음과 같이 입력해주면 바로 실행된다.

    vncserver
    VNC(R) Server 6.7.2 (r42622) ARMv6 (May 13 2020 19:34:10)
    Copyright (C) 2002-2020 RealVNC Ltd.
    RealVNC and VNC are trademarks of RealVNC Ltd and are protected by trademark
    registrations and/or pending trademark applications in the European Union,
    United States of America and other jurisdictions.
    Protected by UK patent 2481870; US patent 8760366; EU patent 2652951.
    See https://www.realvnc.com for information on VNC.
    For third party acknowledgements see:
    https://www.realvnc.com/docs/6/foss.html
    OS: Raspbian GNU/Linux 10, Linux 5.10.17, armv7l
    
    On some distributions (in particular Red Hat), you may get a better experience
    by running vncserver-virtual in conjunction with the system Xorg server, rather
    than the old version built-in to Xvnc. More desktop environments and
    applications will likely be compatible. For more information on this alternative
    implementation, please see: https://www.realvnc.com/doclink/kb-546
    
    Running applications in /etc/vnc/xstartup
    
    VNC Server catchphrase: "Flood optimal alias. Patrol Ramirez Spain."
                signature: b3-19-aa-c5-b2-82-33-bd
    
    Log file is /home/pi/.vnc/raspberrypi:1.log
    New desktop is raspberrypi:1 (192.168.0.10:1)
    • 마지막 줄의 192.168.0.10:1이 의미하는 것은 라즈베리파이 기기의 ip:디스플레이 번호 인 것 같다.
  • 옵션으로 해상도나 디스플레이 번호를 설정할 수 있다.

    vncserver -geometry 1280x1024 :3
    • -geometry 1280x1024 : 해상도를 설정한다.

    • :3 : 디스플레이 번호를 3번으로하여 서버를 연다.

  • 끄는 방법

    vncserver -kill :1
    • -kill :1 : 1번 디스플레이 서버를 끈다.

다른 기기에서 접속

  • VNC 뷰어를 설치해야 한다.

    • vncserver 명령어의 출력 결과 3번째 줄에 RealVNC 관련 언급이 있어서 해당 프로그램으로 실행해보기로 했다.

    • RealVNC 설치

  • VNC 뷰어를 실행하고, 주소를 입력하는 곳에다가 vncserver 명령어 출력 결과의 마지막 줄에 있던 ip:1을 입력한다. (위의 경우 192.168.0.10:1)

    • 포트번호처럼 :1을 썼지만, 이는 디스플레이 번호를 의미한다.

    • vnc의 기본 포트는 5900번이고, 여기에 디스플레이 번호를 더한게 포트 번호가 된다.

    • 즉 RealVNC에서 주소표시줄에 ip:1로 연결했을 경우 로그인 창에서도 나타나듯이 포트번호가 5901인 ip:5901로 연결된 것을 알 수 있다.

  • Continue를 클릭하고, 라즈베리파이를 설치했을 때 설정한 이름과 비밀번호를 입력하면 연결된다.

  • 한글 입력법은 링크 참고


라즈베리파이 부팅 시 vncserver 자동 실행

  • /etc/init.d/ 디렉토리에 스크립트를 작성해준다.

    • 서비스 간에 이름이 겹칠까봐 파일명을 myvnc로 만들었다.

    • vim으로 편집하는데, 방향키가 제대로 적용이 안되면 많이 불편하다.

    • root 권한이 아니면 저장할 수가 없어서 다음 명령어로 편집했다.

      sudo vi myvnc

      /etc/init.d/myvnc

      #!/bin/sh
      ### BEGIN INIT INFO
      # Provides:        vncserver
      # Required-Start:    networking
      # Required-Stop:    networking
      # Default-Start:    2 3 4 5
      # Default-Stop:        0 1 6
      # Short-Description:    Start/Stop vncserver
      ### END INIT INFO
      
      VNCUSER='pi'
      GEOMETRY="1280x1024"
      
      case "$1" in
        start)
        echo "Starting vncserver for $VNCUSER"
        su $VNCUSER -c "vncserver -geometry $GEOMETRY :1"
        ;;
      
        stop)
        echo "Stopping vncserver for $VNCUSER"
        su $VNCUSER -c "vncserver -kill :1"
        ;;
      
        restart)
        $0 stop
        $0 start
        ;;
      
        *)
        echo "Usage: /etc/init.d/myvnc {start | stop}"
        exit 1
        ;;
      esac
      
      exit 0
    • start, stop, restart 명령을 지원하는 스크립트이다.

    • 시작 시 1번 디스플레이 서버를 열도록 한다.

  • 시스템 시작 시 자동 실행 설정

    • 권한 변경 및 update-rc.d에 등록

      sudo chmod 755 /etc/init.d/myvnc
      sudo update-rc.d myvnc defaults
    • 나중에 해제하려면 다음 명령어를 입력한다.

      sudo update-rc.d myvnc remove
  • reboot 후 확인

    ls /etc/rc*.d | grep myvnc
    service myvnc status
    systemctl status myvnc

참고