読者です 読者をやめる 読者になる 読者になる

ガジェット調査ログ

購入したガジェットの記録などなど

Raspberry Pi 3 購入からセットアップまで

Raspberry Pi 3 が発売開始ということで、Pi 2をろくに使っていないという反省もよそに注文。
無事届いてMacから参照するところまでできたのでとりあえずメモしておく。

Raspberry Pi 3 購入

購入は公式サイトからリンクされているうちの1つである http://www.modmypi.com/shop で行った。
他のサイトは発送先で日本が選択できなかったりして使用可能か微妙だったからである。
Paypal経由で支払いをすませ、当日レートで ¥5,550 であった。送料もそれなりなのでまあ仕方ない。

配送方法が2種類選べたと思うが安い方を選択した気がするが、
この記事を書いているという事は無事届いたという事である。

無事到着

f:id:takeR:20160319222428j:plainf:id:takeR:20160319222456j:plainf:id:takeR:20160319222434j:plain

microSDカードの購入

今回はTOSHIBAの16GB MU-F016GXにしてみた。

www.amazon.co.jp

SDカードのフォーマット

MacからSDカードのフォーマットを行う場合ディスクユーティリティを使う事になると思うが、
設定を間違うと起動してくれない。以下のようにしてフォーマットすることで起動可能になった。

Mac からインストール

OSはRaspbianを選択。zipをダウンロードして解凍後、下記のサイトを参考にしてインストール。
https://www.raspberrypi.org/documentation/installation/installing-images/mac.md

コマンドだけでいうと以下のような感じ。bsは一度に読み書きするバイトサイズ。
値が小さいと時間がかかるが、大きいとtimeoutするので注意。

$ diskutil list
/dev/disk3 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.6 GB    disk3
   1:                 DOS_FAT_32                         15.6 GB    disk3s1
$ sudo diskutil unmountDisk /dev/disk3
Unmount of all volumes on disk3 was successful
$ sudo dd bs=8m if=~/Downloads/2016-03-18-raspbian-jessie.img of=/dev/rdisk3
480+1 records in
480+1 records out
4033871872 bytes transferred in 288.617538 secs (13976531 bytes/sec)

起動

OSのインストールがうまくいっていればHDMIモニターに表示されるはず。
何も表示されない場合はOSのインストールに失敗していると思うのでフォーマットしてやり直し。
Pi3ではWiFiが内蔵されているので無線LANを認識してくれていたのでGUIから接続。
ただし2.4Ghz帯のみの模様で5Ghz帯は一覧に表示されなかった。

あとは過去記事からリモート接続の設定をして終了。

その他ポイント

公式ケースが使えるか

以前購入したものの使っていなかった公式ケースが利用可能か気になっていたが、こちらは無事装着できた。

www.raspberrypi.org

SDカードの挿入部

以前は着脱の際にプッシュするとSDカードが飛び出してきたが、今回はそれがなくなっていた。
取り外しにくいというほどでもないけど、扱いやすさは劣るかな。

GameにMinecraft Piがプリイン

これはPi3ではなくRaspbianの最新版の話。ただしVNCでは動かず。

Raspberry Pi 公式タッチスクリーン ディスプレイに接続する

先日発売された公式のタッチスクリーンディスプレイが届いたので接続してみた。

www.amazon.co.jp

写真はあとで掲載予定だが、簡単にいうとRaspberry PIにインストールしたOSのGUI画面が 表示され、マウスの代わりにタッチ操作ができる状態になっている。タッチスクリーンとして 何か作るのでなければあんまりいらないかも。

注意ポイント

  • 接続マニュアルが付属していない
  • Raspberry Pi用ケースは同時に使えない(多分)
  • タッチスクリーンとRaspberry Pi間のケーブルの付け方
  • 同じく公式のスタンドをつけると液晶が上下逆になる
  • 無線LANをつけると電力供給が安定せず液晶が点滅

マニュアル

マニュアルはオンラインショップにある1枚の画像である。これをPCで拡大して見ながら接続する。 https://cdn.shopify.com/s/files/1/0174/1800/files/how_to_assemble_the_rpi_touchscreen_display.jpg

ケーブル接続

まず最初にディスプレイリボンを接続するのだが、そのまま押し込もうとすると入らない。 Adapterボード側の接続部の黒い部分が留め金のような役割になっているので、 軽く引っ張って隙間をつくり、それから差し込む。そして黒い部分を押し込んで抜けないようにする。 以後他のケーブルを繋げる場合も全て同様。

