もっふもふの電子回路

備忘録的なあれ

Raspberry Pi + Bluetooth

とある目的のためにRapberry PiにBluetooth ドングルを差してiPhone等とコミュニケーションさせたい。

そのために行ったことをつらつらと。

 

H/W、S/W構成

・Raspberry Pi 2 Model B

OS:Raspbian Jessie

Varsion:Linux raspberrypi 4.1.13-v7+ #826 SMP PREEMPT Fri Nov 13 20:19:03 GMT 2015 armv7l GNU/Linux

Bluetooth ドングル Princeton PTM-UBT7

 過去に別用途で購入(たしか安かったから)したものを引用。一応Bluetooth Low Energy(BLE)対応っぽいけど苦労したくないならPlanex辺りを購入した方が無難か

BlueZ のインストール

まず現在bluezがインストールされていないことを確認

dpkg -l | grep blue

BluezはLinuxで一般的に使われているBluetoothスタックらしいです。apt-getでインストールできるものは古そうだったので、ビルドすることにしました。

まずいろいろ作業するためにDocuments内に作業ディレクトリを作成

cd Documents/

mkdir -p work/bluetooth

  

記事執筆時点(2016/01/02)での最新バージョンはどうやら5.37の模様。

https://www.kernel.org/pub/linux/bluetooth/

ここで最新のものを選択して取ってくる。

$ wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.37.tar.xz

取ってきたら解凍して

$ tar xvf bluez-5.37.tar

解凍したソースディレクトリ内に入り、コンフィグを設定

$ cd bluez-5.37/

$ ./configure --disable-systemd --enable-library

依存関係とかいろいろ確認されるが、自分の環境では以下のエラーが発生

checking for linux/if_alg.h... yes
checking for GLIB... no
configure: error: GLib >= 2.28 is required

GLibが存在しないらしいので、関連するものをまとめて入れ込み(そもそも先に入れておくものらしい)

$ sudo apt-get install libdbus-1-dev libdbus-glib-1-dev libglib2.0-dev libical-dev libreadline-dev libudev-dev libusb-dev make

ごちゃっと

再度コンフィグを設定すると、

$ ./configure --disable-systemd --enable-library

checking for GLIB... yes

checking that generated files are newer than configure... done

今度はうまくいったっぽい。次はビルドしてインストール。

makeで10~15分ほどかかります。

$ make

$ sudo make install

続けてmakeでインストールされないものを手動でインストール

$ sudo cp attrib/gatttool /usr/local/bin/

libbluetooth-dev の各種ヘッダファイルをビルドしたもので置き換え

$ sudo cp -ipr lib/ /usr/include/bluetooth.5.37

$ cd /usr/include

$ sudo ln -s bluetooth.5.37/ bluetooth

BTドングルの状況をチェック

$ lsusb
Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 001 Device 004: ID 0d8c:0014 C-Media Electronics, 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

 Device 005にBTドングルさんがいますね。

ドングル詳細情報はID指定で

$ sudo lsusb -v -d 0a12:

状態は

$ hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: 00:1B:DC:XX:XX:XX ACL MTU: 310:10 SCO MTU: 64:8
DOWN
RX bytes:580 acl:0 sco:0 events:31 errors:0
TX bytes:368 acl:0 sco:0 commands:30 errors:0

 DOWNなので認識してるけど寝ている状態ですかね。

MACアドレスはマスクしてます)

BTドングルの起動

$ sudo hciconfig hci0 up
$ hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: 00:1B:DC:XX:XX:XX ACL MTU: 310:10 SCO MTU: 64:8
UP RUNNING
RX bytes:1154 acl:0 sco:0 events:61 errors:0
TX bytes:736 acl:0 sco:0 commands:60 errors:0

 UP RUNNINGになったので起動できたと思われます。

Bluetooth デバイスのスキャン

 $ sudo hcitool lescan
LE Scan ...

本来ここで手持ちのBLEデバイスたちが表示されるはずが、自分は特に所有していなかったため何も表示されず(ちゃんと動いてんのかこれ、、、)

$ hcitool scan

では一応手持ちのiPhone5等が表示されました。

(あれっiPhone5ってBLE対応してないんだっけ?)

  

また、デバイスからRPiを発見できるように

sudo hciconfig hci0 piscan

にて設定。

 

参考にさせていただいたサイト

