Scrolling Game Title for Retropie v4.0.2 using 16x2 CLCD on RAS Console-Pi



  • 안녕하세요. 산딸기마을의 서영민입니다.

    Retropie(레트로파이)에 16x2 CLCD를 연결해서 날짜, IP, CPU 온도-클럭, 에뮬 정보 등을 출력하기 위한 코드를 개발하고 있습니다.

    산딸기마을의 @임근주 님과 논의한 여러 가지 아이디어 중 CLCD에 게임 정보를 보여주면 좋겠다는 의견이 나와서 기억해두었다가, 이번에 라즈콘솔파이 제작을 진행하면서 본격적으로 작업을 시작했습니다.

    CLCD에 출력하는 정보는 다음과 같습니다.

    1. 현재 날짜와 시간, IP 주소
    2. CPU 온도와 스피드(클럭)
    3. 에뮬레이터, 게임(롬) 이름

    1번과 2번은 이미 구현한 상태라서 이번에 3번 기능을 추가하는 작업을 시작합니다.

    게임 정보를 어떻게 받아올까 고심하다가 운좋게 레트로파이 포럼에서 논의하던 글을 발견합니다.

    그 후로 레트로파이 개발자가 Retropie v4.0.2에 system, emulator, rom 정보를 쉽게 사용할 수 있도록 runcommand.sh에 해당 내용을 개발했다는 글을 찾았습니다.

    그래서 저는 runcommand-onstart(게임 전에 실행) and runcommand-onend(게임 종료 후 실행) 스크립트를 이용해서 에뮬 정보를 저장한 후 파이썬으로 CLCD에 정보를 출력하는 retropie_clcd.py를 개발했습니다.


    *설치방법

    1. i2c 설치하기
    2. runcommand-onstart 작성
    3. runcommand-onend 작성
    4. retropie_clcd.py 실행
    5. systemd로 clcd 서비스 만들기

    1. i2c 설치하기

    http://www.raspberrypi-spy.co.uk/2014/11/enabling-the-i2c-interface-on-the-raspberry-pi/

    아래와 같이 명령어를 실행합니다.

    sudo apt-get update
    
    sudo apt-get -y install python-smbus i2c-tools
    
    echo "i2c-bcm2708" >> /etc/modules
    
    echo "i2c-dev" >> /etc/modules
    
    echo "dtparam=i2c_arm=on" >> /boot/config.txt 
    
    sudo reboot
    

    sudo i2cdetect -y 1 명령어를 실행해서 i2c가 사용하는 주소를 찾습니다.

    pi@retropie:~ $ sudo i2cdetect -y 1
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00:          -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: -- -- -- -- -- -- -- --
    

    만약 27번이 아니라면 I2C_LCD_driver.py에서 0x27을 자신의 주소로 바꿉니다.

    # LCD Address
    ADDRESS = 0x27
    

    2. runcommand-onstart 스크립트 작성 방법

    스크립트 제작에 큰 도움을 주신 제로쿨님께 감사드립니다.

    sudo nano /opt/retropie/configs/all/runcommand-onstart.sh
    
    #!/usr/bin/env bash
    
    # get the system name
    system=$1
    
    # get the emulator name
    emul=$2
    
    # get the full path filename of the ROM
    rom=$3
    
    # rom_bn receives $rom excluding everything from the first char to the last slash '/'
    rom_bn="${rom##*/}"
    
    # rom_bn receives $rom_bn excluding everything from the last char to the first dot '.'
    #rom_bn="${rom_bn%.*}"
    
    GAMELIST1="/home/pi/RetroPie/roms/${system}/gamelist.xml"
    GAMELIST2="/home/pi/.emulationstation/gamelists/${system}/gamelist.xml"
    
    if [ -f ${GAMELIST1} ]
    then
    GAMELIST=${GAMELIST1}
    else
    GAMELIST=${GAMELIST2}
    fi
    
    title=`grep -A1 "${rom_bn}" ${GAMELIST} | awk '{getline;print}' | awk 'BEGIN {FS="<name>"} {print $2}' | awk 'BEGIN {FS="</name>"} {print $1}'`
    
    echo "$system" >&2
    echo "$title" >&2
    #echo "$rom_bn" >&2
    
    

    3. runcommand-onend 스크립트 작성 방법

    sudo nano /opt/retropie/configs/all/runcommand-onend.sh
    
    #!/usr/bin/env bash
    
    sed '1,2d' /dev/shm/runcommand.log > /dev/shm/runcommand.log
    
    echo "notice" >&2
    echo "PLZ GO TO SLEEP!" >&2
    
    

    4. retropie_clcd.py 실행하기

    python retropie_clcd.py
    

    5. systemd 서비스 만들기

    부팅할 때 retropie_clcd.py를 실행하는 clcd 서비스를 작성합니다.

    sudo nano /lib/systemd/system/clcd.service
    
    [Unit]
    Description=Retropie 16x2 CLCD Service
    After=multi-user.target
    
    [Service]
    Type=idle
    ExecStart=/usr/bin/python /home/pi/code/retropie_clcd.py
    
    [Install]
    WantedBy=multi-user.target
    
    sudo chmod 644 /lib/systemd/system/clcd.service
    sudo systemctl daemon-reload
    sudo systemctl start clcd.service
    sudo systemctl enable clcd.service
    

    사용하시다가 CLCD가 이상해지면 가끔 아래 명령어를 실행하세요.
    clcd 서비스를 재시작합니다.

    sudo systemctl restart clcd
    

    1_1476765694202_KakaoTalk_20161010_235759403.jpg

    0_1476765694201_KakaoTalk_20161010_223426109.jpg

    2_1476765694203_KakaoTalk_20161011_000540631.jpg

    1_1476767096909_KakaoTalk_20161010_230713221.jpg

    0_1476767096908_KakaoTalk_20161010_223930843.jpg

    3_1476765694203_KakaoTalk_20161011_102701876.jpg

    to be continued…

    앞으로 남은 일

    • OLED lcdClear 문제 처리하기 완료
    • 모니터에는 한글 게임 목록을 출력하고 CLCD에는 영어 게임 이름 출력하기 완료
    • 에뮬레이터 이름 등록하기
    • 베리케이드에서 게임 이름 지원


  • [추가:16-10-19]
    파이게임카페의 제로쿨님이 모니터에는 한글 게임 목록을 출력하고 CLCD에는 영어 게임 이름 출력하는 스크립트를 작성해서 숙제 하나를 해결했습니다.
    스크립트 제작에 도움을 주신 제로쿨님께 다시 한 번 감사드립니다.

    작동 원리는 gamelist_en.xml을 참조하여 영문 게임명을 파싱하여 CLCD에 출력하는 방법을 사용했습니다.

    *설치 방법

    1. 레트로파이의 Scraper 기능을 이용하여 영문 gamelist.xml 만들고, gamelist_en.xml로 이름 변경
    2. 한글 작업한 gamelist.xml을 각 롬폴더에 설치합니다.
    3. runcommand-onstart 스크립트 수정

    runcommand-onstart 스크립트 작성 방법

    sudo nano /opt/retropie/configs/all/runcommand-onstart.sh
    

    기존 내용을 아래와 같이 바꿉니다.

    # For English User
    # Display Game name to EmulationStation and CLCD from same gamelist.xml
    #GAMELIST1="/home/pi/RetroPie/roms/${system}/gamelist.xml"
    #GAMELIST2="/home/pi/.emulationstation/gamelists/${system}/gamelist.xml"
    
    # For 2Byte Language User(Korean, Japanese, etc..)
    # Display Game name to EmulationStation from gamelist.xml(Korean Game name)
    # Display Game name to CLCD from gamelist_en.xml(English Game name)
    GAMELIST1="/home/pi/RetroPie/roms/${system}/gamelist_en.xml"
    GAMELIST2="/home/pi/.emulationstation/gamelists/${system}/gamelist_en.xml"
    
    

    여기까지 진행하신 후 재부팅하시거나 clcd 서비스를 재시작하시면 끝.

    sudo systemctl restart clcd
    

    끝으로 테스트하시고 삽질해주신 제로쿨님, 임근주님, 대왕별님 감사합니다.

    1_1476841491401_clcd02.JPG
    0_1476841491397_clcd01.png



  • [추가:16-11-9]
    초보자가 쉽게 사용할 수 있도록 소프트웨어 설치를 간편하게 바꿨습니다.

    RetroPie v4.0.2 이상 버전에 16x2 I2C CLCD를 자동으로 설치하는 쉘스크립트를 만들었습니다.

    아래 그림을 참고해서 CLCD와 라즈베리파이에 I2C를 연결하고, 파이를 부팅한 후 10.CLCD.sh를 실행하시면 자동으로 소프트웨어를 설치합니다.

    1. 하드웨어 설치 방법

    0_1478657311666_I2C_GPIO.png

    2. 소프트웨어 설치 방법

    cd /home/pi
    git clone https://github.com/zzeromin/RetroPie-Clcd.git
    cd /home/pi/RetroPie-Clcd/
    chmod 755 10.CLCD.sh
    sudo ./10.CLCD.sh
    

답변을 위해 로그인하기