2022年2月27日日曜日

pCP Mobile:Raspberry Pi Zero W + piCorePlayer = Digital Audio Player(DAP)

piCorePlayerでmobileできた♪

2021年1月3日に思い立ち1年少々かかってやっとできた。
PiZeroWの起動に少々時間がかかるけど。。。
起動してしまえば普通のDAPと変わらないよ♪
RaspberryPiZeroWとモバイルバッテリー

通勤時等の外出時にはスマホにテザリングしてDAPとして使用し、
Squeezerで操作
LMSで操作
Bluetoothのイヤホンで聴きます♪
Bluetoothイヤホンは無いので
レシーバーとポタアンを介して有線イヤホンで聴く。

コンテンツの更新は自宅WiFiに接続して行う。
ファイル共有で操作

システムの調整は必要に応じてpiCoreplayerとLogitech Media Server(LMS)で行います。
piCorePlayerの設定画面
LMSの設定画面

外出時も帰宅時も起動すれば自動的にネットに接続できるので
なかなか良い感じで使えます。
ということで完成(^^)/~~

後は使いながら問題あれば解決しよっと。

2022/4/4:追記
テザリング時のIPアドレスは固定できないことがわかった。
Network Utilityで調べてから接続することになる。。。よ。

2022年2月24日木曜日

pCP Mobile:IPアドレスの固定もsqueezeliteの起動もできた!!

squeezeliteをちゃんと動かすぞ!

折角IPアドレスを固定できたのに、squeezeliteが起動しなくなるなんて。。。
どうにかしなければ。

1.現象はこんな感じ
piCorePlayerのMain画面では正常に起動している。
Squeezelite is runningは✓だ

LMSの画面は真っ白。。。「プレーヤーが見つかりません。」ってさ。。。
Chooze PlayerにpCP_portableが表示されるはず(T_T)

どうやら、起動に失敗しているのではなく、
LMSに接続できてないようだ。

2.まずは、起動ログの確認
tc@pCP:~$ cat /var/log/pcp_boot.log 
Starting piCorePlayer v7.0.0 startup...
Starting rngd using /dev/hwrng... Done.
Checking for boot files on mmcblk0p1...
  Trying to mount /dev/mmcblk0p1.
  ssh file found on mmcblk0p1.
  newpcp.cfg not found on mmcblk0p1.
Setting default piCorePlayer repository...
Generating sound card drop-down list...
Starting bluetooth...
Starting wifi...
Starting WiFi on wlan0...
udhcpc: started, v1.31.1
udhcpc: sending discover
udhcpc: sending discover
sh: =: argument expected
udhcpc: sending select for 192.168.3.214
udhcpc: lease of 192.168.3.214 obtained, lease time 7200
deleting routers
route: SIOCDELRT: No such process
adding dns 192.168.3.1
adding dns 192.168.3.1
 Done.
Pei's WiFi setting Start.
Pei's WiFi setting Done.
Loading configuration file... Done.
Loading pcp-lms-functions...Starting pCP BT Speaker Daemon
 Done.
Waiting for soundcard sndrpirpidac to populate. Done (1).
Waiting for network. Done (1).
Starting Openssh server... Done.
Mounting USB Drives...
Mounting USB Drive: 12ebxxxx-xxxx-xxxx-xxxx-xxxx1f1a6b7d...
mount: /dev/mmcblk0p3 mounted on /mnt/music.
Disk Mounted at /mnt/music.
 Done.
Waiting for valid date before starting LMS ..............................Date is not set. Timeout
Starting LMS, this can take some time...[70-01-01 09:02:15.0116] main::init (388) Starting Logitech Media Server (v8.1.0, 1608700893, Wed Dec 23 12:16:44 CET 2020) perl 5.032000 - arm-linux-gnueabihf-thread-multi-64int

Slimserver Running pid:10240
 Done.
Waiting for LMS to initiate...... Done (6).
Starting Squeezelite and/or Shairport-sync...
[ INFO ] Starting Squeezelite player: Squeezelite...
 Done.
Powering off HDMI.../usr/local/etc/init.d/pcp_startup.sh: line 799: pcp_rpi_is_rpi4: not found
sh: 1: unknown operand
 Done.
Starting Samba Server...
Starting SAMBA...
 Done.
Starting httpd web server... Done.
Starting to Advertise pcp.local... Done.
Starting user commands... Done.
Setting CPU scaling governor to ondemand... Done.
Creating static footer...Waiting to connect to bluetoothd...[bluetooth]# Agent registered
[bluetooth]# connect 3F:xx:xx:xx:xx:F5 
Attempting to connect to 3F:xx:xx:xx:xx:F5
[bluetooth]# quit
[bluetooth]#  Done.

Finished piCorePlayer v7.0.0 startup.

