June 30, 2018

Raspberry pi 3B +(plus) 店頭でも入手可能に

Raspberry pi 3B +(plus) 店頭でも入手可能に

ギガビットLAN、11ac対応無線のラズベリーパイが、関東で梅雨明けの最近、店頭にもよく並ぶようになりました。

個人輸入も考えてましたが、円安であまりうまみもないことや、別に急いでもいないので、技適が通って、普通にうらっと アキバで買える日を待って、購入。

tsukumoで、ケース付です。

・ヘッドレス、wi-fi、sshで、最小限のセットアップをしました。 wi-fiはまだ2.4Gでしか使っていませんし、有線LANも未接続です。

・最新版の raspbian stretch liteのイメージを適当なサイトからダウンロード。ちなみに2018年4月18日versionです。
・zipファイルを母艦のubuntu X86で動いているマシーンで解凍、イメージファイルをddコマンドでMicroSDカードに書き込み。
・パーティションはFAT32のbootと、ext4のrootfs である。
・母艦でMicroSDカードを認識させて。 boot のパーティション に #touch ssh でsshという名前の空ファイル作成。
・接続したいネットワークのSSID パスワード(パスフレーズ)設定を書き込んだ wpa_supplicant.conf をboot パーティションに作成。
・bootパーティションに書き込む空のsshファイトと適切なwi-fi設定の二つのファイルが肝。有線LANなら無線の設定は不要。逆にいえば、二つのファイルの用意だけで、ヘッドレスで接続開始できる。
・母艦からMicroSDをunmountして、raspberry Pi 3B +(plus)に挿入。 電源を接続。
・しばらくすると、母艦から ssh pi@raspberrypi.local 、パスバードはraspberry で接続できる。
・sshして、ログインしたあと、各種設定の調整を行う。タイムゾーンとか、マシンの名前とか、ログイン名とか、パスワードとか、固定IPアドレスとか。
・この状態で、ネットワークのラベルはeth0 とかwlan0なので、何か安心。
・USB MicroSDの変換のカードライタがあると、母艦で書き込んだりするとき楽。母艦のubuntuが、仮想マシーン上でもね。また、ほかにラズパイで動いている機種があれば、USBにカードライタを挿入して、MicroSDカードを書き込んだり、編集したりして、3b+ 用の起boot動SDカードの準備は同様に可能。

・何に使うか、未定。APとかコンバータもどきとか、Pi desktopのケースとSSDでデスクトップにするとか、二つ用意して、実家のLANとの間に拠点間VPN作るとか、リビングのテレビに接続してメディアサーバにするとか・・

|

June 02, 2017

raspberry pi で bluetoothリモコンが接続されたら、sysytemdでプログラムを開始する。

raspberry piでbluetooth リモコンを接続し、ラズパイオーディオでmpdを動かすmpcを実行させるためのpythonスクリプトを自動的に実行させます。そのためには、USBで最初から接続されている場合のように、はじめからスクリプトを走らせるわけにはいけません。
sshで接続して、リモコンのを認識させ、手動で、リモコン動作用スクリプトを実行させて、思うように動作することを、確認します。しかし、リモコンのスイッチをきると、スクリプトがエラーで終了することもわかります。ラズパイの起動時のsystemdで、エレコムのUSBDACの時と同様にスクリプトを読み込ませても、リモコンが接続される前に終了してしまいます。

リモコンの接続を感知して、スクリプト動かす方法を考えます。/dev/input/event0の有無を検知して、スクリプトを実行させようとも思いましたが、そのためにループを回したりするのでは、あまりスマートではありません。いろいろ調べてみると、udevの機能に、デバイスの接続・認識後に、プログラムを実行させたり、サービスを開始させたりする機能があります。それを用いることにします。

リモコンを接続した状態で次を実行します。
udevadm info -a -n /dev/input/event0

その中の表示で
KERNEL=="event0"
SUBSYSTEM=="input"

ATTRS{name}=="Bluetooth Media Control & Camera Shutter Click"
ATTRS{phys}=="xx:xx:xx:xx:xx:xx"
ATTRS{uniq}=="xx:xx:xx:xx:xx:xx"
("xx:xx:xx:xx:xx:xx"は伏字)

などを利用して、識別符とし、udevのrules.dを作ります。
このrulesで呼び出されるsystemdのサービスをbltdev-mpc.serviceとします。