液晶が上下逆

スクリーンとRaspberry Piを接続すると、電源挿入部分が画面下になり、収まりが悪い。/boot/config.txtに lcd_rotateを最下行に追記してあげることで起動時の画面の回転状態を指定できる。

pi@raspberrypi ~ $ sudo vim /boot/config.txt 

lcd_rotate=2

でもって再起動。

電力供給

電源はタッチスクリーン側か本体のどちらかに電源コネクタに接続すれば液晶もRaspberry Piも合わせて起動してくれる。 はじめ出力850mAの携帯用充電器で接続したところ、液晶とRaspberry Pi本体は問題なく動作したが、 無線LAN子機を接続した時点で安定しなくなり、液晶が一定の周期で点滅するようになってしまった。 ということで出力2Aの充電器を用意して接続したところ点滅はおさまった。

以上

とりあえずこんなところかな。問題はこの液晶を何に使うか、である。

Raspberry Pi 無線LAN接続

Raspberry Piに無線LAN経由で接続を行う。

用意するもの

個人的に実績のあるBUFFALOのWLI-UC-GNMEを推奨しておきたい。 これなら最新のはもちろん、古いRaspberry Piでも認識してくれる。 調子にのって高性能な最新のを選ぶと認識されずに苦労するので注意。

ちなみに今回用意したRaspberry Pi 2ならつないだ時点で無線LANを 認識して使えるようになってたのでGUIからいける気がするが、一応書いておく。

www.amazon.co.jp

無線LANを認識していることをを確認

接続したらコマンドを叩いてwlanを認識してくれているかを確認しよう。

pi@raspberrypi ~ $ ifconfig
wlan0     Link encap:イーサネット  ハードウェアアドレス cc:e1:d5:3f:bc:4a 
          inet6アドレス: fe80::3396:f140:f9b2:8ed9/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)

認識はされているものの、inetアドレスが割り当てられていないのでこれを行うことにしよう。 続いてlsusbコマンドでみてみる。

pi@raspberrypi ~ $ lsusb
Bus 001 Device 006: ID 04fe:0007 PFU, Ltd 
Bus 001 Device 005: ID 04fe:0008 PFU, Ltd 
Bus 001 Device 004: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]
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

ちゃんと認識されているようだ。

Bus 001 Device 004: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]

親機との接続

次に親機との接続設定を行う。wpa_passphraseコマンドを以下のように叩く。ちなみにWLI-UC-GNMは2.4GHzにしか対応していないので 5GHzと間違えないように。

pi@raspberrypi ~ $ wpa_passphrase ${SSID} ${パスフレーズ}
network={
    ssid="${SSID}"
    #psk="${生パスフレーズ}"
    psk="${暗号化パスフレーズ}"
}

するとnetwork設定が出力されるので、そいつをwpa_supplicant.confに追記する

pi@raspberrypi ~ $ sudo vim /etc/wpa_supplicant/wpa_supplicant.conf

パスフレーズは間違いがないか確認が取れたら消してしまおう。 また、利用する無線LANの設定に応じていくつか設定を追加する

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="${SSID}"
    psk="${暗号化パスフレーズ}"
        key_mgmt=WPA-PSK
        proto=WPA2
        pairwise=CCMP
        group=CCMP
        priority=2
}

続いてinterfacesを編集。

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

# 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

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

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

再起動

再起動後にifconfigしてwlan0にipアドレスが割り当てられていれば成功。

参考

www.amazon.co.jp

Raspberry PiにVNCでリモートアクセス

古い記事 の引越し、コピペ。

GUIでリモートログインしたい場合はVNCを利用できる。http://elinux.org/RPi_VNC_Server を参考にTightVNCを入れてみた。

セットアップ

#インストール
$ sudo apt-get install tightvncserver
#起動
$ tightvncserver

portは5900か5901で立ち上がるかと。

Macから接続する

macはデフォルトでVNCクライアントを持つらしい。Finder → 移動 → サーバーへ接続 で以下を入力。

vnc://raspberrypi.local:5901

成功するとこんな感じでアクセスできる。 f:id:takeR:20151102022957p:plain

参考

www.amazon.co.jp

Raspberry Piに SSHでリモートアクセス

古い記事の引越し。コピペ。

