3Dプリンタ、レーザ加工機、UVプリンタなどが個人で使える神戸 Maker'sに行ってきた
9/2にオープンしたての神戸のMaker'sの無料見学会へ行ってきたのでそのレポです。
Maker'sはいろんな種類の高額加工機を個人に貸してくれる工房です。
最近自分のプロジェクトで、イメージしたものを作れたらなぁと思うことが多くなってきたので、
ここだったら作れるかもという期待を胸に行って来ました。
Beaglebone BlackやRaspberry Piを使うときのオススメガジェット Lapdock
BBBやRPiのためのディスプレイはやたら大きい画面で持ち運びに不便だったり
基板むき出しのAitendoのディスプレイだったり、あんまりスマートなものがないなぁと思っていたのですが
やっといいものを見つけました。
それがMotorolaのLapdock for Atrix 4G
※Motorola Webサイトより
HDMIディスプレイとディスプレイ表示用バッテリー、USBキーボード、タッチパッドマウスが一体型となっているというスグレモノです。
一見ノートPCに見えますがノートPCではなく、あくまでドックなので写真左側の小さいスマホが本体でディスプレイではそれをHDMIで表示しているだけです。
クラシックBluetooth/BluetoothLowEnergyメモ
クラシックBluetooth
- FH(Frequency Hopping):ストリームが途切れないよう1600times/sec周波数チャネルを切り替える仕組み。マスタがランダムにホップし、スレーブはこれに追従する
- 2402-2480MHzの間に1MHz間隔で79個のチャネルをランダムに選択
- AFH(Adaptive Frequency Hopping):Wifiを検出したらその帯域を避けるホッピング方式。Bluetooth1.2からサポート。
- Zigbeeはネットワーク全体で一つの周波数チャネルを使用
- WifiはAP毎にチャネルを選択可能。ただしチャネル同士の帯域はオーバーラップしている
- Bluetooth Class1 飛距離100m, 出力 100mW
- Bluetooth Class2 飛距離 10m, 出力 2.5mW
- Bluetooth Class3 飛距離 1m, 出力 1mW
- フレネルゾーン: 送信側から発せられた電波を受信側に電力損失なく到達させる空間
- 外部アンテナの指向性に注意
- BT3.0はWiFiと同じ24Mbpsをサポートしているが、Wifiを使う人がほとんどのため使われていない?
- BTのネットワークトポロジは基本スター型でピコネットと呼ばれる。ピコネットはマスタ1台スレーブ7台まで構成可能だがスレーブ8台目はパークモードと呼ばれる待ち状態で存在し、マスタと同期することができる。
- さらにマスタ同士をつなぐスキャッタネットにも対応。
- ACL 非同期通信。データ通信用。ポーリング方式のパケット交換リンク。
- SCO 同期通信。音声通信用。一定の転送レートを保証。
Bluetooth Low Energy
GoogleIO13 "Best Practices for Bluetooth Development"セッションの全訳
Google IO 2013のBest Practices for Bluetooth Developmentのセッション全訳です。
(2013/05/25:質問は未翻訳。後日やる。)
目新しい発表としては
- 次期APIのlevel 18からBluetooth Low Energyに対応
- 次期APIのlevel 18からAVRCP1.0->1.3へバージョンアップ
- 次期APIのlevel 18からBluetoothAdapterのgetDefaultAdapterはサポート外になる。lv18以降は追加されるBluetoothManagerを使うように。
といったところ。
内容としては、これは!という奇抜な技が紹介されているわけではなく
基本的なところを押さえた内容になっています。
導入部分ではBluetoothの起源についての話が出てくるなど
わりと面白い内容にはなっているので
興味有る人はざっと目を通しておいて損はないかと。
※講演者に勝手にキャラつけ遊んでます。翻訳作業が退屈だったんですゴメンナサイ。
補足情報として
@tnoho氏から「SAMSUNG BLE SDKをベースにしているのでは」という情報をもらっています。
http://developer.samsung.com/ble
http://img-developer.samsung.com/onlinedocs/samsung_ble_docs_200/index.html
なるほど、メソッド名もほぼ一致してるぞということで、このBLE SDKを元にしているのはほぼ間違いないかと思います。
またBTLEに関してこのセッションの内容だけではいまいち読み解けなかった人は
@u_akihiro 氏によるプレゼン資料を参考にすると理解が深まります。ボクも参考にさせていただきました。
「Bluetooth LE体験講座」http://www.slideshare.net/reinforcelab/20130322-btle
[Android][GoogleIO2013] Google「ユー、Google GlassにUbuntu入れちゃいなよ」
GoogleIO 2日目。
今日おもしろかったセッションは"Voiding Your Warranty: Hacking Glass(保証対象外:ハッキンググラス)"
GoogleがGoogle glassのroot奪取方法を解説して終いにはUbuntuを入れてしまったというセッション。
以下セッションのスライド写真を見ながら発表内容を一緒に振り返ってみましょう。
Google Glassの中身は実はAndroidだったりします。下の写真がGoogle Glassの主なスペック。
GoogleGlassにはmicro-B USBポートがついていて、スマホ端末と同様、PCとUSBでつなぐとadbコマンドが打てます。
工場出荷時にはroot化されていないためすべてのrootアクセスは禁止されています。
このセッションではGoogleの中の人がご丁寧にrootの奪取方法をわかりやすく解説してくれました。
以下の通りにコマンドを実行していくだけです。
ね、カンタンでしょう?
root化の話が一段落すると、今度はUbuntuを入れるとかなんとか言い始めました。
LinuxOnAndroidという仕組みがあるようでGlassのUbuntu化には下写真の2つのAndroidアプリを入れるとうまくいくようです。
そして、その場でUbuntuインストールのデモを見せてくれました。
まずはComplete Linux Installerアプリで事前に用意された/sdcard/ubuntuディレクトリ内へアクセスして
ファイル群が用意されているかをターミナルアプリで確認しています。
※下写真はGoogleGlassで見えている画面
そして $ sh ubuntu.sh を実行するようです
実行後 /etc/lsb-release(Ubuntuのバージョン情報が書かれたファイル)を確認するとUbuntu 12.04の文字が・・・
ね、カンタンでしょう?
ここまでお膳立てされるとハッキングというよりスクリプトキディのような感じがしますが・・・
とにもかくにもこのセッションをつうじてGoogleは
「ハードは僕らがいいものを作ったから、ソフトで一緒におもしろいことしようぜ」
と言ってるような気がしました。
ということで
GoogleGlassへUbuntuインストールいつやる?
今でしょ!
※Google「root奪取すると保証対象外になります」
AndroidのBTLE対応情報まとめ
GoogleIO 1日目。
一番おもしろいと感じたセッションはAndroid枠の"Best Practices for Bluetooth Development"
セッションタイトルにはBTLE(Bluetooth Low Energy)という文字はまったく出てないのですが
ふたを開けてみるとほとんどBTLEの話でした。
コイン電池で1〜2年無線通信できるということでiPhoneが先行してBTLEを採用していた背景があり
Android対応はまだかまだかと騒がれていたため、会場に来ていた人たちはBTLEにかなり期待していたようで
"Bluetooth Low Energy"というタイトルページが出てきただけで大きな歓声が沸き上がっていました。
で、結論から先にいうと、BTLEはAndroid API level 18から正式対応になるとのことです。
(2013/05/15時点でlevel 18の情報は未発表)
セッションで発表されたBTLE Android対応のポイントをかいつまんで整理すると。
・BTLEはBluetooth 4.0対応の端末で利用可
(4.0=BTLE+3.0と見ていいらしい)
・Single-mode(BTLE)とDual-mode(BTLE+Basic Bluetooth)どちらも対応する
・Android端末⇔デバイスの通信はOKだけど、Android端末⇔Android端末の通信はNG
・GATT(generic attribute profile)に対応ということでイケてるらしい
BTLEの接続フローとしては
1.BTLEスキャンを繰り返す(電力を抑えるためON/OFFを繰り返す。NFCと同じ?)
2.BTLEデバイスがみつかる
3.コネクションを張る
4.サービスを判定し、通信を始める
というごく単純なフロー。
具体的なコードとして挙がっていたのは
LeScanCallbackクラスでLEスキャンのたびにonLeScanメソッドがコールされるということ。
そして、BTLE対応判別後は
BluetoothGattCallbackクラスのメソッド
onConnectionStateChange,onServicesDiscoverd,onCharacteristicRead
などを使うということ。
より詳しい話はAndroid開発者向けBluetoothページで公開していくらしいです。
http://developer.android.com/guide/topics/connectivity/bluetooth.html
(2013/05/15時点ではまだBTLE情報は未掲載)
また、これに関するツイートを流したところ
@tnoho氏から「SAMSUNG BLE SDKをベースにしているのでは」という情報をもらいました。
http://developer.samsung.com/ble
http://img-developer.samsung.com/onlinedocs/samsung_ble_docs_200/index.html
なるほど、メソッド名もほぼ一致してるぞということで、このBLE SDKを元にしているのはほぼ間違いないかと思います。
Bluetooth Low Energyってなんぞ?という人は @u_akihiro 氏によるプレゼン資料を参考にすると良いかと。
「Bluetooth LE体験講座」http://www.slideshare.net/reinforcelab/20130322-btle
とても良くまとめられています。
セッションを終えて、低消費電力な無線通信を活かしたプロダクトの開発にトライしてみようかなと思いました。
さて何を作ろうかな、と考え始めるとワクワクしますね。
VerilogHDLテンプレート
VerilogHDLで書き始めのテンプレート
eclipseのveditor(http://sourceforge.net/projects/veditor/)を入れて
Window>Preferences>Verilog/VHDL Editor>Templates
で補完候補に登録しておくと幸せになれる。
/* * module: ${name} * Date:${date} * Author: ${user} * Description * ${cursor} */ /* * Copyright (C) 2013 Keisuke SUZUKI * Licensed under the Apache License, Version 2.0 * http://www.apache.org/licenses/LICENSE-2.0 */ ////////////////////////////////////////////////////////////////////////////// // includes ////////////////////////////////////////////////////////////////////////////// `include "timescale.v" ////////////////////////////////////////////////////////////////////////////// // module and I/O ports ////////////////////////////////////////////////////////////////////////////// module ${name} ( // Connect to System Signals input clk, // System Clock xxMHz(xxns) input rst // System Reset ); ////////////////////////////////////////////////////////////////////////////// // parameter ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// // reg and wire ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// // instance ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// // RTL ////////////////////////////////////////////////////////////////////////////// endmodule