Raspberry Pi;cronで音を出す

cronを使ってaplayで音を鳴らそうとしていた。ところがコマンドで打つと問題なく再生されるサウンドが、cronでは全く鳴らない。なぜだろうと調べてみたら、cronは自分のユーザ環境で動作していないからだというのがわかってきた。ググると
crontab中に一行

XDG_RUNTIME_DIR=/run/user/user_id

を入れればよいことがわかった。user_idは下記のコマンドでわかる

id [user_name]

自分のアカウントpiのuser_idは1000だった。これで無事にcronから音が鳴った。

<https://coderedirect.com/questions/562029/audio-doesnt-play-with-crontab-on-raspberry-pi>


Raspberry Pi2でランダムなサウンド再生

シェルを使ってごく簡便に、ごく簡便にn種類のサウンド(.wav)をランダムに再生させる方法

  • 0.wav から (n-1).wavまでのn種のwavファイルを用意し、仮に/home/pi/your_local_dir/配下に置く
  • 以下のシェルファイルを作る
          SEED=$(head -c4 /dev/urandom | od -t u4 | awk ‘{print $2 }’)
    aplay /home/pi/your_local_dir/$(($SEED % n+1)).wav <-n+1には実際の数値を入れる
  • 以下のシェルファイルを作る
          aplay /home/pi/your_local_dir/$((RANDOM % n)).wav <-nには実際の数値を入れる
  • CRONに仕込んでおけば定時にランダムなサウンドを楽しめます


    Raspberry Pi 2にRails導入

    Rbenvについては、このサイトを参考にして/etc/profile.d/配下にrbenv.shを追加する方法でインストールした。そのままrubyを現時点の安定板2.2.2をインストール。

    しかし一度目はインストールに失敗。dependenciesが解決できていないらしい。

    pi@rmsy1 ~ $ rbenv install 2.2.2
    Downloading ruby-2.2.2.tar.gz…
    -> https://dqw8nmjcqpjn7.cloudfront.net/5ffc0f317e429e6b29d4a98ac521c3ce65481bfd22a8cf845fa02a7b113d9b44
    Installing ruby-2.2.2…

    BUILD FAILED (Raspbian GNU/Linux 7 using ruby-build 20150803)

    下記のようなサジェスチョンがあったのでこれを実行

    Try running `apt-get install -y libreadline-dev` to fetch missing dependencies.

    これでうまくインストールできた。40-50分ぐらい要した。

    次に先のサイトに記述されている通り、rails 4もインストールを進めた。

    bundle installがうまく通らないので

    gem install inbv8

    を導入した。

    bundle showをかけてみると

    bundle show
    Gems included by the bundle:
    * actionmailer (4.2.3)
    * actionpack (4.2.3)
    * actionview (4.2.3)
    * activejob (4.2.3)
    * activemodel (4.2.3)
    * activerecord (4.2.3)
    * activesupport (4.2.3)
    * arel (6.0.3)
    * binding_of_caller (0.7.2)
    * builder (3.2.2)
    * bundler (1.10.6)
    * byebug (5.0.0)
    * coffee-rails (4.1.0)
    * coffee-script (2.4.1)
    * coffee-script-source (1.9.1.1)
    * columnize (0.9.0)
    * debug_inspector (0.0.2)
    * erubis (2.7.0)
    * execjs (2.5.2)
    * globalid (0.3.6)
    * i18n (0.7.0)
    * jbuilder (2.3.1)
    * jquery-rails (4.0.4)
    * json (1.8.3)
    * libv8 (3.16.14.11)
    * loofah (2.0.2)
    * mail (2.6.3)
    * mime-types (2.6.1)
    * mini_portile (0.6.2)
    * minitest (5.8.0)
    * multi_json (1.11.2)
    * nokogiri (1.6.6.2)
    * rack (1.6.4)
    * rack-test (0.6.3)
    * rails (4.2.3)
    * rails-deprecated_sanitizer (1.0.3)
    * rails-dom-testing (1.0.6)
    * rails-html-sanitizer (1.0.2)
    * railties (4.2.3)
    * rake (10.4.2)
    * rdoc (4.2.0)
    * ref (2.0.0)
    * sass (3.4.16)
    * sass-rails (5.0.3)
    * sdoc (0.4.1)
    * spring (1.3.6)
    * sprockets (3.3.0)
    * sprockets-rails (2.3.2)
    * sqlite3 (1.3.10)
    * therubyracer (0.12.2)
    * thor (0.19.1)
    * thread_safe (0.3.5)
    * tilt (1.4.1)
    * turbolinks (2.5.3)
    * tzinfo (1.2.2)
    * uglifier (2.7.1)
    * web-console (2.2.1)

    が現れた

    最後にrails sの-bオプションで0.0.0.0 (全て)の接続元を指定するように変更してサーバ起動するとrailsが無事に動いた。

    2つのサイトに感謝します。

    Raspberry Pi 2 にRuby on Rails 4 環境を構築してみた

    Raspberry Pi で rbenv / Ruby on Rails を動かすまでの個人的メモ

     

    (追記)

    実際動かそうとすると、javascript runtimeがないとのコメントがでたので、このサイトに記述されていた通り、execjsとnodejsを入れたら無事動きました。

    ==

    簡単なデータベースを作成します。

    ~/rails を作成し、その下で、

    rails new book

    を入力します。これでbook配下にさまざまなファイルが出来るので、

    cd book

    に移り、
    rails generate scaffold item title:string outline:text
    rake db:migrate

    rails s -b 0.0.0.0

    とする。0.0.0.0もリッスンさせる必要があるようだ。
    これで、http://localhost:3000/items

    とやると、無事に動いていることが確認できた。


    Raspberry Pi初期の設定

    やはり運用させてみると、頻繁におちたりファイルが欠損する。まずはじめに、何を設定したかだけ備忘録

    Raspi-configでしたこと

    • Expand filesystem: Rasberianから始めるときには設定
    • Change User Passwowrd: そのあと sudo passwdでルートも設定
    • Enable Boot: CUIからのスタート、画面が見えなくなった時簡単に落とせるよう
    • Internationalization: Localeは en_US-UTF8とja_JP-UTF8 デフォルトをJPに
      (注ここで文字化けした時にはここに従うこと)
    • Internationalization: Timezoneは Asia/Tokyo
    • Internationalization: Keyboard Layoutは 通常109だが105にする
    • Advanced option: Hostnameを適当に設定
    • Advanced option: SSHをEnabledに
    • Advanced option: updateをかける

    Update

    •  sudo apt-get update
    • sudo apt-get upgrade
    • sudo rpi-update (firmware update)

    日本語環境の追加

    • この日本語設定を見て、必要なフォントをインストールする
    • 同じく、.profile中にLANGを追加する
    • jfbtermを追加
    • emacsインストール init.elを追加して日本語環境を追加(utf-8)
      なおemacsで、Ctrl-\で日本語モードにはなるものの速度は遅い。このモードのままで、PC側でAlt-半角/全角を打つとローカルPCのFEPが使えているようだ。

    Crontabのエディタ変更(emacs) ここに記述あり

    • .bashrcに下記を追加
      EDITOR=emacs
      export EDITOR

    毎日reboot

    • この記述を参考にして毎日rebootを行う

     


    Raspberry Pi 基本config

    まず画面関連で
    いくつかキーの設定を書きます

    • hdmi固定モードのためには、/boot/config.txtにおいて
        hdmi_force_hotplug = 1

      を入れれば良いようです。

    • 続いてHDMI切り替え器などに由来する解像度の揺らぎを固定するために、同じく/boot/config.txtで、
        hdmi_group = 1
        hdmi_mode = 5

      をセットすると解像度が1920X1080にセットされます。

    次に万が一画面が見えなくてもシャットダウンできるように以下のことをしました

    • raspi-configを起動して、起動オプションをXウィンドウではなく、ターミナルに変更します
    • コントロール+ALT+BackspaceでXを強制終了できるよう、/etc/default/keyboardに次を追加します。
        XKBOPTIONS=”terminate:ctrl_alt_bksp,ctrl:swapcaps”

      なおswapcapsはいわゆるctrlとcapslockを入れ替えるためのものです。

    このようにすると、万が一画面が消失して見えなくなったときでも、

      Cntl+Alt+bksp

    を押せば、ターミナル画面に落ちるはずです。このあと

      sudo shutdown -h now

    で無事Raspberry Piはシャットダウンするでしょう。シャットダウンすると赤いランプがひとつだけついた状態になります。

     

    これでおそらくうまく動くものと期待します。


    Raspberry Piの設定方針

    Raspberry Piを再度はじめようと思っている。以前しばらく使っていたが、いつの間にか電源は入っているものの画面には何も映らないという状態が生じていた。それで電源をON/OFFしていると、Linuxなので、ファイルシステムがいかれてしまうことがあった。今回再度設定しようとしてみたが、同じ事態が起きている。調べてみたら、今HDMI Selectorを使っているため、何かの拍子にHDMIへの出力が切り替わり、コンポジットの出力になっているようだった。こうなったら、もとに戻す手はなさそうだ。このため、以下の対策をまず取ろうと思う。

    • OSはイメージでバックアップを取る
    • 強制的にHDMIを選択するモードに/boot/config.txtを書き換える
    • 万が一ブラインドになっても、キーボードでXを終了させ、コマンドラインでブラインドでシャットダウンできるようにする
    • 毎日定時にrebootさせる(昔の基地局もそうやってたという)
    • GPIOを用いて、スイッチでシャットダウンする機能を付加できるようなので、これを実装する(未実装)

    あたりを入れてみたい。


    Raspberry Piで古典的情報監視

    Paspberry Piで毎分カメラでキャプチャを行う話。

    まず普通のwebカメラを導入。ここを参照。motionも導入する。
    次にここを参照して、/etc/motion/motion.confを
    編集。毎分写真を撮るようにする。

    撮れた映像は、/tmp/motion に保存される。すごく枚数が増えるので 消すときにtoo many argumentsなど言われた際は、
    sudo find ./ -name ‘*.jpg’ | sudo xargs rm
    のようにして、パイプして順に消すようなやりかたを推奨する。
    480 X 320で一枚約40kbyte. 1日で1440枚 60Mbyte, 10日で600M, Raspberry Piの残り容量はあと4.4Gbyteあったから
    70日ぐらいは動いてくれそうだ。

    最後に電源投入時に自動でmotionを起動するためには、
    sudo systemctl enable motion.service
    としてsystemctlサービスに登録すればよいようだ。(ここ


    Raspberry Piでリモートカメラ設置

    古いWebカメラを設置してみた。セットアップはここここを参照した。
    1)lsusb を入力
    これで自分のカメラが認識されていたらOK
    2)sudo apt-get install motion
    でmotionをinstallする
    3)/etc/motion/motion.conf
    を編集
    ・backgroundでデーモンを動かすならdaemon off->onにする。(していない)
    ・control_localhost on->off (制御をlocalhostに限定する->しない)
    ・webcam_localhost on->off (webcam出力をlocaohostに限定する->しない)
    4)起動
    sudo service motion start|stop|restart
    Webcam portは8081で見れる
    このままだと毎秒映っているようだ。