このページをはてなブックマークに追加このページを含むはてなブックマーク このページをlivedoor クリップに追加このページを含むlivedoor クリップ

目次

ログイン

IDpi
Passwordraspberry

基本操作

電源ON

 電源のmicroUSBケーブルを接続すると、Raspberry Piが起動する。

[補講]

電源OFF

 Raspberry Piはディスク書き込みがキャッシュされてて、いきなり電源を落とすとSDカード上に作ったシステムが破損し二度と起動しなくなる可能性がある。

1:電源スイッチは無いので、次のコマンドによりOS上でシャットダウンする。

pi@raspberrypi ~ $ sudo shutdown -h now

または

pi@raspberrypi ~ $ sudo poweroff

2:モニタの表示が消え、ACTの点灯が消えていることを確認してから、電源のmicroUSBケーブルを抜く。

[補講]「ACT」と書かれた緑色のLEDが点滅している場合には、SDカードにアクセスしているので、このときは電源を切ってはいけない。 ◇

初期設定

アップデート

1:OSのアップデートを調べる。

pi@raspberrypi ~ $ sudo apt-get update

2:アップデート情報をもとにOSをアップデートする。

pi@raspberrypi ~ $ sudo apt-get upgrade

3:Raspberry Piのファームウェアをアップデートする。

pi@raspberrypi ~ $ sudo rpi-update

日本語化

1:言語の設定を行う。

sudo raspi-config

 「5 Internationalisation Options」>「I1 Change Locale」に進む。

 「Configuring locales」で、次の項目を選択する。

・en_GB.UTF-8 UTF-8 ・ja_JP.EUC-JP EUC-JP ・ja_JP.UTF-8 UTF-8

 「Default locale」で、「ja_JP.UTF-8」を選択する。

2:設定画面のまま続けてタイムゾーンの設定を行う。

 「I2 Change Timezone」に進み、Asia、Tokyoを選択する。

[補講]ここまでの設定を施した後に、perlを実行した際にWarningが表示される際には、「.bashrc」ファイルに次を追加する。

pi@raspberrypi ~ $ export LC_ALL=ja_JP.UTF-8
pi@raspberrypi ~ $ export LANGUAGE=ja_JP.UTF-8

 設定後、次のコマンドを実行する。

pi@raspberrypi ~ $ source .bashrc

 Warningが表示されるか否かは、次を実行して確認できる。

pi@raspberrypi ~ $ perl -v

3:ローカルのキーボードを使用する場合には、キーボードの設定を行う。

 「I3 Change Keyboard Layout」を選択して、「Generic 105-Key(Intel) PC 」(「標準105キー(国際)PC」)→Japanese

4:日本語フォントをインストールする。

pi@raspberrypi ~ $ sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname

 コンソール上にて日本語を表示できるようにするために、jfbtermをインストールする。必要に応じてjfbtermを起動する。

pi@raspberrypi ~ $ sudo apt-get install jfbterm

 その後、再起動する。

pi@raspberrypi ~ $ sudo reboot

5:デスクトップのアイコン名やLXTerminalのメニューが日本語表示されていれば成功です。

日本語入力の設定

1:scim-anthyをインストールします。

pi@raspberrypi ~ $ sudo apt-get install scim-anthy

 その後、再起動する。

pi@raspberrypi ~ $ sudo reboot

2:Text Editorを起動して、日本語の入力ができるかを確認する。

 キーボードの[全角/半角]キーまたは[Ctrl]+[Space]キーで全角入力モードを切り替えることができる。

ネットワークの設定

無線LANのIPアドレスを確認する

pi@raspberrypi ~ $ ip addr show wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:22:cf:f5:f0:77 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.188/24 brd 192.168.1.255 scope global wlan0 ←ここの「/24」より前の部分。
       valid_lft forever preferred_lft forever
    inet6 fe80::d70c:43f6:e871:4516/64 scope link
       valid_lft forever preferred_lft forever

無線LANの反応を改善する

 パワーマネジメント機能が有効になっていると、無線LANアダプタが切断されることがある。

 まず、パワーマネジメント機能の有効・無効を確認するためには、iwconfigコマンドを実行する。

pi@raspberrypi ~ $ iwconfig
wlan0     IEEE 802.11bgn  ESSID:"ASUS"  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency:2.437 GHz  Access Point: 30:5A:3A:C6:79:38
          Bit Rate:72.2 Mb/s   Sensitivity:0/0
          Retry:off   RTS thr:off   Fragment thr:off
          Power Management:off ←ここ
          Link Quality=100/100  Signal level=99/100  Noise level=0/100
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

lo        no wireless extensions.

eth0      no wireless extensions.

 しかし、「Power Management:off」と表示されているにもかかわらず、実際には有効になっている機種もある。

 無効にするためには、次のファイルを新規作成してから、再起動する。

pi@raspberrypi ~ $ sudo vi /etc/modprobe.d/8192cu.conf
pi@raspberrypi ~ $ cat /etc/modprobe.d/8192cu.conf
options 8192cu rtw_power_mgnt=0 rtw_enusbss=1 rtw_ips_mode=1
pi@raspberrypi ~ $ sudo reboot

[補講]次のサイトを参考にした。

IPアドレスの固定化

 デフォルトではDHCPになっており、IPアドレスが変わるため、SSHでリモートアクセスする際に不便です。

pi@raspberrypi ~ $ sudo vi /etc/network/interfaces

 デフォルトでは次のようになっている。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
# interfaces(5) file used by ifup(8) and ifdown(8)
 
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
 
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
 
