2014年8月24日日曜日

BL600のVirtual Serial Portを動かす

BL600でSPPのようなシリアル通信ができないかとさがしていたところ、公式サイトでVirtual Serial Port (vSP) Bridge and Command Modes Demonstrationというデモがあったので、同じ物を作ってみました。

BL600のソフトウェア部分はファームウェアとSmartBasicの2段構えになっていて、古いバージョンのファームウェア(1.3.57未満)でvSPを使う場合は専用のSmartBasicのコード(upass.vsp.sb)を使う必要がありました。新しいファームウェア(1.3.57以降)ではファームウェア側にその機能が取り込まれており、ジャンパ線を繋ぐだけで利用可能になります。

公式のデモ動画にSIO_7とVCCを繋ぐと、特に何もせずvSPとして動作してくれました。デモ動画では開発キットで通信していましたが、今回は手持ちのBL600にUSBシリアルを接続し、配線を同じにしたものを使用しました。Nexus4にはLaird BL600 Serial(Google Playからダウンロード)をインストールしました。
PC側はUwTerminal(BL600の開発用ツール)を起動し、USBシリアル側を開いています。 Nexus4側はアプリでConnectを押してBL600と接続しています。

PCとNexus4の間で、BL600を経由したvSPでメッセージのやりとりができました。PC側は今回はUwTerminalを使用しましたが、Linuxで一般的なcuコマンドなどでも通信できます。

気になった点として通信速度があると思います。正直なところ遅いです。メッセージがやり取りができる程度だと考えたほうが良いでしょう。
ボーレートが標準で9600となっていますが、これはAT+CFGコマンドで変更が可能です。ただ大きい数字にするとデータ化けが発生していました。

Android側のサンプルアプリであるLaird BL600 SerialはiOS版もありますので、iOSから同様の通信もできると思います。

BLEで通信する場合、GATT上で大抵のことは事足りるのでユースケースとしては疑問が残るところもありますが、シーケンシャルな通信が必要な処理や、既存の低速な有線シリアル通信を置き換えることには使えるかもしれません。

2014年3月16日日曜日

BLE600でビーコンを手ハンダで作る

BL600というBLEモジュールを入手したので、BLEで何か作れないか試行錯誤している今日このごろです。

BLE600は技術基準適合証明が通っているので日本国内でも安心して使用できるBLEモジュールです。BLE600自体は非常に小さいモジュールで、裏の端子も0.8mmピッチと小さくなっています。

この小さいモジュールを無理やりブレークアウトしてビーコンを作ります。まず、適当なユニバーサル基板を準備します。小さい部品なのでフラックスは必須です。

ユニバーサル基板を適当に斬って、モジュールを押し込む穴を作ります。モジュールには端子にハンダを塗布します。ハンダの塗布にはこの動画(How to Solder QFN MLF chips...)の3:40辺りの方法を使いました。

動作確認に最低限必要な端子を半田付けします。細めのスズメッキ線をピンセットで押さえながらハンダゴテを軽く当てると溶接されます。この時にハンダゴテを当て過ぎると端子がモゲるので当てる時間は必要最低限にします。

ハンダゴテで炙りすぎてモゲた例。一つ駄目にしました、、、orz

USBシリアルを繋いで動作確認をします。BL600の場合は専用ツールのUWTerminalで通信できるかを確認します。

問題がなければ電池ホルダーや電源スイッチ、nAutoRun用のDIPスイッチを取り付けます。

裏の配線は触るとポロッと行くことがあるのでグルーガンで固めます。グルーガンはダイソーのものを使用しました。

このままでは何なので3Dプリンターで箱を作ります。不恰好だけど今回はただの箱にしました。

印刷が終わったら中に押し込みます。寸法を測って専用に作った箱なのでピッタリ収まります。
蓋を閉じて完成です。

ぶっちゃけていうと汎用のタグを使ったほうが早いし安いので意味的なものはあんまり無いですが、今回ここまで作れたので、次からはセンサー的なものを載せたものを作りたいと思います。

ちなみに今回は自力でブレークアウトしましたが、半田付けに自身が無い人は頑張らなくても、@ksksue 氏がBL600 Breakout Boardを頒布されているので、そちらを使えば余計な苦労をしなくても済みます。
並べると一目瞭然ですが、明らかに手ハンダの方が大変です、、


2014年1月14日火曜日

PocketDuinoで温度湿度計を作ってみた

Androidの標準の温度センサーは実質的に端末の温度がとれてしまうので、センサーを外にだして温度と湿度を取れるようにできたらと思っていたところ、PocketDuinoを頂いたので温度湿度計を作ってみた。


PocketDuinoは@ksksue氏が制作したAndroidのUSBポートに直接差し込むことのできるArduino Pro Mini互換のボードです。(PocketDuino公式サイト
 
パッケージにスマートフォンにサクッと刺せそうなイラストが描かれています。
外観はArduino Pro miniの上にUSBコネクタがそのままついたような形になっています。
裏面は何も無く、配線用のホールだけとスッキリしています。


そのままでは遊びにくいのでDIPピンをつけました。
これでいろんな物を繋げることができます。


取り付けたDIPにGrove系の温度湿度計を繋げたいので接続用の中継基板を作ります。
紙エポキシのユニバーサル基板から作ります。
紙エポキシは柔らかいので金鋏で簡単に切れます。大きさを合わせて切断します。
メスのDIPピンのコネクタと、Grove用のコネクタを繋ぐためのDIPピンを取り付けます。今回使用した温度湿度センサーはSeed StudioのTemperature and Humidity Sensor Proです。VCCとGNDはそのままArduinoのVCCとGNDに結線し、今回は信号線をD3ピンに接続しています。(実はA0やD2といった別のピンに繋ぐとデータ化けが発生しました。)
Grove用のコネクタの片方を雌のDIPピンにしていたので、それを接続します。写真ではわかりにくいですが、引っ張っても抜けないように画像の赤と白のコードの辺りにワイヤーロックをしています。
Grove用のコネクタのもう片方を温度湿度計に接続します。

PocketDuinoにスケッチを焼き、Android側も専用アプリをインストールした後、PocketDuinoを接続します。(スケッチとAndroidのソースはこちら)
PocketDuinoの電源が入って青いLEDが点いているのがわかります。アプリ側も温度と湿度が取得できて画面に表示できています。


流石に基板剥き出しでは何なので、外装を作ります。
基板の寸法を測って収まる箱を作ります。デザインは適当で少々無骨ですが今回は気にしません。(FreeCADの3Dモデルデータはこちら
3Dプリンターで印刷します。
印刷し終わったら部品が収まるか確認します。問題がなければ部品を納めて蓋をします。今回は背面の4箇所をネジ止めできるようにしているのでタッピンビスでサクッと閉めます。
箱からはMicroUSBの端子が出ているのと、センサー部が外気に触れるように窓があります。


以上でPocketDuinoを使って温度湿度センサができました。USBの端子をUSB Host APIに対応している最近の端末に挿せば温度と湿度が測定できます。
実際に作ってみて意外に大きいと感じました。挿しっぱなしにすることは出来無さそうですが、たまに指して測定という用途には使えるかも知れません。ただ、外装をジャケット型にすれば挿しっぱなしも可能だと思います。

今回はAndroid側のソフトやスケッチについては特に触れませんでしたが、なんだかんだで、プログラムの実装も大変でした。それでも個人ででもこういったデバイスが作れる時代になったのでモノ作らーとしては嬉しい限りです。