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
本や参考にしたサイトも先にフォントを入れろとか書いてないし、最近のバージョンからでしょうか。

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

2015/12/27

Raspberry Piに挑戦 1

前の投稿までで書いたとおりRaspberry Piを使ったキッチンタイマー作り。
一応動くものは出来ていたんですが、Bluetoothスピーカーを繋ごうとしたところでなんかうまくいかなくなりました。
接続はされますが音が綺麗に出ない。色々試してみましたがうまくいかず。OSが販売元で日本語環境にあらかじめ設定されて入れられているものを使用しており、すぐに使えますが自分には必要ないものも色々入っているのもあるかな〜と思い、すっぱりフォーマット。
ということで一からインストールし直して環境を作っていきます。

2015/12/20

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

Raspberry Piにディスプレイとキーボードを繋げていますが、なんかスマートじゃない。
ということで本にしたがってSSHサーバー、VNCサーバーの設定。再起動して自動的に起動することも確認したら次はMacから接続する設定。
これも本を見ながら設定していくと、あっさりリモート操作出来るようになりました。これでMac上だけで操作できる環境に。

SSHを使い作成したプログラムをコピーし、Raspberry Pi上のターミナルから実行すると・・・
あ、動いた。


音声はOS依存の機能のため出ませんが、それ以外の動作はちゃんと機能している。お〜よく出来ているもんですね。
さて、音声が出るようにしなくては。

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

前回まではCUIベースでいいかなと思っていたけど、キーの入力を受け付けるいい方法がわからずGUIにすることに。
GUIだとtkinterというものをインポートして作るのが一般的だそうで、幸いいいアラームのサンプルも見つかったのでそれベースに手を加えていく。

元のプログラムはボタンを押して時間をセット、スタートさせるものだったのでそれにテキスト入力を受け付けできるようにする。
停止状態の時に入力されたら前回作った受け付けた数字を時間として入力する処理を入れ込む。
加えて"0"が入力されたら残り時間をお知らせ、"00"が入力されたら停止。タイマーの開始時や残り時間の通知は音声で知らせる処理を入れる。
色々試行錯誤して、なんとか思ったように動くようにはなりました。

とりあえず思ったように動くタイマーが出来たので、やっとRasberry Piでの作業に移ります。

2015/12/13

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

本体が届いたので、動作確認のため準備。
流石に裸のままではナンなので、ケースも準備。
左が本体、右が今回用意したケース。アクリル?板を重ねてケースにするもので、効くかどうかわからないヒートシンク付き。

組み立ては先に書いたとおり重ねていくだけ。底板と1枚載せてRaspberry pi、ここでヒートシンクを付けて残り3枚を乗せてネジ止め。
ひっくり返して足を付けて完成。

これで組み立て完了。OS入のSDカードを挿してHDMIケーブル、LANケーブル、キーボード・マウスをつなぎmicto USBの電源を挿すと起動開始。

コマンドプロンプト画面の後にX Windowも開き起動完了! ネットワークも問題なく繋がっている!
あっさり行き過ぎてちょっと拍子抜けのところも。昔と比べると本当に楽になったものです。

動作確認も終わったので、こっちはちょっと置いといてソフトウェアの方を作っていきます。

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

Raspberry Piで使えるプログラム言語は色々あるそうですが、Pythonというのが推奨みたいなのでこれを勉強することに。
会社でVBAを使っている程度でどこまで扱えるのだろう・・・

まずはPythonをダウンロードしてインストール。
インストールしてからタイマーのプログラムの勉強のため色々検索。
・・・OSXって最初からPythonが入っているんですね。まあバージョンが少し古いようなので、最新版でテストする環境もあったほうがいいか。

プログラムの内容としては数字を入力、それを秒に変換してカウントし0になったら終了する、という内容。
時間の入力は数字を入力し下2桁は秒、それ以上は分として認識するようにする。
最初は表示器をつける予定は無いので音声でカウントする時間とカウント終了を知らせるするようにする。Raspberry PiとOSXで音声合成のやり方は全く違うと思いますが、まずはOSXで動くものを作る。
そんな感じで作ったのがこちら。


動作させるとこんな感じ

とりあえず動作するものは出来ましたが、これだとカウント中は他の事が出来ない。
もっと違う形でカウントするように替えなければ。

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

iPodtouchをキッチンタイマーとして使っていましたが、その後売却。
その役目はiPadに引き継がれたのですが、音量を最小にしているとアラームが聞こえなかったりとちょこちょこ不具合が。
やっぱり専用のタイマーが無いと、思い市販のタイマーを色々見ますがなかなか自分が欲しいと思うものがない。

無ければ作ればいい! ということでキッチンタイマーを造ります。

ハードウェアは巷で流行っているらしい「Raspberry Pi」にします。
たかがタイマーには贅沢かもしれませんが、この手の物に疎い自分としては情報が揃っているものの方がありがたいので。

本体以外に初期設定するためのディスプレイとキーボード・マウスが必要ですがこれは手持ちのもので。
あとはOSを入れるSDカードですが、手持ちのmicroSDカードで余っているものが無い。
色々相性もあるらしいし、到着後OSをインストールする必要もあるのでちょっと高いかもしれませんがOS入りのSDカードを買っちゃいます。

情報はネット上にいっぱい有りますが、おもいっきり初心者なのでやっぱり本も持っておこうかと。
amazonで買おうかと思いましたが結構高いのと図書カードが余っているので本屋さんで購入。

物を手配したので、届くまで本を読みながら予習します。