이전에 scrcpy를 써서 딜레이가 거의 없는 안드로이드 화면 미러링에 관하여 설명한 적이 있습니다.
https://moordev.tistory.com/323

그런데 PC야 원래 성능이 좋으니까 사실 wifi를 사용한 방법으로도 충분한 경우가 많습니다. 하지만 이보다 성능이 떨어지는 SBC(Single Board Computer)라면 어떨까요? 과연 이걸로도 scrcpy로 안드로이드 스마트폰 화면을 미러링 할 수있을까요?

그래서 한번 SBC의 가장 대표적인 보드인 라즈베리파이를 이용해봤습니다.

이번에 사용할 보드인 라즈베리파이3 B+ (쓴지 몇년 되었습니다.)와 저렴한 Waveshare사의 3.5inch LCD (A) 입니다.LCD는 그냥 라즈베리파이의 GPIO에 맞게 끼우면 바로 작동 됩니다.

물론 작동 된다는 것이지 바로 사용이 가능한 것은 아닙니다. 몇가지 설치절차가 필요합니다. 지금은 그냥 하얀 화면만 나올 뿐입니다.

우선 RaspberryPi OS가 설치된 SDCARD가 필요합니다. 이건 워낙 여기저기에서 방법을 잘 알려주고 있고 라즈베리파이를 본격적으로 쓰시는 분들이라면 이미 다들 알고 계시겠지요.

그리고 LCD에 바로 화면이 뜨지 않기 때문에 SSH를 활성화 하거나 HDMI 모니터와 USB키보드를 준비해야합니다. 저는 그냥 SSH를 활성화 한다음 유선랜을 공유기에 꽂아서 라즈베리파이에 접속했습니다.

SSH를 활성화 하는 방법은 간단합니다. RaspberryPi OS가 설치된 SDCARD를 PC에 꽂으면 boot라고 써있는 디스크가 보입니다. 여기에 SSH 라는 이름을 가진 파일을 하나 만들면 바로 SSH가 활성화 됩니다.

그 다음 SSH로 라즈베리파이에 접속합니다.

ssh pi@192.168.0.xx (192.168.0.xx는 라즈베리파이의 IP주소입니다. 공유기에 접속해서 확인 할 수있습니다.)
yes를 친다음 패스워드는 raspberry

기본 패스워드이니 sudo raspi-config 명령을 사용해서 이것저것 설정을 하고 이제 본격적으로 LCD에 화면을 띄워봅시다.

라즈베리파이를 설치하고 가장 먼저 해야할 것은 패키지 업데이트이고 그 다음이 바로 이 설정이다.

저는 waveshare사의 LCD를 사용했지만 Adafruit사의 것을 사용하시거나 기타 다른 업체를 이용하신다면 또 달라질 수 있습니다.

우선 해야할 것은 매뉴얼을 읽는 것입니다.
https://www.waveshare.com/wiki/3.5inch_RPi_LCD_(A)

3.5inch RPi LCD (A) - Waveshare Wiki

Introduction 3.5 inch Touch Screen TFT LCD Designed for Raspberry Pi Getting Started Hardware Connection There are 40 pins on Raspberry Pi but only 26 pins on the LCD, so you should pay attention to connecting the pins to your Pi accordingly. Install the t

www.waveshare.com

여기 보면 드라이버 설치방법이 써 있습니다. 드라이버를 이미 git을 통해 제공하고 있군요.
git clone https://github.com/waveshare/LCD-show.git

waveshare/LCD-show

Contribute to waveshare/LCD-show development by creating an account on GitHub.

github.com

cd LCD-show

이제 여기서 자신의 LCD에 맞는 것을 찾습니다. 저는 3.5인치 LCD A버전이므로 LCD-35입니다. 만약 LCD B버전이거나 다른 크기의 LCD라면 다른 것을 찾아야 합니다. 역시 매뉴얼을 보면 자세히 나와있으니 이를 이용하면 됩니다.

우선 실행옵션을 줘야하므로
sudo chmod +x LCD35-show
./LCD35-show

이러면 이제 필요한 소스를 다운받고 빌드를 해서 드라이버를 설치합니다. 그리고 자동으로 라즈베리파이가 부팅되는데 LCD에 X가 짠하고 뜹니다! 그리고 터치도 되므로 터치펜이나 손가락으로 꾹꾹 누르면 진행이 됩니다.