/etc/udev/rules.d/95-bltdev.rules
として、
ACTION=="add", SUBSYSTEM=="input", KERNEL=="event*",ATTRS{phys}=="xx:xx:xx:xx:xx:xx", ATTRS{uniq}=="xx:xx:xx:xx:xx:xx", GROUP="Bluetooth", TAG+="systemd", ENV{SYSTEMD_WANTS}+="bltdev-mpc.service", NAME="Bltdev", SYMLINK+="blt-remocon"
を作ります。1行に書きます。

TAG+が無事認識されて入れば、
systemctl --type=device --all
の実行結果に
dev-input-event0.device loaded active plugged /dev/input/event0
があるはすです。
SYMLINK+では
/dev/blt-remoconがdev/input/event0のリンクになってみえているはずです。
これは、複数の入力機器を接続するときに、個別に認識させて、別々のプログラムで入力制御したりするのに使えそうです。

/etc/systemd/system/bltdev-mpc.service
[Unit]
Description = Bluetooth Remote controller for mpd
Requires=dev-input-event0.device
After=dev-input-event0.device
[Service]
ExecStart=/usr/local/bin/”リモコン制御のスクリプト”
Type=simple

|

May 26, 2017

ラズパイポータブルオーディオはbluetooth テザリングで

ラズパイポータブルオーディオはbluetooth テザリングで使いましょう。 systemdに登録して使用。 テザリングAP設定のスマートフォンから、sshや、WBUI、mpdクライアントソフトなどで、接続できます。 無線LANオフして、ノイズ低減。

#!/bin/sh
i=1
while [ $i -lt 999 ]; do
    i=`expr $i + 1`
    IPV4BNEP=`ifconfig bnep0  2>/dev/null  | grep inet | grep 255`

  if [ -z "$IPV4BNEP" ]; then
   sleep 5
   /usr/bin/bt-pan client ”bluetooth pair済 テザリングAP設定した機器のアドレス”
  sleep 30
 else 
 sleep 120
 fi
 sleep 5
done

whileは単にループのためで、単にtrueで実行でも良い。実験時に少ないループ回数から試して、もう面倒くさくなってそのまま。事前にペアリングを済ませることと、bt-panのダウンロード、実行権限、移動を行う。bnep*にIPV4でアドレスが振られていなかったら、接続を実行。30秒後に、接続の有無を確認。bnep*がきちんと存在していたら、120秒後に、接続の有無を確認。適当だけと、途中から、スマホのテザリングをオンにしても、接続できるし、何とかなっている。

Continue reading "ラズパイポータブルオーディオはbluetooth テザリングで"

|

続き USBDAC エレコムのボタンを使用

ボタンを6回、ある順に押して、任意のコマンドを実行する機能を付けてみました。ボタンのイベントは押す瞬間のみを感知し、「○秒以内に6個押すと、」とかの、インテリジェントな機能はありません。シャットダウン、リブート、wifiのオフなどをシェルスクリプトにして、呼び出すようにしています。6回押す間にmpcのコマンドはそれとは別に実行されてしまいますが、とりあえず使えればいいので。
 
#!/usr/bin/python
#coding: utf-8

import evdev
import subprocess
def main():
    # デバイスのインスタンスを作成
    device = evdev.InputDevice('/dev/input/event0')
    btnorder = "pvpvpv"	
    #デバイスのボタンで行う処理の辞書を作る。
    mpcctl = {114:"volume -5", 115:"volume +5", 163:"next", 164:"toggle", 165:"prev"}
    bchar = {114:"d", 115:"u", 163:"n", 164:"t", 165:"p"}
    btnptn = {"ududud":"shtdn.sh", "ttdpun":"rbt.sh", "ttduud":"woff.sh", 
              "ttdupp":"w1.sh",  "ttduuu":"w2.sh", "ttdunn":"w3.sh", "ttdudd":"w4.sh"}
    # デバイスのイベントを読む
    for event in device.read_loop():
        if event.type == evdev.ecodes.EV_KEY:
            if event.value == 1:
               bnum = event.code
               if bnum in bchar:
                  subprocess.call("mpc "+mpcctl[bnum], shell=True )
                  btnvar = btnorder[1:]+bchar[bnum]
                  btnorder = btnvar
                  if btnvar in btnptn :
                      subprocess.call("/usr/local/bin/"+btnptn[btnvar], shell=True )