kakakikikekeのブログ: RaspberryPi に BlueZ をインストールして BLE を検知してみた

 

次はPCやiPhone等別デバイスとのコミュニケーションを行う予定です。

 

 

 

Raspberry Pi 初期設定

Raspberry Pi を初期設定する際のメモです。

H/W : Raspberry Pi 2 Model B
OS : Raspbian Jessie

※OSインストール直後の話です。
 LocaleはEnglish(UK)としてインストール (ディレクトリ名が日本語になると面倒なので)

1 キーボードの設定

 OSインストール時にキーボードをjpに設定してもキーボード配列が英字用になってたりするので、
 sudo raspi-config にて設定を行う
 jessieではキーボード設定は

 5 Internationalisation Options
    I3 Change Keybord Layout
      -> Generic 105-key (Intl) PC
        -> Japanese - Japanese (OADG 109A)
          ->The default for the keyboard layout
            -> No compose key
              -> Use Control+Alt+Backspace to terminate the X server? Yes

2 ユーザパスワードの設定

1に引き続き

  2 Change User Password
    You will now be asked to enter a new password for the pi user
      -> OK

表示されるターミナルにて新しいパスワードを入力

3 タイムゾーンの設定

2に引き続き

 5 Internationalisation Options
   I2 Change Timezone
   -> Asia
        ->Tokyo

4 SSHの設定

 3に引き続き

 9 Advanced Options
    A4 SSH
      -> Enable

 いったん設定画面トップからFinishを選択し終了させる

5 IPアドレスの設定

 CUIでもできるが、面倒なのでデスクトップ右上のWiFi Networks(dhcpcdui) Settingsより「Neteork Preference」を開き、Configure:interface eth0 の設定を行う。
IP Adress、Routerの項目を入力しApply。(ここではまだ反映されない)

6 再起動

 ターミナルより

  sudo reboot

起動後にターミナルよりifconfigを入力し、IPアドレスが変更されたことを確認。

7 SSH リモート接続の確認

 windowsよりPuTTY等のSSHクライアントより、先ほど設定したIPアドレスにアクセスを試みる。接続できたら、user名はデフォルトで「pi」、パスワードは先ほど設定したものを入力する。
 ログインできたら次は日本語環境を設定していく。
 母艦で調べてからのコマンドコピペが使えるようになるのでここからSSHリモート接続にて作業を行っていく。
 

8 日本語フォント導入

 日本語フォントを導入する前にLocaleを日本語にするとメニュー等の日本語部分が文字化けするため、先に日本語表示環境を準備する。
 まず

sudo apt-get update

で更新
 日本語フォントのインストール(2016.04.22修正)

sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname

 日本語を入力するためのメソッドをインストール

sudo apt-get install uim uim-anthy

 jfbtermをインストール。

sudo apt-get install jfbterm

jfbtermとは?
コンソール画面(真っ黒の操作画面)で日本語を表示する為のソフト。これをインストールしなければ日本語のフォントを入れても文字化けします。

9 地域(Locale)の設定

 ターミナルにて再びsudo raspi-config にて設定
I1 Change Locale
一覧の中から選択、なにかあった場合戻せるようにここで現在のLocaleも覚えておく
  現在はen_GB.UTF-8 UTF-8 だった
  ja_JP.UTF-8 UTF-8 にチェック
 Default locale for the system environment:
-> ja_JP.UTF-8 

10 再起動

 ターミナルより

sudo reboot

 メニュー等の日本語化およびターミナルでの日本語表示、入力ができることを確認

以上

おまけ

Windowsからのリモートデスクトップ接続へ対応

xrdpというパッケージをインストールします

sudo apt-get install xrdp

インストール完了後にwindows側から、設定したIPアドレスに対しリモートデスクトップを行う。
要求されるユーザ名はデフォルトで「pi」
パスは設定したもの。
Windows-RPi間のクリップボードの共有等ができないため多少不便ではありますが、
簡単な作業であれば支障はないかと。


(うーん日本語フォントが気に入らない、、、前はもっと見た目が良かったものを使っていたような、、、)


参考にさせていただいたサイト
» 解決!Raspberry Piの日本語が四角の文字化けになった時の初歩ミス。|コワーキングスペース管理人のブログ
ラズベリーパイ2の使い方とOSセットアップ方法 | うしこlog
Raspberry pi 2 + リモートデスクトップ接続(Windows 7) - 日記とか、工作記録とか