auto lo
iface lo inet loopback
 
iface eth0 inet manual
 
allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
 
allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

 これを次のように書き換える。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
# interfaces(5) file used by ifup(8) and ifdown(8)
 
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
 
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
 
auto lo
iface lo inet loopback
 
iface eth0 inet static
 
address 192.168.1.188
netmask 255.255.255.0
gateway 192.168.1.1
 
allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
 
allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

複数のWiFiにおいてプライベートIPアドレスを固定化する

 家ではルーター付属のAP、外ではモバイルルーターを利用するという状況を考える。Raspberry Pi内の設定を変更せず、自動的に固定IPアドレスに切り替える方法は次の通りである。Raspberry Piを持ち歩くという状況は少ないかもしれないが、まぼろし博覧会のイベント会場でRaspberry Piを使用する場面があったので紹介する。

 以下の方法を試す前に、設定ファイルはバックアップします。また、万が一に備えて、キーボードやモニターなどローカルから確認できる環境を整えます。

1:"/etc/wpa_supplicant/wpa_supplicant.conf"ファイルを編集する。

pi@raspberrypi ~ $ sudo cat /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="ASUS"
        psk="??????????"	←本来はパスワードの平文が入っている。
        key_mgmt=WPA-PSK
        id_str="HomeWifi"	←識別するための文字列
}

network={
        ssid="501HWa-548D8F"
        psk="??????????"	←本来はパスワードの平文が入っている。
        key_mgmt=WPA-PSK
        id_str="MobileWifi"	←識別するための文字列
}

[補講]priorityを設定すると優先度を指定できる。 ◇

2:"/etc/network/interfaces"ファイルを編集する。

pi@raspberrypi ~ $ cat /etc/network/interfaces
auto lo

iface lo inet loopback

iface eth0 inet static
address 192.168.1.189
netmask 255.255.255.0
gateway 192.168.1.1

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

iface HomeWifi inet static
address 192.168.1.188
netmask 255.255.255.0
gateway 192.168.1.1

iface MobileWifi inet static
address 192.168.128.188
netmask 255.255.255.0
gateway 192.168.128.1

3:設定を反映させるために再起動する。

pi@raspberrypi ~ $ sudo reboot

[参考]

日本語SSIDのWiFiに接続する

 ここでは、「応仁のLAN」というSSIDを用いているものとします。

pi@raspberrypi ~ $ sudo iwlist wlan0 scan

 スキャンすると、それらしきものが表示される(最後の"LAN"という部分、「"\○○」が複数出ることで推測)。

ESSID:"\xE5\xBF\x9C\xE4\xBB\x81\xE3\x81\xAELAN"

 これをそのまま"/etc/wpa_supplicant/wpa_supplicant.conf"ファイルで指定したがダメだった。

↓ダメな例

network={
        ssid="\xE5\xBF\x9C\xE4\xBB\x81\xE3\x81\xAELAN"
        psk="hogehoge_password"
        proto=WPA2
        key_mgmt=WPA-PSK
}

 ここではまったが、普通に日本語を指定すればうまくいった。

↓うまくいった例

network={
        ssid="応仁のLAN"
        psk="hogehoge_password"
        proto=WPA2
        key_mgmt=WPA-PSK
}

VNCの導入

VNCサーバー(Raspberry Pi側)TightVNC
VNCクライアント(Windows側)RealVNC Viewer

[補講]VNCサーバーにX11VNCを使うと、デフォルトデスクトップがそのまま出力される。 ◇

1:Raspberry PiにtightVNCをインストールする。

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install tightvncserver

2:VNCサーバーを起動する。

pi@raspberrypi ~ $ tightvncserver

 初回はパスワードの入力を促される。

 次のコマンドで起動を確認する。

pi@raspberrypi ~ $ ps -ef | grep tightvnc | grep -v grep
pi        3300     1  0 12:03 pts/1    00:00:00 Xtightvnc :1 -desktop X -auth /home/pi/.Xauthority -geometry 1024x768 -depth 24 -rfbwait 120000 -rfbauth /home/pi/.vnc/passwd -rfbport 5901 -fp /usr/share/fonts/X11/misc/,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/75dpi/,/usr/share/fonts/X11/100dpi/ -co /etc/X11/rgb

 さらに、待ち受けポート番号を確認するために、次のコマンドを入力する。5901番がLISTEN状態になっている。

pi@raspberrypi ~ $ netstat -lnt

 なお、終了する場合には、次のように入力する。

pi@raspberrypi ~ $ vncserver -kill :1
Killing Xtightvnc process ID 1234

3:VNCサーバーの自動起動の設定を行う。

pi@raspberrypi ~ $ sudo vi /etc/init.d/vncboot
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
#! /bin/sh
# /etc/init.d/vncboot
 
### BEGIN INIT INFO
# Provides: vncboot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start VNC Server at boot time
# Description: Start VNC Server at boot time.
### END INIT INFO
 
USER=pi
HOME=/home/pi
 
export USER HOME
 
case "$1" in
    start)
        echo "Starting VNC Server"
        #Insert your favoured settings for a VNC session
        su $USER -c '/usr/bin/vncserver :1 -geometry 1280x720 -depth 24'
        ;;
 
    stop)
        echo "Stopping VNC Server"
        su $USER -c '/usr/bin/vncserver -kill :1'
        ;;
 
    *)
        echo "Usage: /etc/init.d/vncboot {start|stop}"
        exit 1
        ;;
esac
 
exit 0