To setup piCorePlayer, use the web interface via a browser:
 - http://192.168.3.97

Press [Enter] to access console.

In the background, ntpd is syncing time between piCorePlayer and the internet.
A large offset between 1970 and now is normal.

IPアドレスの固定もsqueezeliteの起動もエラーなく実行できているようだ。
(一箇所スクリプトがエラーになってるな。。。)

3.squeezeliteの起動スクリプトを確認してみる
pcp_startup.shのsqueezeliteの起動部分を見てみる

前略

#----------------------------------------------------------------------------------------
# Start squeezelite. If running LMS locally, start squeezelite later.
#----------------------------------------------------------------------------------------
if [ "$LMSERVER" != "yes" ]; then
if [ "$SQUEEZELITE" = "yes" ]; then
echo "${BLUE}Starting Squeezelite and/or Shairport-sync...${YELLOW}"
pcp_squeezelite_start "nohtml"
echo " ${GREEN}Done.${NORMAL}"
fi
fi

LMSがlocalで動かすときはsqueezeliteの起動は後回しだよってことなので。。。
更に下を見てみる。

中略

#----------------------------------------------------------------------------------------
# Start LMS.
#----------------------------------------------------------------------------------------
if [ "$LMSERVER" = "yes" ]; then
if [ "$LMSDATA" = "default" -o "$LMSMOUNTFAIL" = "0" ]; then
DD=0
echo -n "${BLUE}Waiting for valid date before starting LMS ${NORMAL}"
while [ $(date +"%Y") -lt 2020 -a $DD -lt 30 ]; do
echo -n "."
sleep 1
DD=$((DD+1))
done
[ $DD -lt 30 ] && echo " ${GREEN}Done.${NORMAL}" || echo "${RED}Date is not set. Timeout${NORMAL}"

echo -n "${BLUE}Starting LMS, this can take some time...${NORMAL}"
sudo /usr/local/etc/init.d/slimserver start
echo " ${GREEN}Done.${NORMAL}"
if [ "$SQUEEZELITE" = "yes" ]; then
# Wait for server to be responsive.
echo -n "${YELLOW}Waiting for LMS to initiate."
# Check response from port 3483 for Player Connects.
CNT=1
CHK=""
while [ "$CHK" != "E" ]
do
CHK=$(echo "e" | nc -w 1 -u 127.0.0.1 3483)
if [ $((CNT++)) -gt 20 ]; then
echo "${RED} LMS not running ($CNT).${NORMAL}"
break
else
echo -n "."
[ "$CHK" != "E" ] && sleep 1
fi
done
echo " ${GREEN}Done ($CNT).${NORMAL}"
echo "${BLUE}Starting Squeezelite and/or Shairport-sync...${YELLOW}"
pcp_squeezelite_start "nohtml"
echo " ${GREEN}Done.${NORMAL}"
fi
else
echo "${RED}LMS data disk failed mount, LMS and squeezelite will not start.${NORMAL}"
fi
fi

後略

squeezeliteはpcp_squeezelite_startで起動されるようだが。。。
見つけられなかった(T_T)
ただ、このスクリプトの中で「127.0.0.1 3483」なるループバックアドレスが使用されている。IPアドレスを変更したらplayerが見つけられなくなったようなので、squeezeliteに適切なアドレスを指定してやればOKなのでは???
なんて思ったよ。

4.sqeezeliteにIPアドレスを指定する箇所があるか??
piCorePlayerの「Squeezelite Settings」のパラメタを確認してみる。
LMS IPってのがある

「LMS IP」があやしい。それ以外は無さそうだ。
特別なLMSに接続する場合に指定するよ。
サーバアドレスと標準ポート3483を指定するみたい。

そして、LSMを有効にしている場合でこのLMSから聞く場合は
127.0.0.1:3483
なるループバックアドレスを使用してね。だってさ。

ということで素直に設定してみた。

5.動いた!!
「Squeezelite Settings」を保存するとsqueezeliteが再起動する。
すると。。。
piCorePlayerの画面上部に「pCP_portable」タブが表示され、
タイトルの上のタブが出た

LMS画面のプレーヤーに「pPC_portable」が表示され楽曲も表示されたよ!!
いつもの画面だ

バッチリ~(^^)v
原因は squeezelite起動時にLMSを見つけられなかったから みたい。

ついでにテザリングでも確認してみよう。
pCP_portableタブが表示された
SqueezerでもOKOK

固定IPアドレスでバッチリ動いた!!
やっとできたぞ~(^^)♪

2022年2月20日日曜日

pCP Mobile:自宅WiFiとスマホテザリングのIPアドレスを固定できた!(スマホはダメ)

接続しているSSIDでIPアドレスを変更したい(pcp_startup.sh編)

