來土炮樹莓派音響吧 — Part-II

Kenny Chen
10 min readJun 9, 2020

--

軟體設定

一、前言

這是繼上一篇介紹硬體設計之後的續篇,這裏主要是說明軟體的設定。依次說明如下部分:

  • 熒幕顯示
  • 紅外線遙控
  • 電源控制

二、準備工作

2.1 放大檔案系統

依據我個人經驗,某些版本的volumio自動分配的overlay檔案系統太小,可能會造成套件安裝失敗的情況。我的解決方法是在剛完成SD製作還沒執行第一開機之前,將sd卡插到一臺Linux電腦,然後將其卸載並擴充檔案系統(假設系統偵測到sd卡的位置是/dev/sdb):

umount /dev/sdb[0–9]

e2fsck -f /dev/sdb3

resize2fs /dev/sdb3 3G

然後將sd卡插到樹莓派開機。

2.2 啓用ssh服務

基本上Volumio是建置在Linux系統之上的,啓動ssh服務後就可以很方便的從網路登入到系統進行各樣指令操作。而啓動ssh服務的操作也非常簡單:

  1. 先將樹莓派接上鍵盤滑鼠
  2. 再接上HDMI的電腦熒幕或電視
  3. 第一次開機並完成初始化(如果之前做過就不用重做了)
  4. 等到出現文字登入畫面的時候,輸入volumio這個帳號,然後輸入密碼(也是volumio)
  5. 然後執行 sudo touch /boot/ssh (再輸入一次密碼volumio)
  6. 輸入 hostname -I (大寫的英文字母i)就可以得到當前的IP位址(左邊那個),請記錄下來
  7. 最後輸入sudo reboot 重新開機

這樣就算啓用volumio的ssh服務功能了。

2.3 設定HDMI螢幕輸出

Volumio在第一次開機初始化完成後,預設上HDMI熒幕只會有文字界面的登入畫面。如果需要圖形界面的話,則需要安裝一個Touch Display的外掛。

在開始安裝外掛之前,請先用ssh或是從console登入樹莓派輸入樹莓派然後執行:

sudo su - (輸入密碼volumio,這是切換爲root的身份)

apt-get update

apt-get install keyboard-configuration

然後選 English(US) -> OK

完成後將樹莓派接上有線網路(如果沒有就去買一個小hub或無線基地臺分享器吧!),然後用同一網路的電腦打開瀏覽器並輸入如下網址:

http://volumio.local

選擇外掛:Miscellanea -> Touch Display Plugin -> 安裝

最後切換到“已安裝外掛”的頁籤那邊將狀態設定爲”On” 這樣就可以從HDMI熒幕上看到圖像畫面了。

三、設定TFT熒幕

我的設計是要在樹莓派音響機箱前面板上面安裝一個2.2吋的TFT顯示器。我選用的是型號可以直接插在樹莓派GPIO排插使用,因此省卻了很多硬體的驅動設定。爲求省事,設定完成後將會取消原本的HDMI輸出,也就只能將畫面輸出到TFT顯示器了。

首先我用40PIN延長線將熒幕延伸到機箱前面板,同時將37PIN的排線截斷以免影響到紅外線接收。

開機後用ssh登入,建立一份檔案 /boot/userconfig.txt,其內容如下:

dtoverlay=pitft28-resistive, rotate=270 speed=48000000 fps=30framebuffer_depth=16

然後再建另外一份檔案 /etc/X11/xorg.conf.d/99-rpi.conf,其內容如下:

重新開機,然後您就會發現在原本的HDMI熒幕在文字登入畫面出現之後就沒有畫面了,取而代之的是顯示在TFT熒幕!只是因爲熒幕太小,操作起來很不方便!接着下來的修改將會以提取歌曲資訊爲主,並且不提供滑鼠的互動操作了。如果不想顯示滑鼠的指標,可以到已安裝外掛那邊找到Touch Display,從設定中將Show mouse pointer設定爲Off即可。

再來,請建立一個 /tft 的目錄並執行一些指令:

mkdir -p /tft/html/images

cd /tft

ln -s /volumio/node_modules ./

cd /tft/html

wget https://code.jquery.com/jquery-1.12.4.min.js

apt-get install -y php5

systemctl stop apache2

systemctl disable apache2

這些指令主要是安裝一些必要相依程式(主要是php5)

然後建立一份檔案 /tft/execphp.js ,其內容如下:

再來建立 /tft/tft.js ,其內容如下:

接下的要建立的檔案是 /tft/html/display.html ,其內容如下:

另一份要建立的檔案是 /tft/html/run.php,其內容如下:

最後要建的檔案是 /tft/html/display.sh ,其內容如下:

完成後別忘了執行下面命令賦予執行權限:

chmod +x /tft/html/display.sh

最後將您喜歡的背景圖片放進 /tft/html/images 目錄下,並命名爲 backgroud.jpg

接下來,我們需要建立一份檔案 /etc/systemd/system/tft.service , 其內容如下:

再來的動作,我們需要備份一下 /opt/volumiokiosk.sh :

cp /opt/volumiokiosk.sh /opt/volumiokiosk.sh.orig

然後將其內容變更如下:

當上述步驟全保完成後,將系統重新開機。如果一切順利的話,應該可以從TFT看到歌曲的資訊了:

四、紅外線遙控器