if __name__ == '__main__':
    main()

|

May 24, 2017

EHP-AHR192のボタンでラズパイオーディオを操作するpythonの例

ELECOM CO., LTD. EHP-AHR192 はandroid用のハイレゾDACですが、raspberry piにも、そのままUSB-DACとしt、使えます。折角、操作用のボタンがあるのですから、使ってみましょう。
GUIのメディアプレーヤーソフトを使えば、そのまま、音量のup/down 、pause/play、previos/ nextが使えるはず。
しかし、ヘッドレス仕様ではそうはいきません。通常、操作はmpdクライアントだったり、ネット上のほかの端末のWEBUIだったりです。

pythonのevdevプラグインを使って、上記DACのボタンをおして、mpdのクライアントであるmpcを呼び出して、操作することにします。最低限の機能ということで、ボタンを押したイベントに対して、各コマンドを実行するようにしています。

---ここから
#!/usr/bin/python
#coding: utf-8

import evdev
import subprocess
def main():
  # デバイスのインスタンスを作成
  device = evdev.InputDevice('/dev/input/event0')

  #デバイスのボタンで行う処理の辞書を作る。
  mpcctl = {114:"volume -5", 115:"volume +5", 163:"next", 164:"toggle", 165:"prev"}
  # デバイスのイベントを読む
  for event in device.read_loop():
    if event.type == evdev.ecodes.EV_KEY:
      if event.value == 1:
        bnum = event.code
        if bnum in bchar:
         subprocess.call("mpc "+mpcctl[bnum], shell=True )
        
if __name__ == '__main__':
  main()

ーーーここまで

デバッグするときには、途中に変数のprintを行って、意図した値が代入されるか確認します。

| | Comments (0)

May 22, 2017

ラズパイオーディオとbluetooth リモコン

raspbian jessie ベースのオーディオ再生マシーン。mpdで動いていて、ヘッドレス運用。
ポータブルでの使用を想定。

・bluetooth関連のパッケージをapt-get installする。
・ラズパイでbluetooth有効にし、bluetoothリモコンとペアリングする。bluetoothctlで設定し、trustして、リモコンの電源を入れれば、自動的にペアリングが確立するようにする。
・ヘッドレスでは、リモコンのボタンを押しても、何も起きないので、Pythonのevdevを使って、スクリプトを作って設定する。
・raspbianではevdevはパッケージ化されていないので、Pythonでpipをインストールしてから、pipでevdevを入れる。
・evdev公式とかを参考にして、リモコンのボタンのキーコードを読み取ってみる。
・リモコンのボタンと実際の操作(mpcのコマンド)を結びつけるPythonのコードをこしらえる(自作スクリプト)。
・このスクリプトを、自動的に読み込むことを考える。ラズパイ起動時にスクリプトを実行すると、bluetoothリモコンが接続されていないと、とまってしまう。
・bluetoothリモコンが接続したら、スクリプトを実行するようにに、udevを設定する。情報がすくなくて苦労する。
・udevから実行したプログラムは、一定の時間で強制終了されてしまう。bluetoothリモコンが接続したあと、ボタンとコマンドを結びつけるスクリプトはSystemdから起動する。udevでデバイス(今回はbluetoothリモコン)を認識すると、systemdが対応するUnitを生成して有効化する。このデバイスによる認識のUnitが起動する、リモコン制御用の自作スクリプトがサービスとして実行されるようにする。


|

May 21, 2017

Century Bluetooth接続マルチメディアリモコン iRemote Shutter(CIA-BTMR)でラズパイオーディオ

Bluetooth接続マルチメディアリモコン iRemote Shutter(アイリモート シャッター)(CIA-BTMR)でラズパイオーディオの制御ができたので、その手順。

このリモコン自体は、iOS専用だが、andoroid機器等でも使えているという、情報があり、思い切って買ってみた。
Bluetooth接続マルチメディアリモコン って、意外と選択肢がない。
ゲームパッドみたいなタイプや、キーボードでも接続の基本は同じ。テンキーとかでも。
ボタンが一つしかないシャッター専用のリモコンでも、連打の回数で制御させることはできるかもしれない。

で、iRemote Shutter だが。