wlan0.shが起動するときには未だWiFiが接続完了になってないようだ。
ならば、その後に設定すれば良いじゃん!
と思いついた。

piCorePlayerがブート時にキックするコマンドは
/opt/bootlocal.shからキックされる/usr/local/etc/init.d/pcp_startup.shのようだ。
これを変更してみる。

1.pcp_startup.shの確認
早速、/usr/local/etc/init.d/pcp_startup.shの中身を確認してみる。

tc@pCP:/usr/local/etc/init.d$ cat pcp_startup.sh 
#!/bin/sh
# put other system startup commands here

GREEN="$(echo -e '\033[1;32m')"

echo
echo "${GREEN}Running bootlocal.sh..."
#pCPstart------
/usr/local/etc/init.d/pcp_startup.sh 2>&1 | tee -a /var/log/pcp_boot.log

中略

#----------------------------------------------------------------------------------------
# Start wifi.
#----------------------------------------------------------------------------------------
WPACONFIGFILE=$WPASUPPLICANTCONF

if [ $WPACONFIGFOUND -eq 1 ]; then
WIFI="on"
pcp_save_to_config
dos2unix -u $WPACONFIGFILE
if [ $(pcp_wifi_maintained_by_user) -ne 0 ]; then
pcp_wifi_read_wpa_supplicant "colour"
pcp_wifi_write_wpa_supplicant "colour"
fi
pcp_wifi_update_wifi_onbootlst
pcp_backup text
echo "${RED}Reboot needed to enable wifi...${NORMAL}"
sleep 3
sudo reboot
exit 0
fi

if [ "$WIFI" = "on" ]; then
echo -n "${BLUE}"
/usr/local/etc/init.d/wifi wlan0 start
echo "Starting WiFi... ${GREEN}Done.${NORMAL}"
fi

#----------------------------------------------------------------------------------------
# Load configuration file pcp.cfg
#----------------------------------------------------------------------------------------
echo -n "${BLUE}Loading piCorePlayer configuration file...${NORMAL}"

中略

echo "${YELLOW}A large offset between 1970 and now is normal.${NORMAL}"

sudo su -c 'echo "Finished piCorePlayer v'${PCP_VERSION}' startup." > /dev/kmsg'

unset ORIG_AUDIO

という具合に長いスクリプトだ。
この中でwlan0.shがキックされ終了時には「Starting WiFi...」となり
WiFi接続が完了するようだ。

2.WiFiの状態を確認してみる
pcp_startup.shを修正してWiFi完了後の状態を確認する。

tc@pCP:/usr/local/etc/init.d$ sudo vi pcp_startup.sh 
tc@pCP:/usr/local/etc/init.d$ cat pcp_startup.sh
前略

if [ "$WIFI" = "on" ]; then
echo -n "${BLUE}"
/usr/local/etc/init.d/wifi wlan0 start
echo "Starting WiFi... ${GREEN}Done.${NORMAL}"
fi

#-------------
# Pei
#-------------
wpa_cli -iwlan0 status
iwconfig wlan0

#----------------------------------------------------------------------------------------
# Load configuration file pcp.cfg
#----------------------------------------------------------------------------------------

後略

という具合に突っ込んでみ、変更後は保存してリブート!
tc@pCP:/usr/local/etc/init.d$ sudo filetool.sh -b
Backing up files to /mnt/mmcblk0p2/tce/mydata.tgz / 
Done.
tc@pCP:/usr/local/etc/init.d$ sudo reboot

起動ログを確認してみる。
tc@pCP:~$ cat /var/log/pcp_boot.log
Starting piCorePlayer v8.0.0 startup...
Starting rngd using /dev/hwrng... Done.
Checking for boot files on mmcblk0p1...
  Trying to mount /dev/mmcblk0p1.
  ssh file found on mmcblk0p1.
  newpcp.cfg not found on mmcblk0p1.
Setting default piCorePlayer repository...
Generating sound card drop-down list...
Starting WiFi on wlan0...
udhcpc: started, v1.33.0
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending select for 192.168.3.188
udhcpc: lease of 192.168.3.188 obtained, lease time 7200
deleting routers
route: SIOCDELRT: No such process
adding dns 192.168.3.1
adding dns 192.168.3.1
Starting WiFi... Done.
bssid=40:xx:xx:xx:xx:32
freq=2452
ssid=TP-Link_BC32
id=0
id_str=Home
mode=station
wifi_generation=4
pairwise_cipher=CCMP
group_cipher=TKIP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.3.188
address=88:xx:xx:xx:xx:5e
uuid=e92axxxx-xxxx-xxxx-xxxx-xxxxff278537
wlan0     IEEE 802.11  ESSID:"TP-Link_BC32"  
          Mode:Managed  Frequency:2.452 GHz  Access Point: 40:xx:xx:xx:xx:32   
          Bit Rate=6.5 Mb/s   Tx-Power=20 dBm   
          Retry short  long limit:2   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=61/70  Signal level=-49 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:3   Missed beacon:0

