(2014/11/01~)
2014/11/12

第 29 回エンバカデロ・デベロッパーキャンプ

講師として参加しました。結果は…散々でした。あれ程テストを繰り返したのに...orz

着飾らない IoT - Reprise -

はっじまるよー♪

はじめに

最初から逃げ口上が書いてあった事でもお分かりのように当初から「嫌な予感」しかしませんでした。後で DL できる資料は完全版ですが、事前に DL できるものは所々端折ってあります。デモの部分を詳細に書くとネタバレになるのと、デモの時間は不確定要素ばかりだったからです。


       /  ̄\
     γ"⌒ ヽ  ヽ
    i l!从ノリ)  
    | リ゚ ー゚ノリ
    / と~卯つ
  /// ノ__ゝヽ
 〃/レル i_/ J ヽヽヽ 

大体、コイツのせいですが。

IoT の話なのに、IFT 三人衆が出てきたのはご愛嬌。

IoT とはなんぞや?

「バズワードくさい」 というのは僕の偽らざる気持ちで、書籍や Web の記事を読んでも猜疑心は消えませんでした。

ほら、「それ USB 機器である必要あるのか?」 って商品があるじゃないですか…何とは言いませんけれど、思い浮かぶものがアナタにも一つ二つはあるでしょう?

IoT 絡みと言うと、特に iOS 用の BLE 機器にね…まぁ、昔から iPhone 用マルチツール みたいなのはありましたけどね。「バカじゃないの?」と。

"着飾らない IoT" が今回のセッションのタイトルですが、では "着飾った IoT とは何か" と言うと…?

IoT を支えるモノ (1) ~ BLE ~

BLE 機器は iOS 用がかなり多いんだ。スマホとペアで使うものは既にアプリが用意されているものが多く、アプリを自由に作る事が前提の iBeacon のようなものは意外と少ない。

それと、ビーコンは iOS が先行しているけれど、利用者を選ぶものは広く使われることはないと思うのよ (Android 端末でも同じ動作をしないとね)。端末貸し出してイベントをするであるとか、社内の端末だけで何かやるなら話は別だけど。

iBUFFALO BSMBB09DS という Bluetooth 4.0 対応マウスはプロファイルとして HOG (HID Over GATT) を利用します。当然、Bluetooth アダプタのスタックが HOG に対応していなければ使えませんが、この製品は USB アダプタも付属しています。

mbed HRM1017REBL600FR は BLE 対応機器を作るのに使えますが、当然ハードウェアの知識が必要となります。

Delphi で BLE 機器をコントロールしたいのなら、XE7 + OS X または iOS という組み合わせでやった方がいいと思う。Windows は 7 が現役で存在する限り難しいかなぁ…Bluetooth 非搭載のノートとかもあるし。Android も Blutooth 4.0 対応じゃない端末があるしなぁ。

IoT を支えるモノ (2) ~ IoT ゲートウェイ~

これはね…イロイロ紹介できるとは思う。今回のセッションがデブキャンじゃなかったらね

Delphi と絡めるとなると

こんなのを紹介せざるを得ない…Delphi 製アプリケーションを動作させる必要があるからねぇ。Apple 製品?大量のモノをネットに接続するんだからコスパ優先となると思うんだ。Mac Mini でも 5 万円超だし、中古の iPhone を使う訳にもいかないでしょう?そういった意味で IoT ゲートウェイとしては OS X / iOS は論外だと思うの。

メーラーボードは…

何でメーラーボードに詳しいのかって?そりゃ作ったことがあるからですよ。ケースにちゃんと収めてね。でも某社に借りパクされちゃったんだよね…残念ながら。

Panasonic のネットワークカメラもメーラーボードと同じような使い方ができます。屋外用のものもありますし、電源もカメラから引けるのでイロイロできると思います。

IoT を支えるモノ (3) ~ デバイス~

用途によるので紹介しようがないですよね…。

IoT を支えるモノ (4) ~ バックエンド~

バックエンドの処理は Delphi が得意とする分野ですよね。これに関しては同時刻に行われた田中さんのセッションでやってらしたんですよね…。

