ブログ

Armadillo-840でBLEを使って見る

at_takuya.sasaki
2015年8月23日 21時42分

過去に以下のようなブログを書いてみました。
Armadillo-400シリーズでBLEを使ってみる

上記ブログと同じことを、Armadillo-840のカーネルバージョン3.4で動作できるかどうか試してみたいと思います。

1. ATDE5をダウンロード

Armadillo-IoTの開発環境であるATDE5を以下からダウンロードします。
https://armadillo.atmark-techno.com/armadillo-iot/downloads

[開発環境] -- [ATDE]

ATDE5の起動方法は以下を参照してください。
https://manual.atmark-techno.com/armadillo-iot/armadillo-iotg-std_product_manual_ja-2.0.0/ch04.html#sct.before-work.setup-atde5

2. ソースコードのダウンロードと展開

2.1 Armadillo-840のソースコードをダウンロードします。
atmark@atde5:~$ wget http://armadillo.atmark-techno.com/files/downloads/armadillo-840/source/linux-3.4-at15.tar.gz
atmark@atde5:~$ wget http://armadillo.atmark-techno.com/files/downloads/armadillo-840/source/atmark-dist-20150727.tar.gz
2.2 ソースコードを展開します。
atmark@atde5:~$ tar zxf atmark-dist-20150727.tar.gz 
atmark@atde5:~$ tar zxf linux-3.4-at15.tar.gz 
atmark@atde5:~$ ln -s atmark-dist-20150727 atmark-dist
atmark@atde5:~$ cd atmark-dist
atmark@atde5:~/atmark-dist$ ln -s ../linux-3.4-at15 ./linux-3.x

3. カーネルのカスタマイズ

3.1 make menuconfigでvendor/Productを指定します
 (AtmarkTechno) Vendor
 (Armadillo-840) AtmarkTechno Products
3.2 カーネルコンフィギュレーションでBluetoothを有効にします
Linux Kernel Configuration 
[*] Networking support  ---> 
--- Bluetooth subsystem support
    <*>   RFCOMM protocol support      ←チェックをつける
    [*]     RFCOMM TTY support         ←チェックをつける
    <*>   BNEP protocol support         ←チェックをつける
    [*]     Multicast filter support    ←チェックをつける
    [*]     Protocol filter support     ←チェックをつける
    <*>   HIDP protocol support         ←チェックをつける
    Bluetooth device drivers  --->
        <*> HCI USB driver             ←チェックをつける

4. ビルドを実行

4.1 ビルドを実行します。
atmark@atde5:~/atmark-dist$ make

5. Bluezをビルド

6.1 Bluez 5.32をダウンロードして展開します。

(2015.7.21時点での最新は5.32です)

atmark@atde5:~$ wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.32.tar.xz
atmark@atde5:~$ tar Jxf bluez-5.32.tar.xz 
6.2 libicalのクロスパッケージをインストールします
atmark@atde5:~$ wget http://ftp.jp.debian.org/debian/pool/main/libi/libical/libical0_0.48-2_armel.deb
atmark@atde5:~$ dpkg-cross  -v --build --arch armel libical0_0.48-2_armel.deb
atmark@atde5:~$ sudo dpkg -i libical0-armel-cross_0.48-2_all.deb
atmark@atde5:~$ wget http://ftp.jp.debian.org/debian/pool/main/libi/libical/libical-dev_0.48-2_armel.deb
atmark@atde5:~$ dpkg-cross  -v --build --arch armel libical-dev_0.48-2_armel.deb
atmark@atde5:~$ sudo dpkg -i libical-dev-armel-cross_0.48-2_all.deb
6.3 configureを実行します
atmark@atde5:~$ cd bluez-5.32/
atmark@atde5:~/bluez-5.32$  ./configure --build=i686 --host=arm-linux-gnueabi --disable-udev --disable-systemd --prefix=/usr
6.4 makeを実行します
atmark@atde5:~/bluez-5.32$ make
6.5 make installを実行します。
atmark@atde5:~/bluez-5.32$ make install DESTDIR=/home/atmark/atmark-dist/romfs/
6.6 不要なファイルを削除します。
atmark@atde5:~/bluez-5.32$ rm -rf /home/atmark/atmark-dist/romfs/usr/share/man/
6.8 gatttoolを手動でインストールします。
atmark@atde5:~/bluez-5.32$ cp attrib/gatttool /home/atmark/atmark-dist/romfs/usr/bin/