Loading piCorePlayer configuration file... Done.
Loading pcp-lms-functions... Done.
Waiting for sound card Headphones to populate......................................... Failed to find Headphones... Done (42).
Waiting for network. Done (1).
Starting Openssh server... Done.
Starting Squeezelite and/or Shairport-sync... Done.
Starting httpd web server... Done.
Starting to advertise pcp.local... Done.
Setting CPU scaling governor to ondemand... Done.
Creating static footer... Done.

Finished piCorePlayer v8.0.0 startup.

よっしゃ~、バッチリSSIDを取得できてる!!
ここに突っ込むぞ。

3.IPアドレスを変更する
IPアドレスはDHCPで取得しているが勝手に変更できるようだ。
なので、このタイミングでSSIDを識別してIPアドレスを変更するようにした。

tc@pCP:/usr/local/etc/init.d$ sudo vi pcp_startup.sh 
tc@pCP:/usr/local/etc/init.d$ cat pcp_startup.sh
前略

if [ "$WIFI" = "on" ]; then
echo -n "${BLUE}"
/usr/local/etc/init.d/wifi wlan0 start
echo "Starting WiFi... ${GREEN}Done.${NORMAL}"
fi

#-------------
# Pei
#-------------
wpa_cli -iwlan0 status
iwconfig wlan0
if  iwconfig wlan0 | grep -q Redmi ; then
    ifconfig wlan0 192.168.132.231 netmask 255.255.255.0 broadcast 192.168.132.255 up
else
    ifconfig wlan0 192.168.3.96 netmask 255.255.255.0 broadcast 192.168.3.255 up
fi
echo "Pei's WiFi setting Done."

#----------------------------------------------------------------------------------------
# Load configuration file pcp.cfg
#----------------------------------------------------------------------------------------

という具合にしてみた。
スマホテザリングできなくても自宅WiFiに繋がるように順序を入れ替えた。

変更後は保存してリブート!
tc@pCP:/usr/local/etc/init.d$ sudo filetool.sh -b
Backing up files to /mnt/mmcblk0p2/tce/mydata.tgz / 
Done.
tc@pCP:/usr/local/etc/init.d$ sudo reboot

起動ログを確認してみる。
tc@pCP:~$ cat /var/log/pcp_boot.log
Starting piCorePlayer v8.0.0 startup...
Starting rngd using /dev/hwrng... Done.
Checking for boot files on mmcblk0p1...
  Trying to mount /dev/mmcblk0p1.
  ssh file found on mmcblk0p1.
  newpcp.cfg not found on mmcblk0p1.
Setting default piCorePlayer repository...
Generating sound card drop-down list...
Starting WiFi on wlan0...
udhcpc: started, v1.33.0
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending select for 192.168.3.188
udhcpc: lease of 192.168.3.188 obtained, lease time 7200
deleting routers
route: SIOCDELRT: No such process
adding dns 192.168.3.1
adding dns 192.168.3.1
Starting WiFi... Done.
bssid=40:xx:xx:xx:xx:32
freq=2452
ssid=TP-Link_BC32
id=0
id_str=Home
mode=station
wifi_generation=4
pairwise_cipher=CCMP
group_cipher=TKIP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.3.188
address=88:xx:xx:xx:xx:5e
uuid=e92axxxx-xxxx-xxxx-xxxx-xxxxff278537
wlan0     IEEE 802.11  ESSID:"TP-Link_BC32"  
          Mode:Managed  Frequency:2.452 GHz  Access Point: 40:xx:xx:xx:xx:32             Bit Rate=6.5 Mb/s   Tx-Power=20 dBm   
          Retry short  long limit:2   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=61/70  Signal level=-49 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:3   Missed beacon:0

Pei's WiFi setting Done.
Loading piCorePlayer configuration file... Done.
Loading pcp-lms-functions... Done.
Waiting for sound card Headphones to populate......................................... Failed to find Headphones... Done (42).
Waiting for network. Done (1).
Starting Openssh server... Done.
Starting Squeezelite and/or Shairport-sync... Done.
Starting httpd web server... Done.
Starting to advertise pcp.local... Done.
Setting CPU scaling governor to ondemand... Done.
Creating static footer... Done.

Finished piCorePlayer v8.0.0 startup.

スクリプトはちゃんと動いたようだ。
試してみる。

