Raspberry Pi 覚え書き

小型PC、ラズベリーパイ3を使って遊んだプロセスを記録するページ

Raspberry Pi 3でNAS-ファイルサーバーを作る

1.Raspbain jessie with Pixelをインストールする

Windows10-PCを使ってラズベリーパイを設定する手順を解説する。
用意するもの
・SD Formatter 4.0
   https://www.sdcard.org/jp/downloads/formatter_4/
・Win32 Disk Imager 0.9.5
   https://ja.osdn.net/projects/sfnet_win32diskimager/
以上のフリーソフトをあらかじめWindowPCにインストールしておく。

ラズベリーパイ公式サイト>DOWNLOADS>RASPBIANのページ*から
RASPBIAN JESSIE WITH PIXEL-"2017-04-10-raspbian-jessie.zip"をダウンロード。
ZIP形式になっているので解凍してイメージファイル"2017-04-10-raspbian-jessie.img"を取り出す。
*https://www.raspberrypi.org/downloads/raspbian/
※このページ執筆時点の最新RASPBIAN JESSIE WITH PIXELが"2017-04-10-raspbian-jessie.zip"であった。
※torrent形式かzip形式どちらかを選ぶことができる。torrentユーザーならtorrent経由でダウンロードした方が速い。torrentを持っていない/何のことかわからない人はzip形式をダウンロードすべし。

■MicroSDカードをフォーマットする
PCにMicroSDカードをセットし、SD Formatter 4.0を開く。
"Drive"を間違えないように。"クイックフォーマット、論理サイズ調整ON"とする。"Volume Label"は空欄でもよい。
※MicroSDカードは16GB以上を推奨する。
※調子が悪ければ"上書きフォーマット"を試してみる。
※MicroSDカードとラズベリーパイには相性がある。詳しくは下記のサイト参照。
*http://elinux.org/RPi_SD_cards

■MicroSDカードにイメージファイルを展開する
Win32 Disk Imager 0.9.5を開く。
"Image File"は"2017-03-02-raspbian-jessie.img"を選択、"Device"でMicroSDカードが挿入されているドライブを選択したのち、"Write"を押す。

イメージファイルを展開したMicroSDカードをラズベリーパイに挿し、電源を入れる。問題なければ、Raspbian jessie with Pixelのデスクトップ画面が表示されるはずである。

■Raspbian jessie with Pixelの初期設定をする
メニューバー>Preferences>Raspberry Pi Cofigurationを開く。
"Interfaces"のタブの下、SSHがDisabeleになっているのでEnableをオンにする。以後、リブートのたびにパスワード変更を促す警告メッセージが出る。パスワードを変更するかしないかはご自身の判断で。
→SSHで接続しないのなら、当然Enableにする必要はない。後述するTera TermでラズベリーパイにアクセスするためにはSSHをオンにする必要がある。しかし、SSHをオンにしなくてもWindows標準のリモートデスクトップ接続を使ってアクセスすることができる。
"Lacarization"のタブの下、"Local"の"Language"を"ja(Japanese)"に、"Country"を"JA(Japan)"に、
"Timezone"を"Japan"に、"Keyboard"を"Japanese(PC-98xx Series)"に、
"WiFi Country"を"JP Japan"に設定。
※Timezoneを変更してもすぐに時計はアジャストされない。
※"Local"をデフォルトのままにしておくとメニューが日本語化されない。英語のメニューがお好きならここはそのまま。最低限"Keyboard"だけは"Japanese(PC-98xx Series)"に変えておいたほうがいいと思う。

■WiFiの設定をする
画面右上、メニューバーの中、Bluetoothの右の記号をクリック。
自宅のWiFiのSSIDを選んで"Pre Shared key"にパスワードを入力。
すぐにSSIDが表示されないときは、いったん"Turn off Wi-Fi"を選んだのち、再び"Turn On Wi-Fi"を選ぶと表示が正常化される。

■とりあえずアップデートする
以下の日本語IMEをはじめ、いくつかのアプリをインストールする時は事前にOSをアップデートしておいた方がいい。インストールに失敗しないためのおまじないだ。
左から4つ目のアイコン"LXTerminal"ターミナルを開いて以下を入力。
$ sudo apt update
※apt-getコマンドじゃなくてaptだけでもいいみたい。

■心配ならアップグレードもしてみる
$ sudo apt upgrade

最新のRaspbian jessie with Pixelは日本語フォントを内蔵しているので、別途日本語フォントをインストールする必要はない。しかし、日本語IMEをインストールしないと日本語の入力ができない。

■日本語IMEをインストールする
mozcをインストールする。ターミナルを開いて以下を入力。
$ sudo apt install uim uim-mozc
途中、続行しますか?[Y/n]が出たらyを押してEnter。
※"Language"が"en(English)"のままだと日本語入力できない。
再起動後にmozcが有効になる。
ちなみに再起動は
$ reboot
あるいは
$ sudo reboot
※SSHによるリモート接続からリブートを実行するときはsudoから書き始めないといけないようだ。