[補講]シェルスクリプトはhttps://www.raspberrypi.org/documentation/remote-access/vnc/を参考。 ◇

pi@raspberrypi ~ $ sudo chmod 755 /etc/init.d/vncboot
pi@raspberrypi ~ $ sudo update-rc.d vncboot defaults

[補講]次のような警告が表示された場合は、スクリプト内で「#! /bin/sh」が最初に書いてないという意味である。

insserv: warning: script 'K01vncboot' missing LSB tags and overrides
insserv: warning: script 'vncboot' missing LSB tags and overrides

あくまで警告なので問題ありませんが、気になる場合は修正する。 ◇

pi@raspberrypi ~ $ sudo reboot

4:再起動後に、先ほどのpsコマンドでVNCサーバーが自動起動していることを確認する。

pi@raspberrypi ~ $ ps -ef | grep tightvnc | grep -v grep
pi         701     1  0 13:23 ?        00:00:00 Xtightvnc :1 -desktop X -auth /home/pi/.Xauthority -geometry 1280x720 -depth 24 -rfbwait 120000 -rfbauth /home/pi/.vnc/passwd -rfbport 5901 -fp /usr/share/fonts/X11/misc/,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/75dpi/,/usr/share/fonts/X11/100dpi/ -co /etc/X11/rgb

[補講]次のサイトを参考にした。

5:RealVNCの公式サイトからインストーラーをダウンロードして、インストールする。

 クライアント起動後、VNC Server欄に「[IPアドレス]::[ポート番号]」を入力する。ここでは「192.168.1.188::5901」とする。
 PasswordにVNC Serverで設定したパスワードを入力すると、Raspberry Piの画面が表示される。

リモートデスクトップで接続する

 リモートデスクトップはクライアント側で解像度や色数を変更することができるので、VNCより便利な場合がある。また、VNCだとScratchやsudo idleが動かない場合がありますが、リモートデスクトップであれば普通に動く。

1:xrdpをインストールする。

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install xrdp

2:日本語キーボードを利用している場合は、設定ファイルを追加する必要がある。ファイルは、xrdpユーザ会のサイトからダウンロードする。

pi@raspberrypi ~ $ cd /etc/xrdp
pi@raspberrypi /etc/xrdp $ sudo wget http://w.vmeta.jp/temp/km-0411.ini
pi@raspberrypi /etc/xrdp $ sudo ln -s km-0411.ini km-e0010411.ini
pi@raspberrypi /etc/xrdp $ sudo ln -s km-0411.ini km-e0200411.ini
pi@raspberrypi /etc/xrdp $ sudo ln -s km-0411.ini km-e0210411.ini

3:xrdpサービスを起動する。

pi@raspberrypi /etc/xrdp $ sudo service xrdp restart

 以上で、Raspberry Pi側の作業は終了である。

4:Windowsの「リモートデスクトップ接続」を起動する。
 接続先にRaspberry PiのIPアドレスを入力する。

 次のような画面が表示されるので、IDとパスワードを入力する。Moduleはそのままで問題なし。

 しばらく経つとRaspberry Piの画面が表示される。sudo idleを実行できることを確認できた。

Windowsとファイル共有

 Raspberry PiにSambaをインストールすることで、Windowsとファイル共有ができる。

 共有フォルダにアクセスする際に認証なしであれば、Sambaだけインストールすればよい。認証ありにするのであれば、Sambaに加えてsamba-common-binをインストールする。なぜならば、パスワードの設定用のsmbpasswdのパッケージがsamba-common-binに分かれたからである。
 ここでは認証ありのファイル共有を実現する方法を解説する。

1:Raspberry Piにsambaとsamba-common-binをインストールする。

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install samba samba-common-bin

 Sambaをインストールすると自動的にサービスに登録される。次のコマンドで確認できる。

pi@raspberrypi ~ $ service --status-all
…(中略)…
 [ + ]  rsyslog
 [ + ]  samba
 [ + ]  samba-ad-dc
 [ - ]  sendsigs
…(中略)…

2:Sambaの設定ファイルである"smb.conf"ファイルを編集する。

pi@raspberrypi ~ $ cd /etc/samba
pi@raspberrypi /etc/samba $ sudo cp -pi smb.conf smb.conf.org
pi@raspberrypi /etc/samba$ sudo vi smb.conf

 次の内容を"smb.conf"ファイルに追加する。これは"/home/pi"ディレクトリと"/share"ディレクトリを共有フォルダとして指定する。認証ありなので"guest ok = no"としているが、パスワードなしにする場合は"guest ok = yes"とすればよい。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
[pi]
path = /home/pi
guest ok = no
read only = no
force user = pi
 
[share]
path = /share
guest ok = no
read only = no
force user = pi

[補講]次のコマンドで"/share"ディレクトリを作成しておいた。

pi@raspberrypi / $ sudo mkdir /share
pi@raspberrypi / $ sudo chown pi:pi /share
pi@raspberrypi / $ sudo chmod 777 /share

3:共有フォルダにアクセスする際のパスワードの設定を行う。

pi@raspberrypi ~ $ sudo smbpasswd -a pi
New SMB password:
Retype new SMB password:
Added user pi.

4:Sambaを再起動すれば、設定完了である。

pi@raspberrypi ~ $ sudo service samba restart

[補講]"Failed to restart samba.service: Unit samba.service is masked."と表示された場合は、rebootする。 ◇

5:Windowsのエクスプローラのアドレスバーに「\\xxx.xxx.xxx.xxx」と指定すると、認証ダイアログが表示される。認証に成功すると"/home/pi"ディレクトリにアクセスできる。