tc@pCP:~$ ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 88:xx:xx:xx:xx:5E
          inet addr:192.168.3.96  Bcast:192.168.3.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:176 errors:0 dropped:57 overruns:0 frame:0
          TX packets:79 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:24689 (24.1 KiB)  TX bytes:14106 (13.7 KiB)

自宅WiFiのIPアドレスはちゃんと変更された。
192.168.3.96

今度はスマホにテザリングしてみると。。。
ちゃんと指定したIPアドレスに設定されていた。
192.168.132.231

やった~~!!できたできた~♪
後は本番機のスクリプトを変更して完了だぜ!!

2022/04/04:追記
スマホでsqueezeliteに接続できない。
ブラウザで192.168.132.231に接続もできない。
スマホ側のifconfigをコメントアウトしてみたら。。。
192.168.232.235なんてIPアドレスでテザリングされている!!
スマホがIPアドレスを取得する際に3オクテット目以降が変更されるようだ。
ということでテザリングのIPアドレスを固定することはできない。

そのため、前回設定で接続できなければ、
Network Utilityを使用してIPアドレスを調べるしかなさそうだ。
とりあえず今はそうしている(T_T)



pCP Mobile:自宅WiFiとスマホテザリングのIPアドレスを固定したい(原因判明)

接続しているSSIDでIPアドレスを変更したい(wlan0.sh編part2)

なぜSSIDを正しく評価できないのだろう。。。?
そもそも、wlan0.shが動く際にWiFiに接続できているのか??
と思いスクリプトを変更し状態を確認してみる。

1.正しく評価できない原因は?
tc@pCP:/opt$ sudo vi wlan0.sh 
tc@pCP:/opt$ cat wlan0.sh 
#!/bin/sh
# Maintained by piCorePlayer
echo "[ INFO ] Running $0..."
NWOK=1
until [ -d /sys/class/net/wlan0 ]
do
    if [ $((CNT++)) -gt 50 ]; then
        echo -n "${RED}No Ethernet Adapter [wlan0] Found!${NORMAL}"
        NWOK=0
        break
    else
        echo -n "."
        sleep 0.5
    fi
done

echo iwconfig wlan0

if [ $NWOK -eq 1 ]; then
    ifconfig wlan0 192.168.3.90 netmask 255.255.255.0 broadcast 192.168.3.255 up
    route add default gw 192.168.3.1
    sudo echo nameserver 192.168.3.1 > /etc/resolv.conf
    /etc/init.d/settime.sh &
fi

変更後は保存してリブート!
tc@pCP:/opt$ sudo filetool.sh -b
Backing up files to /mnt/mmcblk0p2/tce/mydata.tgz / 
Done.
tc@pCP:/opt$ sudo reboot

起動ログを確認してみる。

tc@pCP:~$ cat /var/log/pcp_boot.log
Starting piCorePlayer v8.0.0 startup...
Starting rngd using /dev/hwrng... Done.
Checking for boot files on mmcblk0p1...
  Trying to mount /dev/mmcblk0p1.
  ssh file found on mmcblk0p1.
  newpcp.cfg not found on mmcblk0p1.
Setting default piCorePlayer repository...
Generating sound card drop-down list...
Starting WiFi on wlan0...
[ INFO ] Running /usr/local/etc/init.d/wifi...
wlan0     IEEE 802.11  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm   
          Retry short  long limit:2   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
Starting WiFi... Done.
Loading piCorePlayer configuration file... Done.
Loading pcp-lms-functions... Done.
Waiting for sound card Headphones to populate......................................... Failed to find Headphones... Done (42).
Waiting for network. Done (1).
Starting Openssh server... Done.
Starting Squeezelite and/or Shairport-sync... Done.
Starting httpd web server... Done.
Starting to advertise pcp.local... Done.
Setting CPU scaling governor to ondemand... Done.
Creating static footer... Done.

Finished piCorePlayer v8.0.0 startup.

なんと、「TP-Link」が無い!!
「off/any」になってる。
この時点では自宅WiFiには接続されてないんだ。。。(T_T)

2.supplicant(認証用クライアント)の状態は?
WiFi接続する際のsupplicantで使用するコマンドはwpa_cliのようだ。
試してみる。

tc@pCP:/opt$ wpa_cli
wpa_cli v2.9
Copyright (c) 2004-2019, Jouni Malinen <j@w1.fi> and contributors

This software may be distributed under the terms of the BSD license.
See README for more details.


Selected interface 'wlan0'

Interactive mode

> stuatus
bssid=40:xx:xx:xx:xx:32
freq=2452
ssid=TP-Link_BC32
id=0
id_str=Home
mode=station
wifi_generation=4
pairwise_cipher=CCMP
group_cipher=TKIP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.3.90
address=88:xx:xx:xx:xx:5e
uuid=e92axxxx-xxxx-xxxx-xxxx-xxxxff278537
> q
tc@pCP:/opt$