■ディスプレイ解像度を設定する
私のモニタはHDMI-1920 x 1080(スピーカ付き)だが、デフォルトでは画面いっぱいに表示されず黒い非表示領域が残る。そこでディスプレイ解像度を設定して表示領域をモニタにフィットさせる。
ターミナルを開いて以下を入力。
$ sudo nano /boot/config.txt
長い文字列が表示されるが、ずーっと下まで送って、最後の行に以下のコマンドを追記する。
hdmi_drive=2
hdmi_group=2 # DMT
hdmi_mode=82 # 1080p 60Hz
その後、Ctrl+O(上書き)を押す。Config.txtを上書きするか尋ねてくるのでEnterを押す。
Ctrl+Xを押して完了。
→hdmi_drive=2でスピーカ付きHDMIモニタから音が出るようになる。
→#に続く文字はコメントなので省略可。
→hdmi_mode=82は1920x1080/60Hzディスプレイに対応した設定である。それ以外の解像度の設定については以下のページを参照。
https://www.raspberrypi.org/documentation/configuration/config-txt.md
※メニューバー>Preferences>Raspberry Pi Cofiguration>Systemタブの下に"Set Resolution"ボタンがあるが、この中に"DMT mode 82 1920x1080 60Hz 16:9"が見当たらないので、/boot/config.txtを直接編集する。

以上で汎用PCとしての体裁が整った。

2.HDDをマウントしてファイルサーバーにする

■ntfs-3gをインストール
NTFS形式のHDDをマウントするためにntfs-3gをインストールする。
ターミナルを開いて以下を入力。
$ sudo apt install ntfs-3g
そしてリブート

■HDDを接続する
今回はSeagate(3TB)HDDを用意した。これをUSBでラズベリーパイに接続する。
ターミナルを開いてdf(disk filesystem)コマンドを入力。
$ df
以下のような文字列が表示される。
ファイルシス       1K-ブロック         使用          使用可 使用% マウント位置
/dev/root            29320680  3822304     23985904  14% /
devtmpfs                469688             0         469688   0% /dev
tmpfs                     474004             0         474004   0% /dev/shm
tmpfs                     474004      12596         461408   3% /run
tmpfs                         5120             4            5116   1% /run/lock
tmpfs                     474004             0          474004  0% /sys/fs/cgroup
/dev/mmcblk0p6       64366      19974           44392 32% /boot
/dev/sda2          930134012    290184    929843828  1% /media/pi/Seagate
tmpfs                       94804            0            94804   0% /run/user/1000

Seagate HDDのデバイスネームとして/dev/sda2が与えられている。
Seagate HDDは臨時に/media/piディレクトリにマウントされている。
以上を確認。※デバイスネームはシステムが勝手に割り当てるもので状況により変わる。

■新規にディレクトリ(フォルダ)を作る
ターミナルを開いて以下を入力。
$ sudo mkdir /mnt/usbhdd
mkdir(make directory)コマンドでmntフォルダの下にusbhddフォルダを作成した。

■HDDのマウント位置を変える
/media/piにマウントしたままでは以下の設定ができないのでマウント位置を変える。
ターミナルを開いて以下を入力。/dev/sda2をいったんアンマウントする。
$ sudo umount /dev/sda2
次に以下を入力。
$ sudo mount -t auto /dev/sda2 /mnt/usbhdd
これで先ほど作成した/mnt/usbhdd直下にマウントされる。