周辺機器との接続

USBポートを増やす

 セルフパワーのUSBハブを接続すれば、USBのポートを増やせる。

液晶ディスプレイ キット NTSC

Bluetoothのキーボードやマウスを接続する

 Raspberry Piに普通のUSBキーボードとマウスを接続するのが一番安価かつ手間がかからない。しかし、Raspberry Pi周りの配線がごちゃごちゃし、キーボードとマウスのためのスペースを確保しなければならない。Raspberry Pi周りをよりすっきりさせたかったので、タッチパッド内蔵のミニキーボードであるEWinのEW-RB05を導入した。  EW-RB05の特徴は次の通りである。

  • タッチパッド内蔵。
  • USB無線・Bluetoothのどちらにも対応している(USB無線のドングル付属)。
    • USB無線接続であれば、Bluetoothの設定などが不要。
  • 電池式ではなく充電式。
    • microUSBではなく、miniUSBによる充電。コード付属。
    • 充電しながら使用可能。
  • 電源は機械式のスライドスイッチ
  • 懐中電灯代わりのLEDライト、キーボードのバックライト機能あり。
  • しばらく操作しないとスリープになる。スリープ中にキーを押すと復帰するが、タッチパッドが反応しない。結果として、スライドスイッチで起動し直すことになる。
    • これがデメリット。

 EW-RB05はUSB無線にも対応しているが、せっかくなのでBluetoothで接続してみる。

 ここで使用するBluetoothのUSBアダプタ(以降Bluetoothドングルと呼ぶ)はPLANEXのBT-Micro4である。

1:BluetoothドングルをRaspberry Piに装着する前に、BlutoothのプロトコルスタックBlueZをインストールする。

pi@raspberrypi ~ $ sudo aptitude install bluez

[補講]RaspberryPi のバージョン8(Jessie)から、bluez-utilsパッケージがなくなったのでbluez-simple-agent, bluez-test-device, bluez-test-inputなどのコマンドが使えなくなった。代わりにbluetoothctlコマンドを使う。 ◇

2:Bluetoothドングルを挿入してから、hciconfigコマンドで認識していることを確認する。

pi@raspberrypi ~ $ hciconfig
hci0:   Type: BR/EDR  Bus: USB
        BD Address: 00:1B:DC:05:16:E4  ACL MTU: 310:10  SCO MTU: 64:8
        UP RUNNING
        RX bytes:610 acl:0 sco:0 events:36 errors:0
        TX bytes:942 acl:0 sco:0 commands:36 errors:0

 BluetoothドングルのMACアドレスが「BD Address」部に表示されていれば、認識している。  lsusbコマンドでUSB機器を列挙して確認することもできる。

pi@raspberrypi ~ $ lsusb
Bus 001 Device 006: ID 2019:ab2a PLANEX GW-USNano2 802.11n Wireless Adapter [Realtek RTL8188CUS]
Bus 001 Device 007: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 001 Device 005: ID 046d:c00e Logitech, Inc. M-BJ58/M-BJ69 Optical Wheel Mouse
Bus 001 Device 004: ID 1a81:2004 Holtek Semiconductor, Inc.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

3:CUIでBluetoothのペアリングを行う場合を解説する。
 Bluetoothデバイスをペアリングモード(検出可能状態)にしてから、hcitoolコマンドを実行して接続するデバイスをスキャンする*1

 ここではbluetoothctlコマンドでペアリングの設定を行うので、bluetoothctlの対話コマンドからスキャンする。

pi@raspberrypi ~ $ sudo bluetoothctl -a
[NEW] Controller 00:1B:DC:05:16:E4 raspberrypi [default]
Agent registered
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:1B:DC:05:16:E4 Discovering: yes
[NEW] Device CC:C5:0A:1F:30:C9 CC-C5-0A-1F-30-C9

 検知すると「NEW」が表示され、対象のデバイスのMACアドレスが表示される。

[補講]「scan on」実行時に"Failed to start discovery: org.bluez.Error.NotReady"というエラーが表示される場合は、hci0デバイスがDOWN状態になっている。次のコマンドでUP状態にする。

pi@raspberrypi ~ $ sudo hciconfig hci0 up

[補講]hcitoolコマンドでもBluetoothデバイスをスキャンできる。

pi@raspberrypi ~ $ hcitool scan
Scanning ...
        CC:C5:0A:1F:30:C9       Bluetooth 3.0 Macro Keyboard

 Bluetoothデバイスを検出したらMACアドレスと名称が対で表示される。 ◇

4:bluetoothctlの対話コマンドのまま、対象のデバイスに接続してから、ペアリングの設定を行う。

[bluetooth]# connect CC:C5:0A:1F:30:C9 ←接続開始
Attempting to connect to CC:C5:0A:1F:30:C9
[CHG] Device CC:C5:0A:1F:30:C9 Connected: yes
[CHG] Device CC:C5:0A:1F:30:C9 Modalias: usb:v05ACp0257d011B
[CHG] Device CC:C5:0A:1F:30:C9 UUIDs:
        00001000-0000-1000-8000-00805f9b34fb
        00001124-0000-1000-8000-00805f9b34fb
        00001200-0000-1000-8000-00805f9b34fb
Connection successful ←接続成功
[bluetooth]# pair CC:C5:0A:1F:30:C9 ←ペアリング開始
Attempting to pair with CC:C5:0A:1F:30:C9
[agent] PIN code: 527887 ←PINコード
[CHG] Device CC:C5:0A:1F:30:C9 Paired: yes ←上記のPINコード+Enterをキーボード側で入力すると表示される。
Pairing successful ←ペアリング成功