という具合にオプションなしで起動するとインタラクティブモードになるようだ。
オプションを指定して実行するとコマンドとして処理できる。

tc@pCP:/opt$ wpa_cli -iwlan0 status
bssid=40:xx:xx:xx:xx:32
freq=2452
ssid=TP-Link_BC32
id=0
id_str=Home
mode=station
wifi_generation=4
pairwise_cipher=CCMP
group_cipher=TKIP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.3.90
address=88:xx:xx:xx:xx:5e
uuid=e92axxxx-xxxx-xxxx-xxxx-xxxxff278537

こんな感じで状態が確認できることが分かった。
早速wlan0.shに追記して調べてみる。

tc@pCP:/opt$ sudo vi wlan0.sh 
tc@pCP:/opt$ cat wlan0.sh 
#!/bin/sh
# Maintained by piCorePlayer
echo "[ INFO ] Running $0..."
NWOK=1
until [ -d /sys/class/net/wlan0 ]
do
    if [ $((CNT++)) -gt 50 ]; then
        echo -n "${RED}No Ethernet Adapter [wlan0] Found!${NORMAL}"
        NWOK=0
        break
    else
        echo -n "."
        sleep 0.5
    fi
done

wpa_cli -iwlan0 status
iwconfig wlan0

if [ $NWOK -eq 1 ]; then
    ifconfig wlan0 192.168.3.90 netmask 255.255.255.0 broadcast 192.168.3.255 up
    route add default gw 192.168.3.1
    sudo echo nameserver 192.168.3.1 > /etc/resolv.conf
    /etc/init.d/settime.sh &
fi

変更後は保存してリブート!
tc@pCP:/opt$ sudo filetool.sh -b
Backing up files to /mnt/mmcblk0p2/tce/mydata.tgz / 
Done.
tc@pCP:/opt$ sudo reboot

起動ログを確認してみる。

tc@pCP:~$ cat /var/log/pcp_boot.log 
Starting piCorePlayer v8.0.0 startup...
Starting rngd using /dev/hwrng... Done.
Checking for boot files on mmcblk0p1...
  Trying to mount /dev/mmcblk0p1.
  ssh file found on mmcblk0p1.
  newpcp.cfg not found on mmcblk0p1.
Setting default piCorePlayer repository...
Generating sound card drop-down list...
Starting WiFi on wlan0...
[ INFO ] Running /usr/local/etc/init.d/wifi...
wpa_state=SCANNING
address=88:xx:xx:xx:xx:5e
uuid=e92axxxx-xxxx-xxxx-xxxx-xxxxff278537
wlan0     IEEE 802.11  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm   
          Retry short  long limit:2   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          
Starting WiFi... Done.
Loading piCorePlayer configuration file... Done.
Loading pcp-lms-functions... Done.
Waiting for sound card Headphones to populate......................................... Failed to find Headphones... Done (42).
Waiting for network. Done (1).
Starting Openssh server... Done.
Starting Squeezelite and/or Shairport-sync... Done.
Starting httpd web server... Done.
Starting to advertise pcp.local... Done.
Setting CPU scaling governor to ondemand... Done.
Creating static footer... Done.

Finished piCorePlayer v8.0.0 startup.

なんと、「SCANNING」スキャン中だってさ。。。
原因は判明したが、さてどうするか、う~~ん。。。

2022年2月19日土曜日

pCP Mobile:自宅WiFiとスマホテザリングのIPアドレスを固定したい(失敗)

接続しているSSIDでIPアドレスを変更したい(wlan0.sh編)

ホスト名でアクセスできないことが分かったので色々考えてみた。
で、
piCorePlayerの設定をDHCPからStatic IPに変更して、
接続しているSSIDを識別してIPアドレスを設定すれば良いじゃん。
と思いついた!
早速、手元にある予備のRPiを使用して試してみる。

1.Static IPに変更
DHCPで振られたIPアドレス:192.168.3.188でpiCorePlayerにアクセスして、
Main Page>Beta tab>Static IPでDHCPからStatic IPに変更する。
192.168.3.97を指定してリブート

バッチリ変更したStatic IPに変更された。
192.168.3.97になった

で、ここからが問題。
piCorePlayerのシステム上のどこが変更になったのか?

2.設定状況の確認
piCorePlayerを初期設定するスクリプトは/optに置かれている。(ここ参照)
tc@pCP:~$
tc@pCP:~$ cd /opt
tc@pCP:/opt$ ls -a
./              .filetool.lst   bootlocal.sh    shutdown.sh     wlan0.sh
../             .xfiletool.lst  bootsync.sh     tcemirror
ブラウズしてみるとwlan0.shと分かる。