デフォルト設定であればすでにSSHが有効になっていて、外部からのフルアクセスが可能なはずなので、それを前提に接続のみ。IPアドレスDHCPで割り当てられたものを確認。

$ ssh pi@IPアドレス

** ホスト名でアクセスする Avahiを使用することで、ネットワーク名から名前解決をしてRaspberryPiにアクセスが可能になる。 最新のRaspberry Piなら最初から入っているかも。

$ sudo apt-get install avahi-daemon

インストールが完了したらraspberrypi.localでアクセスできるようになる。

$ ssh pi@raspberrypi.local

Estimote Nearables Developer KitでiBeaconについて学ぶ(Android編)

去年注文したEstimote stickersの開発向けキットが注文から丸一年ほどしてようやく届いたので早速試してみる。

estimote.com

なお、私は現在Android開発者なので、Androidで動作確認を行う。iOSでも試すかは未定。でもAndroidでは機能不足な雰囲気。

ドキュメント

まずは技術ドキュメントのありかを探すところから。Estimoteの開発はiOSが中心に行われている。Androidには含まれない機能も多いので、iOS経験者なら迷わずiOSを選択すべし。 AndroidについてはGitHubSDKのみではないだろうか。

概要

ざっくりと公式サイトの拙訳をしてみる。

iBeaconとは何か

Beaconは小さなコンピューターである。その32-bit ARM® Cortex M0 CPUには加速度、温度センサー、そしてBluetooth 4.0 Smart 、別名BLEと呼ばれる2.4Ghzの無線を備える。

以前のBluetoothテクノロジーと比較した際のもっとも大きなアドバンテージはエネルギー利用効率の高さである。それと我々のエンジニアが電源管理に関する多くの仕事を入れたおかげでEstimote Beaconsはたった1つのCR2477バッテリー上でデフォルト設定で3年間持続する。

信号範囲と近接計測

Beaconは灯台と考えることができる。しかし光の代わりに信号派を、船の代わりにスマートフォンにその存在を知らせる。Estimote Beaconsは70メートルの範囲を持つ。しかしその信号は回析(障害物の向こう側に届く)されることができ、水(人体も含む)によって妨害または吸収される。現実世界では40m-50mと考えるのがよい。

携帯や他のスマート端末はその信号の強さから距離を計測することができる。 Beaconに近ければそれだけ強い信号を受ける。Beaconはその信号を連続的にブロードキャストしているのではなく、断続的に点滅していることに注意が必要である。

Estimote Stickersとは何か

Estimote Stickersはより小さなBeaconで、厚さが3mmしかない。それらはまた1つのバッテリーで動作するARM CPUに加速度、温度計、そしてBlutooth信号を組み込んでいる。

オリジナルのBeaconが発生地点と静的なロケーションのために設計されたのに対し、Stickersは独立したオブジェクトをスマートにするのに最適である。

Nearablesは毎日のアイテム(あるいは犬なども!)をスマートオブジェクトに変化させるEstimote Stickersとクラウドのおかげで、何でもその位置とモーション、そして環境をブロードキャストできる。

stickersはどのように動作するのか

Estimote Stickersは7メートルの範囲と、1つのCR2020バッテリーあたり1年の寿命を持つ。 ランダムなiBeacon IDの平行して、stickersは定義されたNearable IDとNearable Typeを持つ。 Nearable IDは8byteの数値で、Nearable Typeはプログラムされた10分の1のコンテキストstikcerである。

  • bag バッグ
  • bed ベッド
  • bike バイク
  • car 車
  • chair 椅子
  • dog 犬
  • door ドア
  • fridge 冷蔵庫
  • shoe 靴
  • ブランク(自分ようのコンテキストを製作できる)

Stickersは2つのプロトコルを使ってデータをブロードキャストする。 iBeaconとNearableである。 これはそのパケット内により多くのデータを含むことができるようになり、全てのiBeaconの機能の 利益を得る。

nearableプロトコルには以下の情報が含まれる

  • nearable ID 8bytes
  • nearable Type ID (fridge,dog, shoe ...)
  • 方向
  • 空間内の方向
  • 動作モーションのX,Y,Z値
  • 温度
  • ブロードキャスト値(近接計算に使われる)
  • バッテリーレベル
  • ファームウェアのバージョン

nearableの開発

nearableと対話するアプリはiBeaconと同じロジックに従う。ただしiBeacon IDの代わりに Nearable IDとNearable Typeを使う。もしiBeaconの経験があるなら、stickersを使うことは たやすい。