[補講]デバイス側(キーボード以外の機器など)でPINコードが内場合はtrustコマンドを使う。

[bluetooth]# trust [対象デバイスのMACアドレス]

 これでBluetoothキーボードとパッドが動作することが確認できた。

 trustコマンドを実行する。これをしないと、対話コマンドから抜けると、Bluetoothキーボードとの接続が切れる?

[bluetooth]# trust CC:C5:0A:1F:30:C9
[CHG] Device CC:C5:0A:1F:30:C9 Trusted: yes
Changing CC:C5:0A:1F:30:C9 trust succeeded
[bluetooth]# quit
Agent unregistered
[DEL] Controller 00:1B:DC:05:16:E4 raspberrypi [default]
pi@raspberrypi ~ $

5:これでペアリングが完了したが、このままではOSの起動時に毎回手動で接続する必要がある。そこで、自動接続の設定を行う。

 udevルールのファイルを作成し、再起動後にもデバイスを有効にする。

pi@raspberrypi ~ $ cat /etc/udev/rules.d/10-local.rules
# Set bluetooth power up
ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig hci0 up"

 さらに、次のようなsystemdサービスを使うことで、サスペンド・復帰の後にデバイスの電源を自動的にオンにすることができる。

pi@raspberrypi ~ $ cat /etc/systemd/system/bluetooth-auto-power@.service
[Unit]
Description=Bluetooth auto power on
After=bluetooth.service sys-subsystem-bluetooth-devices-%i.device suspend.target

[Service]
Type=oneshot
#We could also do a 200 char long call to bluez via dbus. Except this does not work since bluez does not react to dbus at this point of the resume sequence and I do not know how I get this service to run at a time it does. So we just ignore bluez and force %i up using hciconfig. Welcome to the 21st century.
#ExecStart=/usr/bin/dbus-send --system --type=method_call --dest=org.bluez /org/bluez/%I org.freedesktop.DBus.Properties.Set string:org.bluez.Adapter1 string:Powered variant:boolean:true
ExecStart=/usr/bin/hciconfig %i up

[Install]
WantedBy=suspend.target

[参考]https://wiki.archlinuxjp.org/index.php/Bluetooth ◇

EW-RB05のショートカット

ショートカット動作
[Fn]+[F1]バックライトON
[Fn]+[Alt]タッチパッド90度回転(リモコンのように縦持ちの操作が可能)
[Shift]+[Alt]言語切り替え
[Fn]+[Back]Delete
[Fn]+[F3]ミュート
[Fn]+[Ctrl]Windowsキー
[Fn]+[F2]スクリーンショット
[Fn]+[↑]Page Up
[Fn]+[↓]Page Down

EWINキーボードのブラインドタッチ

 EWINキーボードは小型でよいのだが、特殊なキー配列であるため、ブラインドタッチどころか使用頻度の多いキーを探すのも大変である。そこで、キーを見なくても触れただけでわかるように、キーに突起を付けることにした。

 突起の候補として、最初に探したのがマルポコである。マルポコとは携帯電話をデコるための素材のひとつである。直径5mm、クリア(透明)、裏側の金膜なし(金膜があると下の文字が見えない)という条件で探したが、なかなか見つからなかった。
 結局、希望のマルポコが入手できなかったので、クッションゴムで代用した。 東急ハンズでは一番小さいクッションゴムでも8mmであった。キーをほんの少しはみ出るが、隣のキーには当たらないため、これでよしとした。 クッションゴムの場合、完全な透明のタイプが少ないかもしれない。購入したものは3Mの「しっかりつくクッションゴム 22粒」である。シートに印字されている文字がクッションゴムを透けていることが観察できるため、これを購入した。

 クッションゴムには粘着剤がついているが、EWINキーボードに貼り付くほどの強度はない。そこで、クリアパーツ向けの接着剤を探した。その際、素材を溶かさず、素材に適合した接着剤でなければならない。ここでは、120円ほどで販売されている「ボンド Gクリヤー 20ml #14321」を用いる。

使用したもの

 [Tab], [Shift], [Ctrl], [BACK], [Enter], [F], [J], 矢印キーの中央にクッションゴムを取り付けた。[F]キーと[J]キーにはデフォルトで小さい突起があるが、すぐにわかるようにクッションゴムを取り付けた。
 接着するときはキーからたれて隙間に落ちていかなように注意する。使用したGクリヤーはどろっとしたタイプなので、若干たれても隙間に入り込まなかった。

完成したEWINキーボード(上から見たところ)

完成したEWINキーボード(斜めから見たところ)

[参考]

Bluetoothでテザリング

 モバイルデータ通信を有効にしたスマホにおいて、(Bluetoothの)テザリングを起動する。

 bluez-simple-agentコマンドでペアリングを行うと失敗する。
 bluez-simple-agentはPythonスクリプトなのでテキストエディタで開き、「capability = "KeyboardDisplay"」を「capability = "DisplayYesNo"」に書き換える。次のコマンドで書き換えることもできる。

sudo perl -i -pe 's/KeyboardDisplay/DisplayYesNo/' /usr/bin/bluez-simple-agent

 編集後ペアリングするとPINコードの代わりにYes/Noの選択が促される。Yesを入力するとパリングする。

その他の設定

NTPの設定

 正確な時刻が必要な場合は、NTPの時刻同期の設定を行う。