中身を確認してみる。
tc@pCP:/opt$ cat wlan0.sh 
#!/bin/sh
# Maintained by piCorePlayer
echo "[ INFO ] Running $0..."
NWOK=1
until [ -d /sys/class/net/wlan0 ]
do
    if [ $((CNT++)) -gt 50 ]; then
        echo -n "${RED}No Ethernet Adapter [wlan0] Found!${NORMAL}"
        NWOK=0
        break
    else
        echo -n "."
        sleep 0.5
    fi
done
if [ $NWOK -eq 1 ]; then
    ifconfig wlan0 192.168.3.97 netmask 255.255.255.0 broadcast 192.168.3.255 up
    route add default gw 192.168.3.1
    sudo echo nameserver 192.168.3.1 > /etc/resolv.conf
    /etc/init.d/settime.sh &
fi

設定したIPアドレスがありました。
このスクリプトを変更すれば良さそうです。

3.接続しているSSIDを取得する
WiFiの設定をするコマンドはiwconfigのようだ。
試してみる。

tc@pCP:~$ iwconfig 
lo        no wireless extensions.

wlan0     IEEE 802.11  ESSID:"TP-Link_BC32"  
          Mode:Managed  Frequency:2.452 GHz  Access Point: 40:xx:xx:xx:xx:32   
          Bit Rate=39 Mb/s   Tx-Power=20 dBm   
          Retry short  long limit:2   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=57/70  Signal level=-53 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:7  Invalid misc:9   Missed beacon:0

という具合にSSIDを含んだ表示がされる。
wlan0に絞るには
tc@pCP:~$ iwconfig wlan0 
とすれば良い。

4.SSIDを評価する
iwconfigの結果に"TP-Link"が含まれているかを調べる。
tc@pCP:~$ iwconfig wlan0 | grep TP-Link ; echo $?
wlan0     IEEE 802.11  ESSID:"TP-Link_BC32"
0
tc@pCP:~$ iwconfig wlan0 | grep TPLink ; echo $?
1
という具合に評価できる。

5.評価結果を使用して接続するIPアドレスを変更する
Static IPの評価に加えてSSIDの評価を追加してみた。
grepが無言で動くように-qオプションを付けるよ。

tc@pCP:/opt$ sudo vi wlan0.sh
tc@pCP:/opt$ cat wlan0.sh
#!/bin/sh
# Maintained by piCorePlayer
echo "[ INFO ] Running $0..."
NWOK=1
until [ -d /sys/class/net/wlan0 ]
do
    if [ $((CNT++)) -gt 50 ]; then
        echo -n "${RED}No Ethernet Adapter [wlan0] Found!${NORMAL}"
        NWOK=0
        break
    else
        echo -n "."
        sleep 0.5
    fi
done
if [ $NWOK -eq 1 ] && iwconfig wlan0 | grep -q TP-Link ; then
    ifconfig wlan0 192.168.3.96 netmask 255.255.255.0 broadcast 192.168.3.255 up
    route add default gw 192.168.3.1
    sudo echo nameserver 192.168.3.1 > /etc/resolv.conf
    /etc/init.d/settime.sh &
else
    ifconfig wlan0 192.168.132.231 netmask 255.255.255.0 broadcast 192.168.132.20
    route add default gw 192.168.132.148
    sudo echo nameserver 192.168.132.148 > /etc/resolv.conf
    /etc/init.d/settime.sh &
fi

設定を保存するための呪文
tc@pCP:/opt$ sudo filetool.sh -b
Backing up files to /mnt/mmcblk0p2/tce/mydata.tgz / 
Done.

6.テスト!!
リブートしてみるよ。
tc@pCP:/opt$ sudo reboot

自宅WiFiには繋がらない。。。(T_T)
試しにテザリングしてみると繋がった。。。
テザリングができた

どうやらSSIDの評価ができてないようだ。。。
ダメだ(T_T)
どうしてなんだろう???

2022年2月8日火曜日

pCP Mobile:piCorePlayerをホスト名でアクセスしてみる(失敗)

ホスト名でPingしてみた。

pCPのIPアドレスはDHCPで取得することになっている。
大体が前回取得したIPアドレスが付与されるがたまに変更になる場合がある。
で、ホスト名pCPでアクセスできればOKじゃん!
ということでやってみた。

自宅WiFiに接続した状態でWindows 10のコマンドプロンプトから

・IPアドレスで試す
C:\Users\papa>ping 192.168.3.96
192.168.3.96 に ping を送信しています 32 バイトのデータ:
192.168.3.96 からの応答: バイト数 =32 時間 =54ms TTL=64
192.168.3.96 からの応答: バイト数 =32 時間 =1ms TTL=64
192.168.3.96 からの応答: バイト数 =32 時間 =1ms TTL=64
192.168.3.96 からの応答: バイト数 =32 時間 =9ms TTL=64
192.168.3.96 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 1ms、最大 = 54ms、平均 = 16ms

