0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GeeekPi X930 HiFi DAC HAT拡張ボードのスクリプト修正やってみた

Posted at

1.経緯

以前からRaspberryPI版のVolumioを使用していたが、電源の管理が面倒だと思っていたところ、電源管理機能のついたDAC基板(GeeekPi X930 HiFi DAC HAT拡張ボード)がAmazonで安くなっていた。
つられて購入したが、メーカサイトの指示通りにスクリプトをインストールしても機能しなかった。
お勉強も兼ねてChatGPTにいろいろ聞きながらスクリプト修正してみた。

2.エラーの確認

Volumio3のデバック画面(Volumioテストプレーヤー:PCブラウザから「http://[volumio(環境に合わせる)].local/DEV/」で確認すると以下のエラーを出していることが判明。
・「"13" > /sys/class/gpio/export;」で「write error: Invalid argument」
・「cat: /sys/class/gpio/gpio5/value」で「そのようなファイルまたはディレクトリはありません」
どうやら、GPIOの入出力で失敗しているらしい。

3.対策確認

とりあえずスクリプトがダメなことは判明した。
メーカのインストール手順からスクリプトファイルをダウンロードしたが、RaspberryPIのVolumioOSに使われるスクリプトはさっぱりわからないので、ChatGPTさんにエラー内容やスクリプトをファイルごと丸投げして確認してもらった。
「Raspberry Pi OS の Bullseye 以降では /sys/class/gpio/export が非推奨。」「Raspberry Pi OS Bullseye(2021年以降のバージョン)では、sysfs による GPIO 制御は無効。」等の情報をゲット。
おそらく原因はこれで間違いない。(安売りのわけも理解した)
その他にもいろいろとご指摘をいただいたので、それらも含めて修正した。

4.スクリプトの編集

CahtGPTさんといろいろやり取りして、追加パッケージのインストールとスクリプトを修正した。
・libgpiod パッケージをインストール

sshでlibgpioのインストール
sudo apt update
sudo apt install gpiod

・/sys/class/gpio/export が非推奨 ー> 解決策: 代わりに libgpiod を使う
・sysfs による GPIO 制御は無効 ー> 解決策: 代わりに libgpiod を使う
・その他、ChatGPTさんが指摘してくれた元スクリプトの甘いところを修正

x930_repa.sh
# ダウンロードした「x930.sh」を修正(流用は自己責任でお願いします。)
#!/bin/bash

sudo sed -e '/shutdown/ s/^#*/#/' -i /etc/rc.local

echo '#!/bin/bash

SHUTDOWN=5
REBOOTPULSEMINIMUM=200
REBOOTPULSEMAXIMUM=600

BOOT=12
gpioset --mode=time --background gpiochip0 $BOOT=1

echo "X930 Shutting down..."

while true; do
  shutdownSignal=$(gpioget gpiochip0 $SHUTDOWN || echo 0)
  if [ "$shutdownSignal" -eq 0 ]; then
    /bin/sleep 0.2
  else  
    pulseStart=$(date +%s%N | cut -b1-13)
    while [ "$shutdownSignal" -eq 1 ]; do
      /bin/sleep 0.02
      if [ $(($(date +%s%N | cut -b1-13)-$pulseStart)) -gt $REBOOTPULSEMAXIMUM ]; then
        echo "X930 Shutting down, halting RPi..."
        sudo poweroff
        exit
      fi
      shutdownSignal=$(gpioget gpiochip0 $SHUTDOWN || echo 0)
    done
    if [ $(($(date +%s%N | cut -b1-13)-$pulseStart)) -gt $REBOOTPULSEMINIMUM ]; then 
      echo "X930 Rebooting, recycling RPi..."
      sudo reboot
      exit
    fi
  fi
done' > /etc/x930pwr.sh
sudo chmod +x /etc/x930pwr.sh
sudo sed -i '$ i /etc/x930pwr.sh &' /etc/rc.local 


#X930 full shutdown through Software
#!/bin/bash

sudo sed -e '/button/ s/^#*/#/' -i /etc/rc.local

echo '#!/bin/bash

BUTTON=13

gpioset --mode=time --background gpiochip0 $BUTTON=1

SLEEP=${1:-4}

re="^[0-9\.]+$"
if ! [[ $SLEEP =~ $re ]] ; then
   echo "error: sleep time not a number" >&2; exit 1
fi

echo "X930 Shutting down..."
/bin/sleep $SLEEP

gpioset --mode=time --background gpiochip0 $BUTTON=0
' > /usr/local/bin/x930softsd.sh
sudo chmod +x /usr/local/bin/x930softsd.sh

5.その他

私の場合は、すでにスクリプトをインストールしてしまっていたので、ロールバックとかVolumioの再インストールとかするのは面倒なのと修正内容が簡単だったので、以下のインストール済みのスクリプトを直に修正して対策した。

・/etc/x930pwr.sh
・/usr/local/bin/x930softsd.sh

RaspberryPIのスクリプト編集したことがなかったので勉強になりました。(初めてsshでnanoを使用)
シャットダウンとリブートのボタンを別に追加するとか、もっと使いやすくできそう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?