[補講]インターネット上のNTPサーバーから時刻を受信して修正するntpdate(client)を用いるという選択肢もあるが、Raspberry Piではデフォルトでntpdが動いている。 ◇

SDカードのバックアップと復元

 Raspbianの初期設定、各種ソフトのインストールや設定が完了したら、バックアップをとっておくことをお勧めする。

バックアップ <Windowsの場合>

1:空のイメージファイルを作成する。
 エクスプローラ上のメニューの「ファイル」>「新規作成」>「テキストドキュメント」を選択する。ファイル名を"raspbian_backup.img"とする。拡張子を変更しているので、警告メッセージが表示されるが無視する。

2:バックアップ対象のRaspbianデータが入ったmicroSDカードをPCに接続する。

3:Win32 Disk Imager(公式サイト)を起動する。

[補講]Win32 Disk Imagerはイメージファイルを展開する際にも活用できる。 ◇

4:Win32 Disk Imagerの「Image File」にステップ1で作成した(空の)イメージファイルを指定する。
 「Device」にステップ2でマウントしたmicroSDカードのドライブを指定する。

 [Read]ボタンを押すと、microSDカードの内容が読み込まれ、指定したイメージファイルに書き込まれる。

[注意]指定するドライブ、ReadとWriteを間違えないようにする。 ◇

5:書き込み処理が終了したら、「Read Successful.」とダイアログが表示され、ウィンドウの下部には「Done.」を表示される。

 エクスプローラ上でイメージファイルの容量が増えていることを確認する。

バックアップ <Mac OS Xの場合>

1:ターミナルを起動する。カレントディレクトリは"/Applications/Utilities"に位置する。

2:次のように入力すると、接続しているストレージデバイスが列挙される。

$ diskutil list

 バックアップ対象のSDカードのデバイス名を調べる。HDDと間違えないように、SDカードを挿す前の出力結果と挿した後の出力結果を比較して、判断すると確実である。ここでは"disk1"であったとする。

[補講]システム情報やdfコマンドで調べてもよい。 ◇

3:ddコマンドでバックアップを行う。

$ sudo dd bs=1m if=/dev/disk1 of=/Users/[ユーザー名]/Desktop/backup.img ←バックアップ
$ sudo dd if=/dev/rdisk1 bs=4m | gzip > ~/Desktop/backup.img.gz ←バックアップしつつ圧縮

バックアップ <Linuxの場合>

$ sudo lsblk -f
$ sudo dd if=/dev/sdb bs=4M | gzip > ~/backup.img.gz

復元 <Windowsの場合>

1:SDフォーマッター(SD Formatter)を起動する。オプションで、消去方法を「イレースフォーマット、論理サイズ調整を「ON」にして、SDカードをクイックフォーマットする。

[補講]Windos版のSDFormatterはここ。 ◇

2:Win32 Disk Imagerでバックアップファイル(イメージファイル)を指定して、[Write]ボタンを押す。すると、microSDカードにバックアップしたデータが書き込まれる。

3:復元したRaspbianはバックアップを取った時点から更新されていない。Raspberry Piを起動してから、次のコマンドを実行して最新の状態にする。

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade
pi@raspberrypi ~ $ sudo rpi-update

復元 <Mac OS Xの場合>

1:書き込みしたいSDカードを挿入して、次のコマンドでいったんアンマウントする。

$ diskutil unmountdisk disk1

1:ターミナルで、次のオプションを指定して、ddコマンドを実行する。

$ sudo dd bs=1m if=/Users/[ユーザー名]/Desktop/backup.img of=/dev/rdisk1
$ gzip -dc ~/Desktop/backup.img.gz | sudo dd bs=1m of=/dev/rdisk1

[補講]「of=/dev/disk1」のように「r」を付けなくても書き出すことはできるが、とても処理が重くなる。「r」を付けると、アンバッファモードになって速度が速くなる。 ◇

3:次のコマンドでアンマウントしてから、SDカードを取り出す。

$ diskutil eject /dev/disk1

復元 <Linuxの場合>

$ gzip -dc ~/backup.img.gz | sudo dd of=/dev/sdb bs=4M

Pythonのバージョンを切り替える環境を構築する

pi@raspberrypi ~ $ python2 --version
Python 2.7.9
pi@raspberrypi ~ $ python3 --version
Python 3.4.2

 Pythonスクリプトを直接実行するのであれば、"python2 hoge.py"や"python3 hoge.py"と実行すればよい。しかし、そうではない場合には、pythonコマンドで起動するPythonのバージョンをあらかじめ変更しておかないと問題が生じることがある。  ここでは、update-alternativesで切り替えることができる仕組みを導入する。

1:Pythonのシンボリックリンクをバックアップしておく。

pi@raspberrypi ~ $ sudo mv /usr/bin/python /usr/bin/python.bak
sudo mv /usr/bin/python /usr/bin/python.bak

2:各Pythonに優先度を指定する。

pi@raspberrypi ~ $ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2
update-alternatives: /usr/bin/python (python) を提供するために自動モードで /usr/bin/python2.7 を使います
pi@raspberrypi ~ $ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.4 1

 これで設定完了。

切り替え方法

pi@raspberrypi ~/python_program $ python -V
Python 2.7.9

 ここでは2.7になっている。3.4に切り替えたい場合は次のコマンドを入力する。

pi@raspberrypi ~ $ sudo update-alternatives --config python
alternative python (/usr/bin/python を提供) には 2 個の選択肢があります。

  選択肢    パス              優先度  状態
