2016/02/13

キッチンタイマーできました

Raspberry Piで音声合成も出来るようになったので、前に作ったタイマーの音声合成部分にRaspberry Pi用のコードを組み込む。
音量の設定も出来るようにしたのでこのような形になりました。

あとは前に作ったタイマーを微調整。
停止状態で数字が入力されたら時間を設定して設定時間を発声してタイマーのカウント開始。
カウント中に文字未入力でenterが押されたら残り時間を発声。
カウント中に"0"を入力してenterが押すと「一時停止」と発声しカウント停止。この状態でenterを押したら停止した時間を発声しカウント開始。
設定時間になったら「終了しました」と5秒おきに発声。文字未入力でenterが押したら「停止しました」と発声しタイマー停止。
これでタイマーとしての基本的機能部分。

あとはおまけで"-"または"+"を入力してenterで音量の増減、"."を入力してenterで現在時刻の発声をするようにしました。
文字の入力が数字、"+", "-", "."なのは10キーを使っているためです。

こうして無駄に豪華なキッチンタイマー完成!

・・・キッチンタイマーだけではもったいないですよね。次は定番?の温度センサーの追加でしょうか。

2016/01/30

キッチンタイマーを作ってみる 6

Raspberry Piのハードウェア設定が終わったので、本来の目的のキッチンタイマー作りに戻ります。
基本的な部分は出来ていて、あとは動作のフィードバック通知のためスピーカーから音を出すところで止まっていたのでその続き。
普通にビープ音を出すだけでは芸が無いので、ここはやっぱり音声でフィードバックさせるようにします。

Raspberry Piで音声合成するのにあたってメジャーな物が2つあるそうです。
まずはOpen JTalkというものを試してみる。
こちらのサイトの説明に従いapt-getでインストール、紹介されているスクリプトで喋らせようとしましたが、なんか"mgc.pdfが〜"とか出てうまくいかない。
次にこちらのサイトを参考にソースからコンパイル、インストールしてみて試してみる。
今度はうまく音声が出ましたが、ターミナルでコマンドを入力してから音声が出るまでちょっとタイムラグがあるな〜という感想。

次に AquesTalk Pi というものを試してみる。
Open JTalkに比べてインストールは簡単、例に従ってターミナルからのコマンド入力で音声出力をしようと試してみる。

  • AquesTalkPi "test" | aplay
・・・エラーがでる。色々試していて、結局自分のミスでインストールしたディレクトリに移動していたので頭に"./"を入れなくてもいいかな〜と思っていてコマンド入力していたためのミスでした。
例の通り入力したらちゃんと音声が出力されました。
  • ./AquesTalkPi "test" | aplay

2つの音声合成を試して、音質的にはOpen JTalkのほうが好みでしたが、タイムラグがあるのが難点。
これに比べAquesTalk Piはほぼタイムラグが無く音声が出てきます。今回の自分の用途ではすぐに音声が出て欲しいのでAquesTalk Piを使うことにします。

ターミナルからは上記の方法で音声が出力するので、Phtyonから出力する方法を調べる。
こちらもぐぐって、下記の用にすると出力出来るとの事。

  • import os
  • os.system('インストールしたディレクトリ/AquesTalkPi "んー' + u_msg + '" | aplay&')
u_msgは喋らせる内容を入れた文字列。普通のスピーカーに繋いでいる場合はこれだけでいいはずですが、自分はBluetoothスピーカーに接続。このためか音声の最初が途切れ気味です。
これの対策のため頭に"んー"と追加しています。

無事音声も出るようになったので、キッチンタイマーの仕上げにかかります

2016/01/24

Raspberry Piに挑戦-バックアップ

Bluetoothスピーカーの接続でうまくいかず最初からインストールし直して検証作業をすることがつづいたので、環境をまるごとバックアップする方法を勉強。
Raspberry PiはSDカードにOS、ソフトウェアが全部入っているので、変に細かい作業をするよりSDカードを丸ごとバックアップするのが簡単だそうです。
自分はOSXを使っているのでその方法を。