■ラズベリーパイ起動時に自動マウントされるようにする
上記の設定のままでは再起動すると設定がリセットされてしまう。再起動後も自動マウントされるようシステムファイル/etc/fstabに追記する。
ターミナルを開いて以下を入力。
$ sudo nano /etc/fstab
最後の行(# a swapfile is not swap partition,...の前)に以下を追記。
※長い空白はTabキーを入力。
/dev/sda2     /mnt/usbhdd     ntfs-3g     defaults     0     0
その後、Ctrl+O(上書き)を押す。fstabを上書きするか尋ねてくるのでEnterを押す。
Ctrl+Xを押して完了。
※書く場所を間違えると次回の起動でつまずくので注意。

■Sambaをインストールする
ファイルサーバを作成するためのプログラム、sambaをインストールする。
ターミナルを開いて以下を入力。
$ sudo apt install samba

■Sambaの設定をする。
ターミナルを開いて以下を入力。
$ sudo nano /etc/samba/smb.conf
最後の行に以下を追加
[RaspNAS]
comment = USBHDD
path = /mnt/usbhdd
public = Yes
read only = No
writable = Yes
guest ok = Yes
force user = pi

その後、Ctrl+O(上書き)を押す。smb.confを上書きするか尋ねてくるのでEnterを押す。
Ctrl+Xを押して完了。
※[RaspNAS]はWindowsPCで閲覧する時のサーバー名である。任意の文字を名称として設定して差し支えないが、Sambaが予約している単語は避ける。どのような単語が予約されているかはsmb.confを読めばわかる。
※comment =に続く文字はコメント文である。自分のための覚え書きなので何を書いてもよい。
$ reboot
でリブートするとSambaが起動する。
以上で、ファイルサーバ完成。

■ラズベリーパイのローカルIPアドレスを知る
ターミナルを開いて以下を入力。
 $ ifconfig
以下のような文字列が表示される。
eth0
Link encap:イーサネット ハードウェアアドレス x0:00:xx:00:00:x0
inet6アドレス: xx00::0x00:0xx0:0000:x0xx/64 範囲:リンク
UP BROADCAST MULTICAST MTU:1500 メトリック:1
RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:0 (0.0 B) TXバイト:0 (0.0 B)

lo
Link encap:ローカルループバック
inetアドレス:127.0.0.1 マスク:255.0.0.0
inet6アドレス: ::1/128 範囲:ホスト
UP LOOPBACK RUNNING MTU:65536 メトリック:1
RXパケット:140 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:140 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:0
RXバイト:11712 (11.4 KiB) TXバイト:11712 (11.4 KiB)

wlan0
Link encap:イーサネット ハードウェアアドレス x0:00:xx:00:x0:x0
inetアドレス:192.168.0.5 ブロードキャスト:192.168.0.255 マスク:255.255.255.0
inet6アドレス: xx00::xx00:xxxx:xx00:x0x0/64 範囲:リンク
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
RXパケット:599 エラー:0 損失:490 オーバラン:0 フレーム:0
TXパケット:194 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:94274 (92.0 KiB) TXバイト:30525 (29.8 KiB)

→注目すべきはwlan0の2行目、inetアドレス:192.168.0.5 
これがWiFiのローカルIPアドレスである。
192.168.0.Xとなる数列で、末尾の1桁はルータが勝手に割り当てる。

※ラズベリーパイのローカルIPアドレスを知る別の手段。
※私のWiFiルータはバッファロー製である。バッファロー製ルータの付属ユーティリティ"エアステーション設定ツール"の管理画面トップページ、"ネットワークサービス一覧を表示"を押すと、ローカルWiFi接続機器の一覧が表示される。そこからラズベリーパイのIPアドレスを知ることもできる。
※iPhineユーザーならばFingというiPhoneアプリが利用できる。ローカルWiFiをスキャンし、接続しているデバイスとIPアドレスのリストを表示してくれる。
※ルータを再起動するとローカルIPアドレスの割り当てがリセットされる。おそらく末尾1桁の数字が変わる。

■WindowsPCからファイルサーバにアクセスする
WindowsPCでエクスプローラを開き、検索窓に"\\192.168.0.5"を入力する。末尾の1桁は環境により変わる。
ネットワーク資格情報の入力欄
ユーザー名:pi
パスワード:raspberry
でアクセス可能。

上記の方法でアクセスすると以後、PCの電源を落とすまでエクスプローラ>ネットワーク経由でもアクセス可能となる。

3.ラズベリーパイをリモート接続する

WindowsPC、ラズベリーパイそれぞれに別々のモニタ、キーボード、マウスを用意できればよいが、通常はリモート接続によってひとつのモニタ、キーボード、マウスを共用することになろう。

■ラズベリーパイにSSHでリモート接続する
WindowsPCにTera Termをインストールする。ラズベリーパイ側はSSHをオンにしておく。
Tera Term
https://ja.osdn.net/projects/ttssh2/

Tera Teamを起動し、"ホスト"にローカルIPアドレス"192.168.0.X"を入力。
ユーザ名:pi
パスフレーズ:raspberry
でOKを押す。
ターミナル画面が開き、コマンド入力待ち状態となる。
SSHで開くことができるのはターミナル画面のみである。しかし、この画面からすべてのことが行えるので問題ない。

■ラズベリーパイにリモートデスクトップ接続する(xrdp)
ラズベリーパイにリモートデスクトップ接続する方法は二つある。ひとつはxrdp経由で行うもの。Windows標準のリモートデスクトップ接続になる。Windowsスタート画面、Windowsアクセサリの中にある"リモートデスクトップ接続"で接続できる。後述するVNCとは同時に利用できない。
ラズベリーパイ側の準備。リモートデスクトップ接続を有効にするために以下のふたつのプログラムをインストールする。ターミナルを開いて以下を入力。
$ sudo apt install tightvncserver
$ sudo apt install xrdp
WindowsPC側でリモートデスクトップ接続を起動。
"コンピュータ(C):"にローカルIPアドレス"192.168.0.X"を入力。
USERNAME:pi
PASSWORD:raspberry
でOKを押す。

■ラズベリーパイにリモートデスクトップ接続する(REALVNC)
ラズベリーパイに標準で組み込まれているリモートデスクトップ接続サービスはREALVNC経由によるものだ。そのクライアントソフトVNC ViewerはWindows、Mac、iOS、Andoroid...様々なホストをサポートしている。VNCを利用するためにはメニューバー>Preferences>Raspberry Pi Cofiguration "Interfaces"のタブの下、VNCをオンにする。リブートするとメニューバーにVNCアイコンが現れる。このVNCアイコンをクリックするとラズベリーパイのローカルIPアドレス"192.168.0.X"が表示される。
■WindowPCにVNC Viewerをインストールする。
VNC Viewerのダウンロードページ*にアクセスしてWindouws用VNC Viewerアプリをダウンロードする。
*https://www.realvnc.com/download/viewer/
ダウンロードしたVNC-Viewer-6.0.2-Windows-64bit.exeを好きなフォルダに置いてダブルクリックする。
空白部分で右クリック""New Connection"を選ぶ。"VNC Server"にローカルIPアドレス"192.168.0.X"を記入。"Name"は”RaspberryPi"とでもしておく。"Continue"を押して、USERNAME:pi、PASSWORD:raspberry、"Remember Password"にチェックを入れておく。OKボタンで接続を始める。
※iOSもサポートしているのでiPhoneにVNC Viewerを入れておけば、iPhone からもリモートデスクトップ接続できる。

WindowsPCとファイル共有する

Sambaを使ってWindowsPCとファイル共有する

■Sambaをインストールする
前述の通り

■Sambaの設定をする
ターミナルを開いて以下を入力。
$ sudo nano /etc/samba/smb.conf
最後の行に以下を追加
[RaspSHARE]
comment = HomePi
path = home/pi
public = Yes
read only = No
writable = Yes
guest ok = Yes
force user = pi
directory mode = 0777
create mode = 0666

その後、Ctrl+O(上書き)を押す。smb.confを上書きするか尋ねてくるのでEnterを押す。
Ctrl+Xを押して完了。
※[RaspSHARE]はWindowsPCで閲覧する時のサーバー名である。任意の文字を名称として設定して差し支えないが、Sambaが予約している単語は避ける。どのような単語が予約されているかはsmb.confを読めばわかる。
※comment =に続く文字はコメント文である。自分のための覚え書きなので何を書いてもよい。
※前述のファイルサーバ制作の時path =に続く文はpath = /mnt/usbhddで"mnt"の前に"/"があった。しかし今回、"home"の前に"/"はない。よくわからないがこれで確かにつながっている。

■Sambaを起動する
ターミナルを開いて以下を入力。
$ sudo service samba-ad-dc restart
または、リブート。

■WindowsPCからRaspberry Piにアクセスする
WindowsPCでエクスプローラを開き、検索窓に"\\192.168.0.X"を入力する。末尾の1桁は環境により変わる。
ネットワーク資格情報の入力欄
ユーザー名:pi
パスワード:raspberry
でアクセス可能。

■ファイルサーバとファイル共有を同時に実行する

[RaspNAS]
comment = USBHDD
path = /mnt/usbhdd
public = Yes
read only = No
writable = Yes
guest ok = Yes
force user = pi

[RaspSHARE]
comment = HomePi
path = home/pi
public = Yes
read only = No
writable = Yes
guest ok = Yes
force user = pi
directory mode = 0777
create mode = 0666

というように前述のファイルサーバの構文に続けて、ファイル共有の構文を書き足すことができる。この場合、WindowsPCから"\\192.168.0.X"にアクセスすると[RaspNAS][RaspSHARE]ふたつのフォルダが見える。

0x8007003Bエラーへの対応

0x8007003B 予期しないネットワーク エラーが発生しました

NASを利用するうち、Windowsからのファイルコピー時「0x8007003B 予期しないネットワーク エラー」が発生するようになった。この問題に関するフォーラムを調べたところ、これはラズベリーパイ側の問題ではなく、Windouws側の問題であるらしいことが分かった。
このエラーに対するいくつかの対処法が紹介されていたが実際に行ってみてもエラーは改善されなかった。このエラーは100%発生するわけではなく、数回に1回コピー成功/失敗する。
■Windows searchの無効化→効果なし
■Teredo tunneling pseudo-interfaceアダプタ無効化→効果なし、このアダプタは無効化しても再起動すると元通りになってしまう。
■ファイヤーウォール、ウィルス検知ソフト無効化→効果なし、そもそも私のウィルス検知ソフトはWindows Defenderのみでありサードパーティ製のものは持っていない。
■システムの復元→2016年10月まで遡って復元したが効果なし、しかも自動更新オプションにより数時間後には元通りにされてしまう。
■ハードディスクの不良ブロックを疑う→bakblocksコマンドで不良ブロックをサーチしたが検出されず。
■OSアップデートとアップグレードをする。→やや改善あり、成功率が高まった。・・・気がする。あまり効果ないかもしれない。
■複数ファイルをまとめてコピーせず、ファイル1個ずつコピーする。→やや改善あり、成功率が高まった。というより複数ファイルをまとめてコピーすると100%エラーとなる。
今なお、このエラーとの格闘が続いている。

Raspberry Pi 3に3.5インチタッチパネルをつなぐ

1.機器を接続する

用意するもの
・3.5インチタッチパネル(Elecrow製)
・キーボード
・マウス
以上をあらかじめラズベリーパイに挿しておく。
また、前述のフリーソフト
・SD Formatter 4.0
・Win32 Disk Imager 0.9.5
以上、2点もあらかじめWindowPCにインストールしておく。

2.ドライバ組み込み済みRaspbianをインストールする

私が購入した3.5インチタッチパネルは中国Elecrow製である。ElecrowのHP*にドライバ組み込み済みRaspbianOSのイメージファイルが置いてあるのでそれを使用する。
なお、ドライバ組み込み済みOSを使用せず、自力でドライバを組み込む場合の手順はこの次の項を参照されたい。
ElecrowのHP、左上CATEGORIESメニューをクリックして表示されるリストの中
Development Tools>Raspberry Pi>Display>3.5 Inch 480x320 TFT Display with Touch Screen for Raspberry Pi>Discriptionから
・Configuerd system for pi 3B
を選んでダウンロード
※DropBox経由でダウンロードする。DropBox会員となってログインしてからダウンロードした方がトラブルが少ないと思う。
※タッチパネルをGPIOに挿す時の挿し方についてはUser manualの中のドキュメントを参考にするとよい。
※このページ執筆時点での最新OSは"LCD35-2016-03-18-raspbian-jessie.img"であった。
*https://www.elecrow.com/

上記イメージファイルをMicroSDカードに展開し、ラズベリーパイに挿して起動する。
必要に応じて、WiFiの設定、リモート接続の設定をしておく。

3.メニューバーを再構築する

LCD35-2016-03-18-raspbian-jessieにtightvncserverおよびxrdpをインストールするとメニューバーが表示されなくなる障害を確認している。以下の手順でメニューバーを復活させる。
■メニューバーが表示されなくなる問題への対処
デスクトップを管理しているlxpanelファイルを再構築する。
Tera Team経由で以下を入力。
$ sudo rm -r .config/lxpanel
リブート後、メニューバーが復活していることを確認できるはず。しかし、ここで新たな問題発生。メニューバーの内容がRaspbian Jessie標準のものに置き換えられてしまうためMatchbox Keyboardのアイコンが消失してしまっている。

■Matchbox Keyboardアイコン(ショートカット)を復活させる。
Matchbox KeyboardのショートカットはMenuの中にもある。Menu>Accessoriesのサブメニューの中、"Keybord"と"Toggle Matchbox Keyboard"のふたつのショートカットを発見するだろう。"Keyboard"を選ぶとと3.5インチ幅いっぱいの巨大仮想キーボードが表示される。画面の約半分がキーボードで埋まってしまい、これはこれで使い物にならない。しかし、タッチペンでなく指で操作するならばこれくらい大きい方が良さそうだ。一方、"Toggle Matchbox Keyboard"を選ぶとその50%のサイズの仮想キーボードが表示される。元々あったキーボードショートカットはこちらの方である。

メニューバーの余白部分で右クリック。"Add / Remove Panel Items"を選択。"Panel Applets"のタブの下、"Application Launch Bar"をダブルクリック。"Application Launch Bar"すなわちメニューバーの中のアイコンの表示/非表示を切り替えられる設定ウィンドウが開く。まず左のペインから"Wolfram"と"Mathematica"のアイコンを選んでRemoveボタンを押そう。とにかくこの二つのアイコンは邪魔である。
次に右のペインの中、Accessoriesの左の+を押して下の階層を開く、この中に"Toggle Matchbox Keyboard"があるのでこれを選んでAddボタンを押す。最後にOKボタンを押す。これでメニューバーのアイテムに"Toggle Matchbox Keyboard"が登録された。

最新のRaspbianに3.5インチタッチパネルディスプレイドライバをインストールする

1.最新のRaspbianを入手する

■ラズベリーパイGPIOに3.5インチタッチパネルディスプレイを挿しておく。マウス、キーボード、HDMIモニタも接続しておく。
■MicroSDカードに最新のRaspbianのイメージを展開し、ラズベリーパイに挿す。そして電源を入れる。
■Locaraization、WiFi設定、SSHの有効化など必要と思う初期設定を済ませておく。updateも行っておく。
詳細は前項参照。

この記事執筆時点の最新Raspbianは2017-04-10-raspbian-jessieだが、最新Raspbianでは下記のディスプレイドライバがうまく動作しないので2017-03-02-raspbian-jessieを使用する。

2.タッチパネルディスプレイのドライバを入手する

私のタッチパネルディスプレイは中国Elecrow製である。Eleclowのホームページにドライバも置いてあるがバージョンが古い。なのでwaveshare.comからダウンロードする。
※Elecrowのホームページに置いてある古いドライバを使用するとオーディオが機能しなくなる不具合を確認している。

■waveshare.com-LCDの記事*にアクセス
*http://www.waveshare.com/wiki/3.5inch_RPi_LCD_(A)
文中のリンクからLCD-show-170309.tar.gzファイルをダウンロードする。このディスプレイドライバは2017-03-02-raspbian-jessie専用らしいのでこちらを選択する。リンクをクリックするとダウンロードを開始する。

ダウンロードしたファイルは/home/pi/Downloadsフォルダに保存されているはずである。このフォルダから出して/home/piフォルダに移動する。WindowsPCと同様、右クリックで「切り取り」→「コピー」でファイルを移動できる。
※上記リンクにはLCDパネル設定手順が英文で書いてある。以下の記事はその抜粋に過ぎない。
※3.5inch_RPi_LCD_(A)と3.5inch_RPi_LCD_(B)がある。(B)を使うと表示がネガポジ反転する。

3.タッチパネルディスプレイドライバをインストールする

■初期設定
ターミナルを開いて以下を入力。
$ sudo raspi-config
初期設定画面が開く。2017-03-02-raspbian-jessie以前のバージョンでは項目のトップに"Select Expand Filesystem"があったが、最新のRaspbianではこのオプションは不要になっている。
下↓カーソルキーを2回叩いて"3 Boot Options"をハイライトさせてEnter。
"B1 Desktop/CLI"をハイライトさせてEnter。
下↓カーソルキー3回たたいて"B4 Desktop Autologin"をハイライトさせてEnter。
Tabキー2回叩いて"Finish"をハイライトさせてEnter。
"Yes"をハイライトさせてEnter。自動でリブートする。

■tarファイルを解凍(tarファイルはzipのようなもので複数のフォルダ/ファイルをまとめて圧縮している)
ターミナルを開いて以下を入力。
$ tar xvf LCD*.tar.gz
/home/piフォルダの中にLCD-showフォルダが現れる。

■3.5インチタッチパネルディスプレイ用ドライバを起動
ターミナルを開いて以下を入力。
$ cd LCD-show
$ ./LCD35-show
スクリプト実行後、自動的にリブートし、ディスプレイが3.5インチタッチパネルディスプレイに切り替わる。

■HDMIに戻したい時
ターミナルを開いて以下を入力。
$ cd LCD-show
$ ./LCD-hdmi

私の環境では何もしなくてもタッチポイントとカーソルの位置がピッタリ同期している。キャリブレーションは不要だ。waveshare.com-LCDの記事にはキャリブレーションのやり方も書いてあるので、タッチポイントとカーソルの位置がずれている人は参考にするとよい。

Raspberry Pi 3でAmazon Echoを作る

1.準備

Amazon EchoはAlexa(アレクサ)と呼びかけると反応する音声コントロールによる人工知能である。開発者向けのボイスサービスサンプルプログラムを使うことで、ラズベリーパイからも利用できる。

まずはラズベリーパイを使用可能な状態にするための最低限の下ごしらえをしておく。
■SDカードをフォーマットし、Rasipbian Jessie with Pixelを書き込む。
■キーボード、マウス、モニタを接続、そしてSDカードをラズベリーパイに挿し、起動する。
■WiFiを使えるようにしておく。
■"Expand Filesystem"をクリック、SDカード容量最大値まで使えるようにしておく。
■"Locarization"の設定をしておく。
■OSをアップデートする。心配ならアップグレードもしておく。
■SSH経由でリモート接続するつもりなら、SSHをオンにしておく。
■WindowsPCからリモートデスクトップ接続するつもりならtightvncserverとxrdpもインストールしておく。

以上、詳細は前項に記載済みなのでそちらを参照。
さらに今回はUSBマイクと3.5mmイヤホンジャック入力のスピーカーも接続する。AlexaはUSBスピーカーに対応していない。
※HDMIモニタを接続していると音声出力が自動的にHDMIにセットされる。強制的に3.5mmイヤホンジャックに出力させるには
$ sudo raspi-config
7 Advance Optionsを>A4 Audio>1 Force 3.5mm ('headphone')jackをハイライトさせてTabキー<Ok>を選んでenter。Tabキー2回押して<Finish>選んでenter。

なお、ラズベリーパイでAlexaを利用する手順を詳細に説明するウェブページ*が既にある。私の説明はここに書かれていることとほぼ同じ内容である。
*https://github.com/alexa/alexa-avs-sample-app/wiki/Raspberry-Pi

2.Amazon Developerアカウントの登録

開発者向けのウェブサービス、Amazon Developerアカウントを取得し、ラズベリーパイで利用可能なセキュリティIDを発行してもらう。
まずはAmazon Developer Serviceのウェブページ*にアクセスする。
*https://developer.amazon.com/

言語設定から"Japanese(日本語)"も選べるが"English"のままにしておく。"Japanese(日本語)"を選択するとAlexaに関するリンクが非表示になってしまう。
上段のメニュー、Alexa>Alexa Voice Srevice>Stert Buildindのリンクをたどる。
Getting Started with the Alexa Voice Serviceのページ、"Sign up for a free Amazon developer account"のリンク*をクリック。
*https://developer.amazon.com/home.html

Sign Inのページ
■E-mail or mobile numberの欄にEメールアドレス
■初回登録時は◎I am a new costomer.に丸をつけて次へ
1.Profile Infomation-個人情報を偽りなく記入。日本の国番号は+81。
2.App Distribution Agreement-合意して次へ
3.Payments-開発したアプリで金儲けする意思があるか聞いている。両方とも◎No
※次回以降はパスワードを入力して// DEVELOPER CONSOLEポータルサイトにリンクする。

登録が完了すると// DEVELOPER CONSOLE(開発者のためのポータルサイト)にアクセスできるようになる。ここで上段ALEXA>Alexa Voice Service>Get Startedのリンクをだどる
[Register a Product Type]のメニューで"Device"を選択。

Create a new Device Typeのページ
Device Type Info
Company Nameのところにあなたの登録した名前が入っている。
Device Type IDは"my_device"とすること。他の名前では先へ進めない。
Display Nameは"My Device"
次へ

[Security Profile]ドロップダウンリストから"Create a new profile" を選択。
[General]タブ
Security Profile Nameに"Alexa Voice Service Sample App Security Profile"と記入。
Security Profile Descriptionに"Alexa Voice Service Sample App Security Profile Description"と記入。
次へ

・Security Profile ID
・Client ID
・Client Secret
が発行される。このうちClient IDとClient Secretは後々使用するのでコピーしておく。

次に、[Web Settings]タブをクリック。
[Alexa Voice Service Sample App Security Profile]のドロップダウンリストはそのまま
[Edit]をクリック。
Allowed Origins [Add Another]クリック、ブランクに"https://localhost:3000"と記入。
Allowed Return URLs[Add Another]クリック、ブランクに"https://localhost:3000/authresponse"と記入。
次へ

Devise Details
横142x縦130pixels以内のJPEG画像を登録できる。画像はリストに表示される。画像はあってもなくてもよい。
[Category]ドロップダウンリストから"Other" を選択。
Descriptionに"Alexa Voice Service sample app test"と記入。
Do you have plans to make your product available to the general public? ◎Noを選択。
次へ

Amazon Music
Apply for access to Amazon Music?◎Noを選択。
[Submit]をクリック。

Security Profileを有効にする
ここへ行く
https://developer.amazon.com/lwa/sp/overview.html

[Select a Security Profile] ドロップダウンリストから"Alexa Voice Service Sample App Security Profile" を選択。
[Confirm]をクリック。

Consent Privacy Notice URLに"http://example.com"と記入。
[Save]をクリック。

"Show Client ID and Client Secret"のリンクをクリック。
Client ID と Client Secretが表示されていることを確認する。

なお、セキュリティプロファイルを作成する手順を詳細に説明するウェブページ*が既にある。私の説明はここに書かれていることとほぼ同じ内容である。
*https://github.com/alexa/alexa-avs-sample-app/wiki/Create-Security-Profile

3.ラズベリーパイのセットアップ

■alexa-avs-sample-appをコピーする
ターミナルを開いて以下を入力。
$ cd Desktop
$ git clone https://github.com/alexa/alexa-avs-sample-app.git
デスクトップに"alexa-avs-sample-app"という名のフォルダが作成されている。このフォルダを開いて内容を確認する。Rasipbian Jessieのファイルマネージャーがファイルの存在に気づいていないことがあるので、フォルダを開いて確かにファイルがあることを確認する。

■alexa-avs-sample-appのインストールスクリプトを編集する
ターミナルを開いて以下を入力。
$ cd ~/Desktop/alexa-avs-sample-app
$ sudo nano automated_install.sh

ProductID=my_device
ClientID=amzn.xxxxx.xxxxxxxxx
ClientSecret=4e8cb14xxxxxxxxxxxxxxxxxxxxxxxxxxxxx6b4f9

Amazonから発行されたClientIDとClientSecretをそれぞれ記入する。
その後、Ctrl+O(上書き)を押す。automated_install.shを上書きするか尋ねてくるのでEnterを押す。
Ctrl+Xを押して完了。

■インストールスクリプトを実行する
ターミナルを開いて以下を入力。
$ cd ~/Desktop/alexa-avs-sample-app
$ . automated_install.sh
これでAlexaインストール完了。

4.Alexaの起動

3つのターミナルウィンドウを別々に開いて3つのコマンドを実行する。
■ターミナル1
以下を入力。
$ cd ~/Desktop/alexa-avs-sample-app/samples
$ cd companionService && npm start

■ターミナル2
以下を入力。
$ cd ~/Desktop/alexa-avs-sample-app/samples
$ cd javaclient && mvn exec:exec
Webブラウザを起動する旨の警告と[Yes/No]のボタンが出るので[Yes]をクリック。直後に[OK]ボタンが出るがすぐにこれを押してはいけない。
Webブラウザが起動し、Amazon Developer Serviceにログインする。
JessieではここでしばしばHTTPS警告「この接続ではプライバシーが保護されません」が出ることが確認されている。左下[詳細設定]ボタンを押してこれを回避する。
認証が通ると"device tokens ready"と表示される。ここで先ほどの[OK]ボタンを押す。
[Listen]ボタンが表示される。このボタンを押してAlexaを呼び出すことができる。

■ターミナル3
以下を入力。
$ cd ~/Desktop/alexa-avs-sample-app/samples
$ cd wakeWordAgent/src && ./wakeWordAgent -e sensory
これでWake Wordが使えるようになる。[Listen]ボタンを押さなくても"Alexa"と呼びかけるだけでポン♪という音とともにAlexaを呼び出すことができる。
"Good morning."と呼びかけてみよう。

MP3を再生する

1.VLCをインストールする

定番のメディアプレイヤー"VLC Media Player"をインストールする。
$ sudo apt install vlc
メニューバー、ラズベリーのプルダウンメニューに"Sound & Video"カテゴリが作られる。その中に"VLC Media Player"がある。
"VLC Media Player"を選んで起動する。初期画面はオレンジのパイロン。Media>Open File...のウィンドウから聴きたいmp3ファイルを選ぶ。
※デフォルトのRaspbianにmp3ファイルは存在しない。前述のファイル共有機能等を使ってあらかじめ他所からコピーしておく必要がある。/home/pi/Musicフォルダにでも置いておけばよいだろう。
※/home/pi/python_gameフォルダの中にいくつかのビープ音が収録されている。何でもいいから音を出したい時に便利。音符の形のアイコンなのですぐに見つけられるだろう。

2.Bluetoothスピーカーを接続する

音楽をBluetouthスピーカーから流してみる。Bluetouthスピーカーの電源を入れ、どこかのボタン(スピーカーの仕様によるので取説参照)を長押ししてペアリングモードにする。
ラズベリーパイのBluetouthアイコンをクリック。Add Device...のウィンドウからBluetouthデバイス名を選んで"Pair"を押す。
Bluetouthアイコンの2つ右、スピーカアイコンを右クリック。Bluetouthデバイス名を選んでチェックを入れる。これでBluetoothスピーカーから音が出るようになる。
※Bluetoothスピーカーは安定しない。時折音飛び、音切れが発生する。
※ブラウザでYouTubeを開いてミュージックビデオ等を再生しようとするとハングアップする。正直Bluetoothスピーカーは使い物にならない。

3.USBスピーカーを接続する

スピーカアイコンを右クリック。Audio Advantage MicroIIを選ぶ。Analogを選べば3.5mmイヤホンジャックから、HDMIを選べばHDMIモニタから、Bluetoothスピーカーを選べばBluetoothスピーカーから、Audio Advantage MicroIIを選べばUSBスピーカーから音が出る仕組み。

Python-Pygameを使ってみる

1.Pygameについて

Pygameはラズベリーパイにあらかじめインストールされているプログラム言語Pythonのためのモジュールである。ラズベリーのメニューの下、Gameの中にPython Gamesがあり、たくさんのゲームが収録されている。こんな立派なゲームを作ることはできないが、簡単なプログラムなら書けそうなので挑戦してみた。

2.Pygameを使ってMP3を再生する

Pythonでmp3を再生するスクリプトを書き、実行する。
まず、/home/piフォルダの中に再生したいmp3ファイルを置いておく。
ターミナルを開いて以下を入力。
$ nano audio_pygame.py
白紙の画面が表示されるので、下記のスクリプトを記述。
#!/usr/bin/env python
#-*- cording: utf-8 -*-

import pygame.mixer
import time

# mixerモジュールの初期化
pygame.mixer.init()
# 音楽ファイルの読み込み
pygame.mixer.music.load("ファイル名.mp3")
# 音楽再生、および再生回数の設定(-1はループ再生)
pygame.mixer.music.play(-1)
# 60秒間だけ再生
time.sleep(60)
# 再生の終了
pygame.mixer.music.stop()

その後、Ctrl+O(上書き)を押す。audio_pygame.pyを上書きするか尋ねてくるのでEnterを押す。
Ctrl+Xを押して完了。
/home/piにaudio_pygame.pyファイルが作成されている。その隣にmp3ファイルが置かれている。
※上記スクリプトの"ファイル名.mp3"の部分には隣に置いてあるmp3ファイル名を書いておく。

ターミナルを開いて以下を入力。
$ python3 audio_pygame.py
指定した"ファイル名.mp3"が60秒間だけ再生される。

3.Pygameを使ってデジタル時計を作る

Pythonでデジタル時計を表示するスクリプトを書き、実行する。
ターミナルを開いて以下を入力。
$ nano time_pygame.py
白紙の画面が表示されるので、下記のスクリプトを記述。
# -*- coding:utf-8 -*-

import pygame
from pygame.locals import *
import datetime
import sys

# Pygameの初期化
pygame.init()
# 大きさ300*200の画面を生成
screen = pygame.display.set_mode((300, 200))
# タイトルバーに表示する文字
pygame.display.set_caption("clock")
# フォントの設定(25px)
font = pygame.font.Font(None, 25)

#ループを作る
while True:
    # 画面を黒色に塗りつぶし
    screen.fill((0,0,0))
    # 変数clocktimeを定義、現在の年月日時分秒を代入
    clocktime = datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')
    # アンチエイリアスあり、文字色を白に設定
    text = font.render(clocktime, True, (255,255,255))
    # 文字列の表示位置x方向:75ドット、y方向:85ドット
    screen.blit(text, [75, 85])
    # 画面を更新
    pygame.display.update()

    # イベント待ち受け
    for event in pygame.event.get():
        # 閉じるボタンが押されたら終了
        if event.type is QUIT:
        # Pygameの終了(画面閉じられる)
        pygame.quit()
        sys.exit()


その後、Ctrl+O(上書き)を押す。time_pygame.pyを上書きするか尋ねてくるのでEnterを押す。
Ctrl+Xを押して完了。
/home/piにtime_pygame.pyファイルが作成されている。

ターミナルを開いて以下を入力。
$ python3 time_pygame.py
デジタル時計が表示される。

4.python_gamesフォルダについて

/home/piフォルダの中にpython_gamesフォルダがある。この中にはpygameで作られたゲームがスクリプトのまま収められている。例えばpython_gamesフォルダの中のflippy.py(オセロゲーム)をダブルクリックで開くとそのスクリプトを読むことができる。そしてこれを実行して実際にゲームをプレイすることができる。
ゲームをプレイするためにはまずカレントディレクトをpython_gamesフォルダに移す。

ターミナルを開いて以下を入力。
$ cd python_games
続けてflippy.pyを実行。
$ python3 flippy.py
これでオセロゲームの盤面が開く。