7. D-busをatmark distにインストール

7.1 DebianパッケージのD-busをダウンロードします
atmark@atde5:~/bluez-5.32$ cd
atmark@atde5:~$ wget http://ftp.gnome.org/mirror/cdimage/snapshot/Debian/pool/main/d/dbus/dbus_1.6.8-1+deb7u1_armel.deb
7.2 D-busパッケージをatmark distのROMイメージディレクトリに展開します
atmark@atde5:~$ dpkg -x dbus_1.6.8-1+deb7u1_armel.deb atmark-dist/romfs/
7.3 不要なドキュメントファイルなどを削除します
atmark@atde5:~$ rm -rf atmark-dist/romfs/usr/share/doc
atmark@atde5:~$ rm -rf atmark-dist/romfs/usr/share/man
7.4 D-busが必要とするinit-funcionsをatmark distのROMイメージディレクトリに展開します
atmark@atde5:~$ wget http://ftp.jp.debian.org/debian/pool/main/l/lsb/lsb-base_4.1+Debian8+deb7u1_all.deb
atmark@atde5:~$ dpkg -x lsb-base_4.1+Debian8+deb7u1_all.deb atmark-dist/romfs/
atmark@atde5:~$ rm -rf atmark-dist/romfs/usr/share/doc
7.5 D-busデーモンを実行するユーザ/グループを追加します
atmark@atde5:~$ vi atmark-dist/vendors/AtmarkTechno/Armadillo-IoTG-Std/etc/passwd 
 
ファイル末尾に以下の行を追加します
messagebus:x:101:105::/var/run/dbus:/bin/false
atmark@atde5:~$ vi atmark-dist/vendors/AtmarkTechno/Armadillo-IoTG-Std/etc/group 
 
ファイル末尾に以下の行を追加します
messagebus:x:105:

8. イメージを再作成して、カーネル/ユーザーランドをArmadilloに書き込みます

atmark@atde5:~$ cd atmark-dist
atmark@atde5:~/atmark-dist$ make romfs
atmark@atde5:~/atmark-dist$ make image

9. D-bus/bluetoothdを起動するように設定します

9.1 Armadilloにログインして、rc.localを編集します
[root@armadillo440-0 (ttymxc1) ~]# cd /etc/config/
[root@armadillo440-0 (ttymxc1) /etc/config]# vi rc.local
 
末尾に、以下の2行を追加
 
/etc/init.d/dbus start
/usr/libexec/bluetooth/bluetoothd &
9.2 ROMに保存して再起動します
[root@armadillo440-0 (ttymxc1) /etc/config]# flatfsd -s
[root@armadillo440-0 (ttymxc1) /etc/config]# reboot

10. BLEデバイスと通信をしてみます

10.1 今回使用するBluetoothモジュールは以下になります
10.1 USBドングルを認識しているか確認します
[root@armadillo-iotg (ttymxc1) ~]# hciconfig
hci0:   Type: BR/EDR  Bus: USB
        BD Address: 00:1B:DC:06:C0:41  ACL MTU: 310:10  SCO MTU: 64:8
        DOWN
        RX bytes:558 acl:0 sco:0 events:28 errors:0
        TX bytes:355 acl:0 sco:0 commands:28 errors:0
10.2 USBドングルを有効にします
[root@armadillo-iotg (ttymxc1) ~]# hciconfig hci0 up
10.3 BLEデバイスを検索します
[root@armadillo-iotg (ttymxc1) ~]# hcitool lescan
LE Scan ...
44:13:19:05:A8:5B LBT-VRU0234
44:13:19:05:A8:5B (unknown)
(Ctrl-Cで停止)
10.4 BLEデバイスにコマンドを送信して、ベルを鳴らしたりLED点灯させます
[root@armadillo-iotg (ttymxc1) ~]# gatttool -i hci0 -b 44:13:19:05:A8:5B -I
[44:13:19:05:A8:5B][LE]> connect
Attempting to connect to 44:13:19:05:A8:5B
Connection successful
[44:13:19:05:A8:5B][LE]> char-write-cmd 0x000d 02  ←振動もしくはメロディ
[44:13:19:05:A8:5B][LE]> char-write-cmd 0x000d 01  ←LED点灯

以上