------------------------------------------------------------
* 0            /usr/bin/python2.7   2         自動モード
  1            /usr/bin/python2.7   2         手動モード
  2            /usr/bin/python3.4   1         手動モード

現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 2 ←2を入力してEnter.
update-alternatives: /usr/bin/python (python) を提供するためにマニュアルモードで /usr/bin/python3.4 を使います
pi@raspberrypi ~ $ python -V
Python 3.4.2

[補講]Python3のまま、apt-getをしたところエラーになることがある。

↓python-picameraのアップグレードでエラーになった例

pi@raspberrypi /var/lib/dpkg/info $ sudo apt-get upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています ... 完了
以下のパッケージは保留されます:
  libraspberrypi-bin libraspberrypi-dev libraspberrypi-doc libraspberrypi0
  lxpanel lxpanel-data nuscratch pypy-upstream raspberrypi-bootloader
  raspberrypi-ui-mods
以下のパッケージはアップグレードされます:
  python-picamera
 アップグレード: 1 個、新規インストール: 0 個、削除: 0 個、保留: 10 個。
 2 個のパッケージが完全にインストールまたは削除されていません。
120 kB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 58.4 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
(データベースを読み込んでいます ... 現在 145225 個のファイルとディレクトリがインストールされています。)
.../python-picamera_1.11_armhf.deb を展開する準備をしています ...
  File "/usr/bin/pyclean", line 63
    except (IOError, OSError), e:
                             ^
SyntaxError: invalid syntax
dpkg: 警告: サブプロセス 古い pre-removal スクリプト はエラー終了ステータス 1 を返しました
dpkg: 代わりに新規パッケージからスクリプトを実行してみます ...
  File "/usr/bin/pyclean", line 63
    except (IOError, OSError), e:
                             ^
SyntaxError: invalid syntax
dpkg: アーカイブ /var/cache/apt/archives/python-picamera_1.11_armhf.deb の処理中にエラーが発生しました (--unpack):
 サブプロセス 新しい pre-removal スクリプト はエラー終了ステータス 1 を返しまし た
Traceback (most recent call last):
  File "/usr/bin/pycompile", line 35, in <module>
    from debpython.version import SUPPORTED, debsorted, vrepr, \
  File "/usr/share/python/debpython/version.py", line 24, in <module>
    from ConfigParser import SafeConfigParser
ImportError: No module named 'ConfigParser'
dpkg: クリーンアップ中にエラーが発生しました:
 サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 1 を返しました
処理中にエラーが発生しました:
 /var/cache/apt/archives/python-picamera_1.11_armhf.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

 その際には、Python2に戻しておいてから、実行する。

カメラモジュールのケースの取り付け

★後ほど更新予定

マウンター

★後ほど更新予定

ヒートシンク

★後ほど更新予定

基盤キット

★後ほど更新予定

電子工作

Raspberry Piの準備

1:PRi.GPIOライブラリをアップデートする。

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade

 すでに実行したばかりであればこのステップは不要。

2:Pythonライブラリのパッケージ管理ソフトpipをインストールする。

pi@raspberrypi ~ $ sudo apt-get install python-dev
pi@raspberrypi ~ $ sudo apt-get install python-pip

 次のコマンドを実行してpipのバージョンを確認する。

pi@raspberrypi ~ $ pip --version

 バージョンをアップデートするには次のコマンドを実行する。

pi@raspberrypi ~ $ sudo pip install --upgrade pip

3:LXTerminalを起動し直してから、pipのバージョンを確認する。

pi@raspberrypi ~ $ pip --version

GPIOを使ったプログラムを実行する場合のPythonの起動

 GPIO端子を制御する場合には管理者権限が必要である。PythonプログラムからGPIO端子を制御する場合も同様なので、Pythonプログラムを管理者権限で実行しなければならない。そこで、開発環境であるPython 2のIDEを管理者権限で実行する。

 もっとも簡単な方法はLXTerminalから次のコマンドを実行する方法である。

pi@raspberrypi ~ $ sudo idle

 また、GUIで操作したい場合には、管理者権限でIDEを起動するショートカットアイコンを作成する。

1:「Menu」>「プログラミング」>「Python 2」>「デスクトップに追加」を選択する。

2:デスクトップに作成された「Python2(IDLE)」を右クリックして、「アプリケーションで開く」を選択する。

 そして、「Text Editor」を選択する*2

3:"idle.desktop"がText Editorで開くので、2行目と5行目を編集する。

編集前

編集後

 編集後に、"idle_gpio.desktop"という名前を付けて保存する。すると、デスクトップにアイコンが作成される。

[補講]VNCで表示した画面で管理者権限で処理を実行しようとするとエラーが出る。

VNCの画面で"suto idle"を実行したところ

そのためSSHでリモート操作するか、直接Raspberry Piの画面を操作する必要がある。 ◇

ピン配置

Raspberry Pi 2

Raspberry Piの活用

  • Fritzing
  • Raspberry PiによるLEDの制御
  • Raspberry Piによるモーターの制御
  • Raspberry Piによるカメラの制御
  • Raspberry PiによるA/D変換
  • Raspberry PiによるSPI
  • Raspberry PiによるI2C
  • Raspberry PiによるWebIOPi
  • asmでGPIOを制御

トラブルシュート

bashのコマンド補完時に「ヒアドキュメント用一時ファイルを作成できません: デバイスに空き領域がありません」というエラーが表示される

 dfコマンドで容量を調べると100%になっていました。