這個需要特別留意IR接收器是透過那個GIOP腳位將訊號傳入樹莓派的,在我的設計裏是使用GPIO-26這個腳位,因此我必須要修改樹莓派的檔案 /boot/userconfig.txt ,在裏面增加一行:

dtoverlay=gpio-ir,gpio_pin=26

然後重新開機。

接下來就是安裝外掛:

Accessories -> IR Remote Controller

安裝完成後轉到設定中挑選您的遙控器型號。如果沒有列在其中,那我們就需要自己進行錄製了。

不過,我發現比較新的volumio由於核心模組的變更,會導致錄製紅外線按鈕的irrecord工具無法正常工作。我的解決方法是下載一個較舊的volumio(例如volumio-2.411)專門用來錄製紅外線按,然後將錄製好的設定檔轉移過來使用。

錄製的操作如下,先將IR Remote Contoller的外掛暫停,然後登入進樹莓派,並完成如下操作:

1. 執行命令

irrecord -f -n -d /dev/lirc0 lircd.conf

2. 按 Enter 兩次

3. 隨機亂按按鈕,直到小數點填滿一整行(有時需要兩行)

4. 看到如下提示時

Please enter the name for the next button (press <ENTER> to finish recording)

先輸入按鍵名稱(如 KEY_POWER)再按Enter,再按下對應的遙控器按鍵

5. 當所需要的按鍵全部錄好之後,再按一次Enter就可以結束。然後就可以從當前的目錄中得到一份lircd.conf的按鍵編碼檔。

6. 接着在如下目錄

/data/plugins/accessory/ir_controller/configurations/

建立一個空白目錄,名稱爲遙控器型號,例如:KKTV_KW-Y0035

7. 將產生的按鍵編碼檔(lircd.conf)複製到該目錄中(如果是用其他舊版本volumio錄製的話,需要想些辦法將檔案傳過來)

8. 此外,在該目錄下還需要編輯一份檔案,名爲:lircrc

其內容類似如下:

begin    prog = irexec    button = KEY_OK    config = /usr/local/bin/volumio toggleendbegin    prog = irexec    button = KEY_NEXT    config = /usr/local/bin/volumio nextendbegin    prog = irexec    button = KEY_UP    config = /usr/local/bin/volumio volume plusend

這裏的格式很簡單,每一個按鍵動作都是從beginend之間定義,botton就是當初錄製時輸入的按鍵名稱;config則是volumio的操作(詳細的操作指令可以輸入volumio --help來瞭解)。我們必須將所有用到的按鍵全部定義完成。

要知道的是:config指定的操作除了volumio命令之外,可以是任何可以執行的命令,例如我們自己寫的操作腳本,例如:

begin    prog = irexec    button = KEY_POWER    config = /home/volumio/commands/shutdown.shend

然後我編輯/home/volumio/commands/shutdown.sh的內容如下:

並賦予執行的權限:

chmod +x /home/volumio/commands/shutdown.sh

如此的話,當我按下遙控器的電源按鍵的時候,樹莓派就會執行關機的動作了。

五、電源開關

這裏的設計主要是透過ARDUINO控制兩顆RELAY以及樹莓派的GPIO來控制,同時支援紅外線遙控與按鈕開關。

先從ARDUINO開始吧!

首先,我們要撰寫一份 Pi_Power.ino 的程式碼,其內容如下:

然後用ARDUINO開發工具抄寫進ARDUINO裏面即可(這裏就不再介紹如何操作了)。我用的工具如下:

需要注意的是:上面的程式碼裏面有一個紅外線電源按鈕的編碼,需要用另外一個程式(IR_Decodr.ino)來錄取。範例如下:

基本上,ARDUINO負責的主要爲兩個部分:

  • 從待機狀態進行開機
  • 當樹莓派關機後切斷樹莓派的電源

至於關機的部分,除了按著按鈕超過三秒會強行斷電外,其他就要靠樹莓派了。

首先,我們必須再次修改 /boot/userconfig.txt ,再插入一行:

gpio=14=op,dh

這行的作用是:

  • 樹莓派開機時將GIPO14設定爲高位訊號傳送到ARDUINO的A0腳位
  • 而在關機的時候恢復到低位

如果開機的時候沒有這行設定的話,ARDUINO會在2秒之後切斷樹莓派電源,這也是ARDUINO在樹莓派關機時候能斷電的原因。

再下來,我們需要建立一個 /scripts 的目錄,裏面建一份當案 /scripts/power-button.sh ,內容如下:

然後賦予其執行權限:

chmod +x /scripts/power-button.sh

這隻腳本的功能是從GPIO22接收按鈕開關的訊號,如果有偵測到訊號就進入關機程序。別忘了,我們前面設定紅外線遙控的時候已經完成紅外線遙控的關機程序了哦。因此我們關機部分的程式算是完成了。

最後,我們編輯 /etc/rc.local 這份檔案,在最後的 exit 0 前面加入一行:

/scripts/power-button.sh &>/dev/null &exit 0

並確保這份檔案有執行權限:

chmod +x /etc/rc.local

如此,我們就可以在樹莓派開機的時候自動載入按鈕的偵測程式了。

六、後序

目前的製作只能是個原始模型,有空有能力的話,我希望還能多增加些功能或是改善某些問題。

本篇提到的程式碼,我公開在GitHub:

https://github.com/kennychennetman/raspberryPi_Audio_DIY

方便大家讀取與下載。也歡迎有興趣的朋友協助改良!

— — END — -

2020/06/09

--

--