・ホスト名pCPで試す
C:\Users\papa>ping pCP
ping 要求ではホスト pCP が見つかりませんでした。ホスト名を確認してもう一度実行してください。

・ホスト名pCP + .localで試す
C:\Users\papa>ping pCP.local
ping 要求ではホスト pCP.local が見つかりませんでした。ホスト名を確認してもう一度実行してください。

ということであっさりNG。。。(T_T)

2022年2月7日月曜日

pCP Mobile:通勤時間で稼働確認(完成)

本当に動いた♪

できたのは良いが本当に稼働するのか?
初めて通勤電車で使ってみたよ。
起動には時間が掛かるもののちゃんと動いたよ(^^)/

起動操作は次の様になる。(2023/9/23:順序変更)

  • Raspberry Pi Zero WをONにする。
  • スマホのポータブルスポットをONにする。(起動後でも接続可能)
  • Bluetooth Receiver AdapterをONにする。(起動後でも接続可能)
  • ポタアンをONにする。
  • レジュームで音楽が流れる。
  • 必要に応じてSqueezerを起動して操作する。

RPiで動いてるって分かるかな~分かんねぇだろうな~♪

停止操作は次の様になる。(起動操作の逆になるだけ)

  • ポタアンをOFFにする。
  • Bluetooth Receiver AdapterをOFFにする。
  • スマホのポータブルスポットをOFFにする。
    • 自動停止にしていれば不要になる
  • Raspberry Pi Zero WをOFFにする。
    • シャットダウンが必要ないのがpiCorePlayerの良い点
ただ。。。
ポータブルスポットで割り当てられるIPアドレスが同じであればSqueezerを起動すればRPiに接続できるが、IPアドレスが変更になった場合はNetwork Utilityを使用してIPアドレスを調べる必要がある。この状態になると面倒だな。
IPアドレスでなくホスト名pCPで接続すればOKかな??

一旦、ここまでで完成としよう!!

2022年2月6日日曜日

pCP Mobile:結局カセットテープケースにRaspberry Pi Zero W を詰めたよ^^;

最後の課題は電源スイッチ。

電源スイッチ付きのモバイルバッテリーをGoogle先生に尋ねたけど、バッテリーにスイッチは不要なのか良い回答が無かった。またあったとしても選べるほどは無いな。ということでスイッチ付きのバッテリーは諦めて急速充電ができるタイプを購入したよ。


次に考えたのはスイッチ付きUSBケーブル。
Google先生に何度も尋ねたけど、スイッチが付いたケーブルは需要があるようで幾つか答えてくれたよ。でもごっついスイッチだったり、長かったり、欲しいと思うケーブルは無かったなぁ。

スイッチも自分で取り付けるのである程度の大きさが必要。
まずは良さげな1回路2接点のELPA HK-SLS01Hを購入したよ。
このスイッチを充電用のUSBケーブルの(+)側のケーブルに挟めばスマートなスイッチ付きUSBケーブルが作れる。
でも、この小さなスイッチでもFRISKケースには入らない。。。
で結局、FRISKケースは諦めてカセットテープケースで再作成することにした。

手元にあった充電用のUSBケーブルを切ってみた。
すっげー細い^^;

次に薄型タイプのカセットテープケースを探し出し実物合わせで位置決めしたよ。
USBケーブルのコネクタがあるのでネジ穴を大き目にしてちょっとズラせるようにした。
テープの回転止めの出っ張り位置がちょうど良い

バッテリー側は穴に通して結んで終わり^^;

スイッチの取り付けはケースの蓋側に取り付ける。
長方形に穴あけ加工しなくてはならないのでドリル穴を彫刻刀で現物合わせで削った。
固定する前に端子に予備はんだをしておきました。
ちょっと大きかった^^;
ネジが小さい。
※ワッシャを付けるとショートするようでスイッチ動作しなかった。
気づいて良かった~(^^)v

いよいよ、本日のメインイベント!細い撚り線のはんだ付け。
ケーブルストリッパーで剥く際に3回も切れちゃった^^;
剥いた電源ケーブル側にも予備ハンダをしておき。。。
震える手の止まる瞬間にチャッと付けたよ。
いや~、緊張の瞬間!

さて、通電確認です。
本来はテスターで確認するのですが、USB端子ですから。。。
バッチリ!!LEDが光ってるの分かる??

完成!!
手作り感満載でしょ!

さて、システム一式で動作確認してみます。
結構、大袈裟なシステムになってしまった

良い感じに鳴ってます♪

やっとできた~(^^)/
長かったなぁ。