技術書典生まれの即売会向けミニレジ「レジプラ」。技術書典4の開催を記念して、Kindle本「レジプラができるまで」の内容を無料公開。
ファームウェアの概要
2016年が明けてからは、いよいよ本格的な開発に着手しました。まずは、koshianのファームウェア(以降、F/Wと表記)開発からスタート。レジプラがkoshianに求める要件は、ごく単純です。
(1)ボタンの押下を検知し、BLE経由でアプリ側に通知できること
(2)同じ場所で複数のレジプラを同時に使用しても、BLEの接続が混線しないこと
(即売会でいろんなサークルがレジプラを使うことを想定)
これを実現するF/Wを目指して、開発を行いました。
開発環境
koshianのF/W開発は、Broadcom(BLEモジュールの開発元)の提供する統合開発環境 WICEDで行います。WICEDのつらい点は、個人で使ってる人が少ないため、参考にできるサイトがほとんどないところです。基本は、Broadcomの開発者コミュニティ(英語)に入り浸って情報収集する日々でした。開発を進めるためには、F/W書き込み用のハード環境も必要になります。具体的には、koshianとPCをシリアル接続するための回路を、ブレッドボード上に手作りしました。製作費は約4,000円です。この他にも、F/W開発用のテストボード(12,000円)も購入。準備段階で、意外と出費がかさみます......。
レジプラ要件の実装
環境ができれば、次は実装です。まず、要件(1)ボタン押下を検知してアプリ側に通知するというのは、BLEの仕組みをそのまま使うだけなので、特に悩むところではありません。一方、要件(2)BLEの接続が混線しないこと、というのはいろんな実現の仕方があります。
少し補足しておくと、即売会の会場内には、多数のレジプラが存在することになるはずです(そうであって欲しい)。そのとき、自分のアプリが意図せず他人のレジプラに接続してしまうと大問題になります。これを防ぐためにはどうすればいいか、というのが本要件です。最終的には、BLEに知見のある知り合いに意見を聞くなどして、次の仕様に落とし込みました。
(a)F/Wは、各レジプラにユニークなシリアル番号を設定する
(b)ユーザは、スマホアプリに自分のレジプラのシリアル番号を設定する
(c)スマホアプリは、設定されたシリアル番号のレジプラにのみ接続する
まどろっこしく思えますが、簡単で確実な方法だと思います。アプリ側でシリアル番号の設定があったり、レジプラの基板にシリアル番号が書かれていたりするのは、この仕組みを実現するためです。
製品向け F/W アップロード
できあがったF/Wは、製品用に使うkoshianへと書き込む必要があります。ここまでは、 ブレッドボード上に構築した環境でファームアップを行っていましたが、さすがにその環境で何十個ものkoshianを焼くのは現実的ではありません。ということで、Bluetooth を使ったファームアップ方法である「OTAFU」(Over-the-Air Firmware Upgrade)に挑戦しました。
実際には OTAFU だけでなく、
1.F/Wのソースをkoshianごとに書き換える
(ユニークなシリアル番号を与えるため)
2.コンパイルしてF/Wを生成する
3.OTAFU経由でファームアップする
といった一連の作業を自動化しました。
OTAFUの実現にあたっては、Qiitaの記事「Konashi OTAFUツールをSwiftで作ってみた 」が大変参考になりました。これがないと途方に暮れていたかもしれません。感謝の意を込めて、ここに記しておきたいと思います。