メーラーボードや Panasonic のネットワークカメラとかを使う限りはハードウェアを意識する必要はありません。

IoT をやる上での 問題点

どうしようもないのが技適。もう少し具体的に知りたいのであれば、以下のブログ記事を参照の事。

ね、どうしようもないでしょう?

いやね、あるよ?ガジェットはイロイロと。BLE 対応製品だってね、あるんだよ海外には。でも、面白そうなのは大抵技適を通っていない訳で、それをデブキャンでやったら 「犯罪してますよ」 と公言しているようなものです。セッションビデオが公開された時、イタズラでチクられたら僕犯罪者ですよ?ビデオが証拠になるかどうかは微妙だけど、セッション参加者が証人になっちゃうわけで。

BackStage (1)

後半 (本編) に行く前に今回のセッションの裏話をいくつかしましょう。

セッションタイトルについてですが、Delphi と絡めた IoT の話というのは難題だな、と講師を引き受けた時点で思いました。技適の話は以前から知っていましたから、僕のサイトでも

ちょっとだけですが、技適に触れています。

Bluetooth のサポートは XE7 からなので、最新版のみで使える機能となります。こんなニッチな話をしても仕方ないし、第一面白くありません。アプリケーションテザリングで、Bluetooth が使えるのも知っていますが、IoT じゃないですよねぇ。ですが、他の Delphi 絡みとなると、後はバックエンドの話となってしまい、お題の "IoT 関連" からはちょっと離れてしまいます。

そもそも面白そうなガジェットを海外から個人輸入するとなると船便になるので数週間掛かります。ギリギリ間に合ったとして、それが不良品だったらアウトな訳で、そんなバクチはできませんでした。不良品じゃなくても、それが Delphi からコントロールできるかどうかもバクチな訳です。なので、Amazon や秋月で短納期で入手できるモノを使ってセッションを行おうという方向性になりました。

BackStage (2)

秋月から部品を購入してイロイロ試しました。Win32 ではソコソコ&イロイロやれました。でも、「IoT で Windows オンリーはないだろう?」 と思い、組み込みに最も近い Android 端末でもイロイロやれないものかと思いました。これについては後述します。

BackStage (3)

構成がほぼ固まった時、一つ問題が出てきました。Android で OTG ケーブルを使うという事は、ADB 接続できない事を意味するというものです。簡単に言えば、動作中の様子を画面に表示できません

「これは困ったぞ!」 という事で僕が用意したのは Logicool のウェブカメラ C270 でした。商品到着後、これでテストしてみました…とてもキレイに映ります。会場のプロジェクターの事を考えるとこれで充分に思えました。

でもね…ダメだったんですよ、このウェブカメラ。セッションの内容的に機器に寄る必要があったのですが、寄るとボケてしまいます。C270 を分解すれば焦点を調整する事は可能なのですが、そうするとちょっと引いた時にまたピンボケしてしまいます。

上記の事が判明した時点で上位機種である C525 を注文しました。C525 にはオートフォーカス機能があるのです。これでダメならさらに上位機種である C920t にしなければならなくなるトコロでしたが、結果的には C525 で事足りました。

しかしながら、さらなる問題に気付きました。セッション内でケーブルの抜き差しをする必要があったのですが、カメラを片手で持ちながらなんて芸当は無理なのです。もしできたとしてもカメラが激しくブレてしまい、スクリーンを見ているヒトが気持ち悪くなってしまいます。

デジカメ用の三脚は使えません…脚が短いのです。脚が長いものは机に乗せられません…丁度いいものがないのです。「無ければ作るしかないじゃない?」

ダイソーとホームセンターで材料を購入。

そして以下のように加工しました。

  1. 突っ張り棒のキャップを外します。両方です。
  2. 小さいキャップに穴をあけ、T字金具をボルトとナットで固定します。

  3. 大きなキャップにも穴をあけ、ミニ三脚を W 1/4 ナットで固定します。

    W 1/4 ナットは三脚のネジに合います。よっぼど高級な三脚じゃない限りコレで充分です。
  4. 三脚の真ん中の脚にはボルトを埋め込みます。

    これは転倒防止のための錘 (おもり) となります。
  5. 組み立てて完成!