まずはSDカードがどこに割り当てられているか確認。
ターミナルを開き、次のコマンドで確認します。

  • sudo diskutil list
"df -h"でも確認できるそうですが、自分は上のコマンドの方が結果が分かりやすかったです。
で、SDカードは"/dev/disk2"に割り当てられているのを確認。

次はまずSDカードの中身を読みだしてイメージファイルにする。"of="の後がイメージファイルの保存先、ファイル名なので自分の環境に合わせて適宜修正。
読み込んでいる時間が結構長く画面に何も変化が無いので心配になりますが、終わるまでひたすら待ちます。16GBで42分ぐらいかかりました。

  • sudo dd if=/dev/disk2 of=./RPI_backup.img

次は書き込み方法。SDカードを差し込んだあと一旦アンマウントして、その後ddコマンドで書き込みます。
書き込みもやっぱり時間がかかりますが、ひたすら待ちます。16GBのSDカードで15分ほどかかりました。

  • diskutil umountDisk /dev/disk2
  • sudo dd if=./RPI_backup.img of=/dev/rdisk2 bs=1m

これでいつでもリストア出来るようになりました。
さてまた色々試していこう。

今回は下記サイトを参考にさせていただきました。
からあげさんのサイト
eye4brainさんのサイト

Raspberry Piに挑戦-Bluetoothスピーカーの接続

前回Raspberry PiのバージョンがJessieというものに変わりBluetoothキーボードの接続について書きましたが、続いてBluetoothスピーカー。
とりあえず自分がやったことを書いていきます。あ、接続したスピーカーはAnkerの小型スピーカー、A7910です。

まずはbluetoothオーディオに必要らしいものをインストール。

  • sudo apt-get install pulseaudio-module-bluetooth
  • sudo apt-get install pavucontrol

続いて"sudo service bluetooth restart"といれてbluetoothサービスの再起動をすれば良いはずですが、今なら単純にシステムを再起動でも良いかと。

再起動したらターミナルを開き

  • bluetoothctl -a
  • power on
  • pairable on
  • scan on
ここでBluetooth機器の検索を始めアドレスと機器名がどんどん表示されていきますので、目的の機器のアドレスをメモるかコピーしておきます。
続いてペアリングに入ります。#は接続したい機器の英数字を入力してください。
  • pair ##:##:##:##:##:##
ペアリングがうまくいくと「Pairing successful」と表示されるので続けて下記を入力。
  • paired-devices
これでペアリングされたか確認。続けて下記を入力。接続する機器、信頼される機器として登録、となっているようです。
  • connect ##:##:##:##:##:##
  • trust ##:##:##:##:##:##
・・・これでたぶんうまくいくはずです。あとは「quit」と入力すると元のターミナル画面に戻ります。
ターミナル画面に戻ったら
  • aplay /usr/share/sounds/alsa/Front_Center.wav
などで音が鳴るか確認しておきます。
bluetoothスピーカーからでる音量の調整はデスクトップの右上にあるスピーカーアイコンでは調整できない(はず)なので、メニューの中に「サウンドとビデオ」「PulseAudio音量調整」が追加されていますので、ここからBluetoothスピーカーの音量調整を行います。

2015/12/30

Raspberry Piに挑戦-Bluetoothキーボードの接続