|

May 20, 2017

volumio2でapt-get update ; apt-get upgradeがこける

一度コケると、apt-get install -f とかしても、修復不可能。自分のスキルでは。
何も、installもできない。
raspberry pin3 でいじって、bluetoorh対応にしたいので困ってしまう。

|

ラズパイオーディオをポータブルプレーヤーにするにはbluetoothが便利

raspberry pi zero wの国内発売は遅れているが、無線無しのzeroは、入手しやすくなりました。
自分では、i2SのjustboomのDACをつけたのと、usbにエレコムのandroid用dacをつけたのと2つのzeroによるポータブルプレーヤーを使っている。ソフトはMOODEの古いのを改造して使っている。

プレーヤーへの音楽の転送は、無線LAN経由やmicroSDカードを取り出して母艦のPCでコピーしたりします。

携帯してのプレーヤーとしての利用は、スマートフォンでbluetoothテザリングを有効にして、webuiやandroidのmpdクライアントで操作します。justboomのI2SのDACでは、usbがあまるのでそこにbluetoothのドングルをつけられます。wifiがなくても、操作できます。

エレコムのUSB-DACは、ボタン付きなので、それを使えるようにして、操作しています。そうすることで、USBにwifiやbluetooth のドングルをつけるために、HUBをかませなくてもよくなります。

ノイズがwif>>bluetoothなので、zero wを使うときのために、wifiを無効にした運用のなれるとよいです。

それに、bluetoothだとリモコンを使えます。Centuryのiphone用のリモコンは、iOSしか正式対応がないが、接続できました。

|

May 07, 2017

ハイレゾ DAC for Android (elecom)のボタンをラズパイで使う。

ハイレゾ DAC for Android(イヤホンつき)
EHP-CHR192GD
EHP-CHR192SV
ハイレゾ DAC for Android
EHP-AHR192SV
EHP-AHR192GD

本家のアウトレットは遂に、品切れのようです。正式対応はandroidですが、ラズパイ raspberry pi でも普通にUSB-DACとして、ハイレゾ対応で使えます。注意点はコネクタのL字の形状的に、 raspberry pi zeroだと、USB端子に挿すとPOWER端子を塞いでしまいます。power端子から給電する場合は、変換コネクタやコードmicroUSBの向きを変える等、工夫が必要です。向きが逆だったらよかったのに・・・。GPIOから給電するのも一つの方法かもしれません。2とか3とかはUSBコネクタの種類の変換が必要です。

さて、せっかくDACについている5つのボタンです。デスクトップPCの例えばubuntuでは、デスクトップで再生している音楽再生ソフトのコントロールが可能です。
ラズパイオーディオでは、ヘッドレスで、ネットワーク経由で操作するソフトが多いです。moode audio playerとか、volumioとか。このエレコムのDACについているボタンは、標準入出力ないしデスクトップで音楽再生ソフトを動かしていないため、そのままでは、うんともスンとも行きません。

自分で操作可能にするには
・ソフトの追加等が普通にできるrasbianベースのmoode audio playerの以前のバージョン 3.1を利用
・pythonにevdevを使う。
・evdevは公式参考にインストール。headerは「raspberrypi-kernel-headers」
・ネット記事参考したり、evdev公式参考に、5つのボタンのコードをpythonで読み取る。
 114 115 163 164 165 であることがわかる。
・ボタンのキーコードに応じて、subprocess で "mpc volume -5","mpc volume +5","mpc prev","mpc toggle", "mpc next"を実行させる。
・うまく行ったら、スクリプトを systemdで自動起動させる。
・コマンドは、別にその通りにしなくてもよいし、自由に決められる。
・ボタン5個に5個のコマンドした割り当てられないが、いくつかのキーを押す順番に応じて、別のコマンドを実行させることも可能。 リブートとか、シャットダウンとか。ポータブルプレーヤー運用で使用したときに、一一、webUI上から、終了しなくてもいいので、便利。ほかに、wifiやbluetoothを停止したり・再稼働させたりとか。無線に関わるノイズも減らせるかも。
・ゲームパッドとか、bluetoothのマルチメディアリモコンとかも、デバイスのペアリング済ませれば、同じようにいろんな機能をボタンに割り当てられるはず。エレコムのDACのボタンに限らない。

|

より以前の記事一覧