この三脚は本当に重宝しました。ポール部は突っ張り棒なのでクルクル回して高さを調整する事ができます。また、カメラ側にはマグネットテープが貼ってあり、T字金具にカメラを固定できるようになっています。

BackStage (4)

セッションの前に朝から PC の接続チェックをやりました。ここでは何の問題もありませんでした。

…ところが、セッション直前にセッティングをしているとカメラがフリーズするわ、HDMI ケーブル挿したら PC が再起動するわでドタバタしてしまいました。朝のチェックじゃ何も起きなかったじゃないか!?直前まで控室で動作していたのをそのまま持ってきただけじゃないか!?

実は一部準備が間に合わず、セッション開始後にもチョコチョコと準備をしていました (^^;A


2014/11/13

できない事を嘆いても仕方ない ~ 着飾らない IoT ~

さて、(僕にとっては) 悪夢の本編…行ってみましょうか (震え声)。とりあえずデモソース一式をアップしておきました。

アナタの環境ではちゃんと動作するハズです。なお、ソースコードは XE7 用である事をあらかじめお断りしておきます m(_ _)m

購入したもの

まずは、Kindle Fire HD 6

スペックからするとコスパがいいです。現在でも 8GB 版は 1.2万円弱で購入できます。僕は 16GB 版を購入しましたけれど (2 千円しか違わない)。

専用カバーを付けると重くなりますが、カバーを閉じるとスリープになるので便利です。純正の OTG ケーブルもありますが、100円ショップの Seria 等で入手できますのでコレは必要ないでしょう。

残念ながらこのタブレットは 6 インチを超えており、スマホでもないので Appmethod 無償版の開発対象にはなりません。

次は MyBeacon USBスティック型 MB001 Ac

1,800円 (送料込) で入手できる iBeacon です。

そして PLANEX BT-Micro4 です。

BLE にも対応している Bluetooth アダプタです。

スペック上はこれらでイロイロできるハズでした…スペック上はね。

BLE デモ

用意したノート PC は OS が Windows 7 なので BLE のテストはできません。そこで XE7 のデモフォルダにある ProximityClient を Android 端末で試してみようと思いました。

そもそもこのサンプルは iOS 用ですね。Android でビルドすると TLabel が折り返されたりして正しく表示されません。そのままでは MyBeacon にも反応しないのも資料にあった通りです。仕方がないのでデバイス名をチェックしている箇所をコメントアウトで潰したら動作するようになりました…しかしこれが悲劇の始まりだったのです。

ちなみに、設定ツールの件は Android x86 (KitKat) を使って回避しました。

  1. Android x86 で Google Play に行き、設定ツールをインストール
  2. apk を PC へコピー
  3. Kindle Fire HD 6 へは adb install でインストール

このように、本筋じゃない箇所でトラブる事があります。スペックだけでは判んないですしね、こんなの。

そしてセッション本番でデモをやってみた時の事です。アプリを起動して MyBeacon に電源を供給…する前にアプリが反応 (゚Д゚)ハァ?

「おいおい、まだ MyBeacon に給電していないぞ?」 と思うのと同時に 「…ひょっとして他のビーコンが他にある?」 そう思いました。

後で EMBT の高橋さんに教えて頂いたのですが、会場周辺は結構 "進んでいて" ビーコンが設置されているとの事でした。IoT の注意点のトコで 「田舎をナメてはいけない」 と書きましたが、私は都会をナメていたようです (w

会場の笑いは取れましたけれど、私は芸人さんじゃないのでそんなのは求めていないんですけどねぇ...orz

方向転換

BLE だけではマトモなセッションにならないと思っていたので、最初から目を付けていた秋月電子の AE-UM232R

私が購入したのはキットで、ちょっとだけハンダ付けしなくてはなりません。でも、この内容だったら、完成品のモジュールを買うべきでした。

Windows でシリアル通信したい

完全版のセッション資料には誰得な PC-E500 用配線図もあります。PC-E500 に接続するには、信号の論理値を反転させる必要があるのですが、その方法も書いてあります。 セッション中でやらなかったのは "完全に場違い" だったのと、「どんだけのヒトが実機持ってて実際にテストできるんだろうなぁ (´ー`)y-~~」 と思ったからですwww

次に GPS を接続してデモをやってみました。この GPS の緒元は過去の雑談にあります。

ハイ、動きません…これには理由がありまして。当初は Source Forge にある Comport Library を使っていました。ところが XE7 では不具合が出るようなので、コメ欄にある XE7 対応版で上書きしたのです。これが間違いの元。一応バックアップを取ってあったのですが、XE7 対応版でコンパイルしたものはことごとくエラーになりました。

テンパっていてこの辺の記憶が定かではないのですが、動かないので Android のデモに移行した気がします (w

Android でシリアル通信したい

当初から嫌な予感がしていた私は、山菅さんにコンタクトを取って "Android FTDI/Prolific/SILICON LABS 232 通信 コンポーネント" の XE7 対応版を作って貰っていました。

今となって思えばですが、殆どのデモで失敗し 「なんじゃこのセッションは?」 という状況になっていたかもしれないと考えると恐ろしいです。コレを用意していなかったら本当にシャレになりませんでした。山菅さんには感謝の言葉しかありません。

このコンポーネントにはまだ改善点があるそうで、例えば中国市場向けの CH340 への対応を予定されているとか。Android 端末な IoT ゲートウェイに RS-232C 機器を繋ぐ場合には、このコンポーネントが非常になると思います。チップの種類をほぼ意識せずにコーディングできるのはとても有難いのです。

Windows でシリアル通信したい (SPP)

Windows の場合、SPP は仮想 COM ポート (VCP) として割り当てられるので、シリアル通信の延長で SPP 機器を制御できます。

幸いな事に、ちゃんと動作する EXE のコピーが残っていました (^o^)/

Android でシリアル通信したい (SPP)

これは XE7 の機能にあると思ってタカをくくっていました。ですが、どうやっても動作しませんでした。そもそも今回のセッションには評価版の XE7 を使っており、RTL の中身がどうなっているのかを確認できませんでした。自分の楽観的な予想が外れたため、それ以上は手の打ちようがありませんでした。

そこで、XE5 用の Androidapi.JNI.BluetoothAdapter.pas でやってみる事になったのです。ソースが確認できるっていい事だな、とシミジミ思いました。

「わずかな変更で XE7 でも動作する」というのはユニットスコープの事で、implementation 節にある FMX.Helpers.Android を Androidapi.Helpers に変更するだけで基本的には OK です。

以下は SPP でフルカラー LED 照明をコントロールするデモです (XE5)。

Bit Bang Mode (Windows)

秋月の AE-UM232R をチョイスした理由はこの Bit Bang Mode のデモをやるためでした。単にシリアル通信 (UART) したいのなら、Prolific でも Silicon Labs でもよかったのです。

上が Prolific のチップを搭載した USB<->シリアル変換モジュールで、下が Silicon Labs のチップが載った USB<->シリアル変換モジュールです。山菅さんの "Android FTDI/Prolific/SILICON LABS 232 通信 コンポーネント" はこれらにも対応しています。

さて、Bit Bang Mode をやるためにはブレッドボードが必要です。ブレッドボードの穴のピッチは 2.54mm…つまり、DIP-IC のピンピッチと同じな訳です。AE-UM232R は 24ピン IC サイズで、ピンヘッダも出ていますのでブレッドボードに直接挿せるというメリットがありました。

購入したのは、EIC-102J という、大き目のブレッドボードです。ジャンパーワイヤも付属していますが、私は別途ジャンパーコードも購入しました。私のようなハードウエア初心者は大きいサイズのブレッドボードがいいように思えます。配線が冗長になりがちなので、小さいブレッドボードを使うと何枚も必要になってしまいます。

スイッチにディップスイッチを使っているのは、ブレッドボードで利用するのに都合がいいからです。名前の通り "DIP SWITCH" ですから、ブレッドボードに直接挿せます。他のスイッチは加工しないとブレッドボードに挿せないのです。

この写真では右側に空きがありますが、セッションで使ったものには右側にも何やら配置してありました。これについては後述します。

ソフトウェア面ですが、最初は FTDI のサイトにある D2XX.pas で組んでみました…動くには動きますが、コードの書き方が冗長になってしまいます。グローバル変数に値を入れて関数をコールするなんてちょっとイヤでしょ?

そこで見つけたのが FTDI class library for Delphi でした。クラスでラッピングされておりとてもいい…のですが、こちらは Bit Bang Mode 用の実装がありません。仕方がないので改変して Bit Bang Mode も使えるようにしました。改変したものはデモソースのアーカイブに含まれています。改変した D2XX.pas は含まれていませんが、DLL の定義は FTDI class library for Delphi にすべて含まれていますので不要…ですよね?

言い忘れていましたが、D2XX.pasFTDI class library for Delphiオリジナルは ANSI Delphi 用なので、オリジナルをいじって利用する際には Unicode 版 Delphi で動作するようにしなくてはなりません。

さて、セッションのデモですが、こちらはうまくいきました。やはり保険は掛けておくものですね (^^;A

See Also:

Bit Bang Mode (Android)

Android では J2XX を使えばいいのですが、ぶっちゃけ XE7 を持っているのなら Java2OP が使えるので、Winsoft の "ComPort for Android FTDI" を使う必要はないかと思います。

(繰り返しますが) 私は評価版を使っていたので Java2OP は試せませんでした。Java2OP に関しては午後の高橋さんのセッションでも触れられていましたので、セッションビデオが公開されたらそちらも確認してみてください。

See Also:

まとめ

ぶっちゃけ、IoT やるなら、やましょう師匠 (山菅さん)のようなハードウェアに強いヒトを捕まえないとダメです。もちろん、丸投げするという意味ではありません。少なくとも上辺だけでもハードウェア技術者の話について行けるだけの知識は必要です。

「僕の言いたい事に気付いて、セッション終了後山菅さんに名刺交換に行けばいいのにな…Delphi 使いでハードウェアやれるヒトって貴重なんだし…」 と思いつつも、山菅さんに迷惑になる気がしたので明言は避けました (w

世の中にあるすべての映画を観る事が不可能なのと同じで、Delphi でやれる全方向をカバーするのは無理なのです。「だったら、その道のスペシャリストに助力を求めましょうヨ」 というのが今回のセッションのテーマでした。

LT

実は LT にも出る予定でした。IoT とはちょっとズレてしまうので、LT にしようと思ったネタもあったのです…が、今回は LT 枠が余っておらず断念しました。

…でもやりますヨ。Delphi / Appmethod Advent Calendar 2014 の記事として。内容も告知しておきます。

Bit Bang Mode を使った LCD (液晶キャラクタディスプレイ) の制御です。


2014/11/14

Delphi / Appmethod Advent Calendar 2014

今年で三度目の Advent Calendar。

まだまだ枠は空いていますので、是非参加してくださいネ。

彗星探査機 ロゼッタ

実は Delphi が一枚噛んでいるとの事。

10 年前ですから、使われた Delphi は 6 とか 7 でしょうかね?

追記: Delphi 5 とか 6 でした。

RAD Studio XE7 Update 1

リリースされました。

むぅ…なんとなく小粒なアップデートだなぁ。

追記: FireMonkey で 3D を扱っている方は Update1 を適用してはいけません。詳細は TViewport3D does not resize properly in Update 1 にて。是非 Vote を!

巨大な整数の演算に挑戦! (CodeIQ)

Delphi でのクイズです。

XE7 / Appmethod (1.15) 用となっていますが、XE2~XE6 で作っても大丈夫かと思います (ちょっとだけヒントかな?)。

第29回エンバカデロ・デベロッパーキャンプのまとめ (Togetter)

ぐぬぬ…。


2014/11/23

デブキャンセッションビデオ

公開されました。資料も公開されています。

DEKO の心を抉りたいというドSの方のみご覧下さい...orz

すべてのビデオが公開された訳ではありませんが、"とりあえず、デベロッパーキャンプの資料を読んでみようか。" も更新してあります。

Appmethod 1.15 Update1

Appmethod も XE7 Update1 相当のものが DL 可能になったようです。


 BACK   古いのを読む   新しいのを読む