ここ4,5日ほどはまっていたのがこれ、Bluetoothキーボードの接続。
ちょっと前にRaspberry PiのバージョンがJessieというものに変わったと書きましたが、これにともないBluetooth関連のパッケージも変わった模様。
他のサイトの引用ですが「bluez-utils というパッケージがなくなったようで bluez-simple-agent, bluez-test-device, bluez-test-input 等のコマンドが使えません」とあります。
(引用先: http://kakakikikeke.blogspot.jp/ )

自分が手本にしたサイトはbluez-simple-agentを使うものしかないけど自分の環境ではどうやっても出てこない、手詰まりだったんですがここを見つけてやっと理由がわかり早速引用先に従い設定・・・出来ない。
結局引用先のさらに先の参考先の手順で手持ちのBluetoothキーボードを接続できました。

以下は自分のメモ用。他の環境ではどうかわかりません。
Raspberry Pi本体にはBluetoothがないため、まずはアダプターを用意します。
色々ググッて、最終的にこのサイトをみてI/OデータのBroadcomのチップを使っているらしいBluetooth USBアダプターを購入。

接続するUSBキーボード、というか10キーはこちら。この10キーの紹介はまた後で

物が揃ったのでRaspberry Piの設定。まずBluetooth関連のパッケージをインストールします。bluemanはGUIベースで設定するツールです。
(bluemanでも接続作業はできますが、手持ちのBluetooth10キーはこちらではどうやっても接続できませんでした)

  • sudo apt-get install bluetooth blueman
Bluetooth関連はパッケージをインストールしたあとは一回再起動したほうが良いみたいです。

再起動後はターミナルでの作業となります。ますBluetooth USBアダプターが認識されているか確認。lsusb というコマンドを入力し、それらしい名前が出ていれば大丈夫かと。
ここからが初めて見るコマンド郡。下記のように入力していきます。

  • bluetoothctl -a
ここからbluetoothのターミナル?に変わります。
続いて入力していきます。
  • power on
  • agent KeyboardOnly
  • default-agent
  • pairable on
  • scan on
ここでBluetooth機器の検索を始めアドレスと機器名がどんどん表示されていきますので、目的の機器のアドレスをメモるかコピーしておきます。
続いてペアリングに入ります。#は接続したい機器の英数字を入力してください。
  • pair ##:##:##:##:##:##
ペアリングがうまくいくとターミナルにPINコードが表示されますので、表示されたPINコードをBluetoothキーボードから入力。
うまくいくと「Pairing successful」と表示されるので続けて下記を入力。信頼される機器として登録、接続する機器、となっているようです。
  • trust ##:##:##:##:##:##
  • connect ##:##:##:##:##:##
うまくいくと「Connection successful」と出るので「quit」と入力すると元のターミナル画面に戻ります。

この手順で作業して自分の環境でもうまく接続・・・1回めはダメで、再起動後に再挑戦したらうまく接続できました。
\

上記の作業の中でペアリングした機器を信頼させる作業もしているので再起動後も自動接続されるはずです。
自分の環境では自動的に接続されました。

最新環境はいいけど、いままでの先人の知識がすべて使えなくなるのはきついです

2015/12/29

Raspberry Piに挑戦-VNCサーバーの設定

最低限の設定が終わったので次の段階。
普段使っているPCから操作できるようにVNCサーバーをインストールします。
VNCサーバーも色々種類があり買った本には「TightVNC」が通信データを圧縮して軽快に動作するとありましたが、TightVNCはRaspberry Piに接続しているディスプレイの画面と別の画面、新規のX Windowを作りそれを表示するとのこと。
自分の用途の場合は同じ画面が表示されてほしいので、同じ画面を表示するという「X11VNC」をインストールします。

色々なサイトの例にしたがい、引き続きターミナルのCUI環境から操作。
(GUIはマウスで操作できますがリストの表示・検索に時間が掛かるので、インストールするパッケージの名前がわかっていたりコピペの場合はCUIで操作したほうが早いです)

  • sudo apt-get -y install x11vnc
apt-getの後に-yが付きましたが、これは途中でy/nと聞かれた時にyを自動入力するオプションです。

続いてx11vncの接続時パスワードの設定。
  • x11vnc -storepasswd
「Enter VNC password」と出るので設定するパスワードを入力、確認用でもう一度入力、パスワードを保存するか聞いてくるので y を入力。
設定が終わったので、下記コマンドで起動します。
  • x11vnc -usepw

長いメッセージが出て止まりますので、ここからは別のPCから接続できるか確認。
別のPCでVNC Viewerを起動しRaspberry PiのIPアドレスにX11VNC起動時に表示されたPORT番号(5900が標準かと)を付加してConnect。


ContinueやOKを押していきパスワード入力画面になったら先ほど設定したパスワードを入力してOK。これで表示されます。
(Raspberry PiのIPアドレスはRaspberry Piのデスクトップ画面の右上のPCのアイコンの上にカーソルを持っていくと表示されます)

リモート先PCのVNC Viewerを閉じると、Raspberry PiのX11VNCも終了します。これだと不便なのでRaspberry Piの起動時に自動起動し、終了しない設定を施します。
Raspberry Piのファイルマネージャなどで「/home/pi/.config/」の下に「autostart」というフォルダを作成し、その中に「x11vnc.desktop」というファイルを作成。
ファイルには下記内容を書き込みます。

  • [Desktop Entry]
  • Encoding=UTF-8
  • Type=Application
  • Name=X11VNC
  • Comment=
  • Exec=x11vnc -usepw -forever -display :0 -ultrafilexfer
  • StartupNotify=false
  • Terminal=false
  • Hidden=false
(20160123: パスワードを使用しない設定になっていたのを修正)
これで再起動するとVNCサーバーが起動したままになるので、Raspberry Piにキーボードやディスプレイを接続する必要が無くなります。
(上記の設定ファイルを別のPCで作っておきFTPクライアントでRaspberry Piに接続、目的のフォルダを作って作成しておいたファイルをアップロードする、という手もあります)


VNC経由で表示される画面は最初にRaspberry Piにつないでいたディスプレイの大きさと同じになります。
自分の場合Raspberry Piにつないでいたディスプレイは1920x1200、リモート先はノートPCのためこれより小さい。このためリモート先では全体の画面が見えずスクロールさせないといけない状態です。

そこでRaspberry Piの起動時のディスプレイサイズを変更します。
Raspberry Piの「/boot/config.txt」というファイルを編集します。
上記のファイルは管理者権限でないと編集できないので、ターミナルから下記のように入力して編集します。

  • sudo leafpad /boot/config.txt
管理者権限で「leafpad」というエディタを起動、「/boot/config.txt」を編集するというものです。
(「leafpad」の代わりに「vi」としているところが多いですがunixに殆ど触ったことがない自分みたいな人間にはviは使いこなせません。leafpadはGUIのエディタでまあ大抵の人は使えるかと思います)

config.txtは、10行目ぐらいにある「#disable_overscan=1」の最初の#を削除。
(#はその行がコメント行であることを示しています。これを消すことでその行が意味をもつ設定になります)
続いて「#hdmi_group=1」「#hdmi_mode=1」とある行で、同じく#を削除し、後ろの数字も変更します。
自分の環境では「hdmi_group=2」「hdmi_mode=46」と設定。hdmi_modeが画面サイズの設定で、46は1440x900、60Hzの設定。
(その他、22で1280x768、34で1280x960、41で1400x1050、56で1600x1200、82で1920x1080に。詳しい設定はどっかで説明していると思います)

そして「# NOOBS Auto-generated Settings:」とある行から下が自動設定されたディスプレイの情報。
ここから下のすべての行の頭に#をつけます。
編集が終わったら保存、エディタを終了して再起動。
これで指定した画面サイズでRaspberry Piが起動、VNCで接続してもいい大きさで表示されるようになりました。

Raspberry Piに挑戦 -初期設定

一からRaspberry Piの環境構築。自分の設定環境のメモとして残していきます。

まずは配布元からOSのインストール用ファイルのダウンロード。
https://www.raspberrypi.org/downloads/

「NOOBS」と「イメージ」の2種類の形式で配布しており、一般的には「NOOBS」の方が楽だということなのでこちらを選択。
NOOBSも必要なものを一度にダウンロードするものと、最小限の物をダウンロードしインストールするときにネット経由で必要なファイルを引っ張ってくる「LITE」バージョンがあるそうです。環境にもよるかもしれませんが、自分は普通のNOOBSの方を選択。ファイルのサイズが大きい(ver1.5のzipファイルで1.1GB)のでダウンロードに時間がかかるのが難点です。

ファイルをダウンロードしている間にSDカードのフォーマット。SDカードは8GBもあれば十分足りるそうですが、今は安いし16GBぐらいが適度かと。
フォーマットはOSの標準のものでなくSD Associationのフォーマッターを使うことが推奨されているようなのでそれに従います。
http://www.sdcard.org/jp/downloads/formatter_4/index.html

こちらのフォーマッターで消去設定を「上書きフォーマット」、「論理サイズ調整」をONにしてフォーマットするとのこと。
このフォーマットは論理サイズ調整の作業があるため、容量が大きくなるほど時間がかかります。

NOOBSのダウンロードが終わったら解凍し、展開されたファイルをフォーマットしたSDに全部コピー。
そしてそのSDカードをRaspBerry Piに挿して電源をつなぐと、すぐにインストール画面が表示されます。
(ダウンロード画面はNOOBS Ver1.5とあったけど、この画面はVer1.4となってる・・・)


NOOBSではここでインストールするOSが選択できるようになってます。自分の場合は「Raspbian」を選択。あと画面下の方に言語とキーボードを選択できるようになっていますが、この画面上の表示とキーボードの設定が変わるだけみたいです。

「Install」ボタンを押すとインストール開始。あとは待っているだけで、作業が終わるとダイアログが表示されるので「OK」ボタンを押すと再起動、インストールされたOSで立ち上がります。
買った本やいろんなサイトを見るとこの後はコマンドプロンプト画面で初期設定画面が表示されるとありますが、自分の場合は最初からデスクトップ画面が表示されるようになっていました。

(RaspbianのJessieというバージョンから変わった模様)

ここからは自分の環境作り。まずは本体とインストールされているアプリケーションを最新にする。
GUIで操作出来るものが入っていますが、本や参考書ではこちらの方法は書いてないのでとりあえずターミナルを開いてCUIで各種設定。

まずはインストールされているアプリケーションを最新にする。細かい内容は置いといて次の通り入力していきます。

  • sudo apt-get update
  • sudo apt-get upgrade
  • sudo apt-get dist-upgrade
上からパッケージ情報を最新にする、導入されているパッケージを更新する、導入されているパッケージの構成変更を伴う更新を行う、だそうです
(ちなみにsudoはその後に続くコマンドを管理者権限で実行するというもの。デフォルトでは「Pi」というユーザー名でログインしているため、大抵のサイトでこのように説明されているかと思います)

つづいてRaspberry Pi本体のアップデート。下記のように入力してEnterで実行されます。
  • sudo rpi-update
Ver4.1.13から4.1.15に変わりました

続いてコマンドプロンプト画面でやるはずだった初期設定。Menu - Preferences - Raspberry Pi Configuration がそれにあたります。

内容はGUIの画面を見ればなんとなくわかるかと。自分の設定に合わせて変更していき、Locale、Timezone、Keyboardもここで変更します。
(ここで変更するまではLocale、TimezoneはUK、キーボードもUKの設定で操作している状態です。)

これで再起動するとメニューが日本語表示に・・・なりません。文字化けします。

どうも標準では日本語フォントがインストールされていないようなので、再起動前に日本語フォントをインストールしておく必要があります。
(再起動してしまうといろんな画面で文字化けした状態なので、操作が困難になります)
フォントも色々種類があるようですが、自分は次の物を入れました。(20160123追記)また日本語入力システムはJessieから追加されたという、Googleが開発した日本語入力システムMozcを入れました。

  • sudo apt-get install fonts-ipaexfont
  • sudo apt-get install ibus-mozc
本や参考にしたサイトも先にフォントを入れろとか書いてないし、最近のバージョンからでしょうか。

これで最低限の設定は出来たかと。