그냥 한번 화면을 90도로 돌려보았다. 그러니까 터치 좌표가 꼬인다...

이제 라즈베리파이 화면을 띄우는데에 성공했으니 한번 scrcpy를 빌드해봅시다.

우선 이 링크의 것을 참조했습니다. https://gist.github.com/RubenNL/e259f145371d2c16a3932fa39aa9a775

Install scrpy

GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

그냥 scrcpy의 가이드대로 빌드하면 Android SDK가 필요한 경우가 있는데 Android SDK는 ARM위에서 돌아가지 않습니다. 따라서 미리 빌드된 것을 사용해야합니다.

우선 라즈베리파이에 접속을 한 후에

sudo apt install git wget meson libavformat-dev libsdl2-dev adb

위 명령으로 필요한 것을 설치합니다. 보통 libsdl2와 libavformat, adb만 설치하고 나머지는 이미 있을 가능성이 높습니다.

그리고 필요한 것을 다운로드 받습니다.
2020년 현재 최신 버전은 1.16버전이므로 이것을 사용합니다.

wget https://github.com/Genymobile/scrcpy/archive/v1.16.tar.gz
tar -zxvf v1.16.tar.gz
cd scrcpy-1.16
wget https://github.com/Genymobile/scrcpy/releases/download/v1.16/scrcpy-server-v1.16
meson x --buildtype release --strip -Db_lto=true -Dprebuilt_server=scrcpy-server-v1.16

이제 빌드를 위한 준비가 시작됩니다. 그리고 준비가 완료되면
ninja -Cx

이제 빌드가 될텐데 오류가 난다면 위의 사전설치 패키지를 확인해주시기 바랍니다.
빌드가 끝나면 인스톨

sudo ninja -Cx install

이제 안드로이드 스마트폰과 라즈베리파이를 USB로 연결하고 라즈베리파이에서 scrcpy 명령을 내리면 스마트폰 화면이 창으로 뜰겁니다. 대신 화면도 작고 창크기도 작은데다가 라즈베리파이의 성능 문제도 있다보니 매우매우 느립니다.

그리고 저는 라즈베리파이를 스마트폰 화면 미러링 전용으로 쓸 생각이라 이것을 scrcpy를 서비스로 등록해서 사용할 생각입니다. USB에 디버깅 옵션이 켜진 스마트폰이 연결되면 바로 화면을 띄우는 것이지요.

다시 라즈베리파이에서 터미널을 엽시다.
sudo nano /etc/systemd/system/scrcpy.service


이제 새로운 텍스트 에디터가 뜰텐데 다음과 같이 입력합니다.

더보기

[Unit]

Description=Start SCRCPY Android Screen

[Service]

Type=simple

User=pi

ExecStart=/usr/local/bin/scrcpy -b2M -m480 --max-fps 10 -f --rotation 1 -n

#Restart=always

Restart=on-failure

[Install]

WantedBy=graphical.target

#WantedBy=multi-user.target

위 명령 중에서 -b2M은 영상 비트레이트를 2M까지만 -m480은 최대 480p --max-fps는 10프레임 이하로 --rotation 1은 화면을 90도 돌리라는 의미입니다. 저는 주로 세로화면을 쓰기 때문에 이렇게 했습니다.

저장을 위해 Ctrl+O 그리고 엔터
이제 파일을 저장했으면

sudo systemctl daemon-reload
sudo systemctl enable scrcpy.service

위 명령어로 서비스에 등록합시다. 이제 USB로 스마트폰이 연결될때까지 라즈베리파이는 계속 연결을 시도할 것입니다.


그냥저냥 쓸 만한 속도가 나오네요. 제 보드는 라즈베리파이3니까 라즈베리파이4 이상이라면 fps를 높여서 더 빠르고 완벽한 속도를 보일 수 있을겁니다.

이제 필요하면 https://gitlab.com/larsfp/rpi-readonly

Projects · Ways / rpi-readonly

Make raspberry pi raspbian file system read-only

gitlab.com

여기의 것을 사용해서 SDCARD에 쓰기를 못하게 만들 수도 있습니다. 이러면 갑자기 Raspberrypi가 멈춰서 다시 시작해야 하는 일이 생기더라도 SDCARD를 보호 할 수 있습니다.

,