加えて、何かをトリガーとしたいなら、全ての状況に応じたデータが得られる。方向、nearable type, モーション、周囲の温度、1日の時間などだ。

<拙訳終わり>

どこから始めたらいいの?

とりあえず開発キットは届いたが何をどうすればよいのか。これも公式ブログに記事がある。

How to get started with Estimote Beacons? – Estimote Community Portal

だいたい以下のような感じのことが書いてある

  1. 箱から出せ
  2. アプリをダウンロードせよ
  3. スマホBluetoothと位置情報を有効にせよ
  4. デモをやってみろ
  5. Estimoteのアカウント作れ
  6. 自分のアプリを作れ!!

大したこと言ってない気がするが、とりあえずアプリをダウンロードして使ってみよう。

アプリのダウンロード

公式のデモアプリがあるのでインストールしてみる。先に述べておくと、このアプリよりもGitHubSDKに付属するデモアプリの方が参考になるだろう。

アカウントを作ろう

注文した人は既にアカウントを持っているはず。 Estimote Cloudにログインすると購入済みのBeaconなどの情報が得られる。

Estimote Cloud

Android SDKを試す

GitHubSDKがある。jar及びaarでの提供となっており、オープンソースではないっぽい。

Android 4.3以上

Bluetooth Low Energyが4.3からなので、SDKも4.3以降が対象となっている。すなわちminSdkVersionは18となる

defaultConfig {
    minSdkVersion 18
  }

SDKでできること

  • 範囲内にあるBeaconのスキャン(またはフィルタ)、レンジング
  • Beaconの領域検知(Beaconのエリアに入った・出た)
  • nearables (Stickerなど) の発見
  • EddyStoneのスキャン Beacons   |   Google Developers
  • Beaconの特性の読み書き

renging(レンジング)とは何か

デバイスとビーコンとの相対的な距離を測ること

参考: iBeacon(3) - リージョン監視とレンジング

アプリを登録する

estimote cloudにアプリを登録することでAPP_IDとAPP_TOKENがもらえる。なお、アプリ登録時に選択肢にSwiftObjective-Cしか選べない箇所があるが、IDとTOKENのゲットには関係がないので適当でOK。登録が終わるとテンプレート実装がダウンロードされるが、これもiOS向けなのでAndroidには無関係である。

実装

ざっくりいうと

  • onCreate でManagerつくってリスナーを設定
  • onStart で接続してスキャン開始
  • onStop でスキャン停止
  • onDestroy で切断

Application

EstomoteSDKの初期化をApplicationクラスの継承クラスで行う。 Estimote Cloudに登録していない場合はこの記述は不要かもしれない(未確認)。

public class EstimoteApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

    // Initializes Estimote SDK with your App ID and App Token from Estimote Cloud.
    // You can find your App ID and App Token in the
    // Apps section of the Estimote Cloud (http://cloud.estimote.com).
    EstimoteSDK.initialize(this, EstimoteConstants.APP_ID, EstimoteConstants.APP_TOKEN);

    // Configure verbose debug logging.
    EstimoteSDK.enableDebugLogging(true);
    }
}

Activityの実装サンプル

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private BeaconManager beaconManager;
    private String scanId;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        beaconManager = new BeaconManager(getApplicationContext());

        Log.d(TAG, "onCreate isBluetoothEnabled:" + beaconManager.isBluetoothEnabled());
        Log.d(TAG, "onCreate checkPermissionsAndService:" + beaconManager.checkPermissionsAndService());
        Log.d(TAG, "onCreate hasBluetooth:" + beaconManager.hasBluetooth());

        beaconManager.setNearableListener(new BeaconManager.NearableListener() {
            @Override
            public void onNearablesDiscovered(List<Nearable> nearables) {
                Log.d(TAG, "Discovered nearables: " + nearables);
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        beaconManager.connect(new BeaconManager.ServiceReadyCallback() {
            @Override
            public void onServiceReady() {
                scanId = beaconManager.startNearableDiscovery();
                Log.d(TAG, "onServiceReady scanId:" + scanId);
            }
        });
    }

    @Override
    protected void onStop() {
        super.onStop();
        beaconManager.stopNearableDiscovery(scanId);
        Log.d(TAG, "onStop scanId:" + scanId);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        beaconManager.disconnect();
    }
}

データが取得できればこっちのもの。あとは良しなに実装すればよい。