pi@raspberrypi ~ $ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root        3.9G  3.7G     0  100% /
devtmpfs         459M     0  459M    0% /dev
tmpfs            463M     0  463M    0% /dev/shm
tmpfs            463M  6.4M  457M    2% /run
tmpfs            5.0M  4.0K  5.0M    1% /run/lock
tmpfs            463M     0  463M    0% /sys/fs/cgroup
/dev/mmcblk0p1    56M   20M   37M   36% /boot
tmpfs             93M     0   93M    0% /run/user/1000

 キャッシュを削除すると、若干空き容量ができた。

pi@raspberrypi ~ $ sudo apt-get clean
pi@raspberrypi ~ $ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root        3.9G  3.4G  317M   92% /
devtmpfs         459M     0  459M    0% /dev
tmpfs            463M     0  463M    0% /dev/shm
tmpfs            463M  6.4M  457M    2% /run
tmpfs            5.0M  4.0K  5.0M    1% /run/lock
tmpfs            463M     0  463M    0% /sys/fs/cgroup
/dev/mmcblk0p1    56M   20M   37M   36% /boot
tmpfs             93M     0   93M    0% /run/user/1000

 設定画面からファイルシステムを拡大すると改善するらしいので、試した。

1:raspi-configコマンドで設定画面を表示する。

$ sudo raspi-config

2:「1. Expand Filesystem」を選択する。後は自動的に処理される。
 処理の終了後、「rootパーティションがリサイズされたので次に再起動する」というメッセージが表示される。

3:設定画面の「終了」(Finish)を選択すると、再起動するかを聞かれるので、了解する。

4:再起動後に改めてdfコマンドで容量を確認する。"/dev/root"の容量が3.9Gバイトから7.2Gバイトに拡大し、空き容量が大幅に改善した。

pi@raspberrypi ~ $ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root        7.2G  3.4G  3.6G   49% /
devtmpfs         459M     0  459M    0% /dev
tmpfs            463M     0  463M    0% /dev/shm
tmpfs            463M  6.4M  457M    2% /run
tmpfs            5.0M  4.0K  5.0M    1% /run/lock
tmpfs            463M     0  463M    0% /sys/fs/cgroup
/dev/mmcblk0p1    56M   20M   37M   36% /boot
tmpfs             93M     0   93M    0% /run/user/1000

大容量microSDに移行

 microSDの空き容量が少ないため、8GBから32GBに変更したいとする。相性の問題があるので、microSDの購入時はRPi SD cardsを参考にする。

1:現在のmicroSDのイメージをバックアップする。DDWinを使用する。

[補講]バックアップと復元で解説した内容と同様に、Win32DiskImagerでうまくいくと思ったが、Raspberry Pi起動後にWiFiが使えないという変な現象が起きた(すでにこれまで使用できていたWiFiドングル)。

pi@raspberrypi ~ $ ip addr show wlan0
Device "wlan0" does not exist. ←wlan0が見つからない。
pi@raspberrypi ~ $ iwconfig
lo        no wireless extensions.
 
eth0      no wireless extensions.
pi@raspberrypi ~ $ lsusb
Bus 001 Device 005: ID 2019:ab2a PLANEX GW-USNano2 802.11n Wireless Adapter [Realtek RTL8188CUS] ←ドングルは見えている。
Bus 001 Device 004: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
pi@raspberrypi ~ $ lsmod
Module                  Size  Used by
evdev                  10278  2
joydev                  9024  0
hid_apple               4677  0
hidp                   13318  1
bnep                   10336  2
cfg80211              407580  0
btusb                  28640  0
btintel                 1332  1 btusb
btbcm                   4196  1 btusb
bluetooth             317981  28 bnep,hidp,btbcm,btusb,btintel
rfkill                 16036  3 cfg80211,bluetooth
snd_bcm2835            19802  6
bcm2835_rng             1763  0
snd_pcm                73474  1 snd_bcm2835
i2c_bcm2708             4920  0
spi_bcm2835             7074  0
snd_timer              18848  1 snd_pcm
bcm2835_gpiomem         2860  0
snd                    50779  15 snd_bcm2835,snd_timer,snd_pcm
uio_pdrv_genirq         2944  0
uio                     7753  1 uio_pdrv_genirq
i2c_dev                 5671  0
fuse                   80694  5
ipv6                  338660  34

2:DDWinを使って、バックアップしたイメージを変更先のmicroSDカードに書き込む。

3:新しいmicroSDカードを挿入して、Raspberry Piを起動する。
 起動時に今まで見たことがないメッセージがたくさん表示されるかもしれない。

4:duコマンドで確認すると、/dev/rootの空き容量はひっ迫したままである。そこで、raspi-configで「1 Expand Filesystem」を選び、ルートパーティションを拡張する。再起動してから、duコマンドで再び確認すると、/dev/rootの空き容量が大きくなっているはずである。

以上の方法で、8GB→32GB(Samsung MB-MC32DA/FFP)に移行できました。

[補講]NOOBSを使っていると、Expand Filesystemが失敗するようだ。対処方法は次のサイトを参考。

[補講]起動しない場合には、microSDの相性との問題の可能性がある。素直に動作確認が取れているmicroSDで試した方がよい。 ◇

[補講]その他参考になるサイトを紹介する。

リンク


*1 EW-RB05の場合は、電源スイッチをONにしてランプが2〜3秒点滅してから、左上のコネクとボタンを長押しする。するとランプが断続に点滅する。これがペアリングモードを示す。
*2 一度でも「Text Editor」を選択していれば、右クリックした時点で表示される。