Ethereum の SmartContract を使って車をアンロックできるようにしてみようと思ったんだけど、お金が無くて車を買うことができなかったので、まずラジコンを作ってそのラジコンのアンロックを SmartContract でできるようにしてみた。ラジコンはせっかくなので、Raspberry Pi ベースにして iPhone から BLE で操作できるようにした。
Ethereum の SmartContract でアンロックできて遊べる BLE ラジコン
このラジコンには Raspberry Pi 3 が乗っかっていて、iPhone と Bluetooth で接続・コントロールができる。Raspberry Pi 側のコードは Node.js を使って書いた。bleno というライブラリを使用すると BLE の Peripheral としてふるまうコードを驚くほど簡単に書ける。iOS 側は普通に CoreBluetooth を使っただけ。
車体はすべてタミヤ製。ギヤ・モータは シングルギヤボックス、車体は ユニバーサルプレート、タイヤは スポーツタイヤ と ボールキャスター を使用。モータの制御は L298N モータドライバモジュールを使用。
あとは、ラジコンのロック・アンロックを管理する Ethereum の SmartContract を書いて、Raspberry Pi 側の Node.js のコードで SmartContract の状態変数の値をみてロック状態かアンロック状態を判断するようにした。ここでは Web3.js, infura.io を使用して外部のノードをみにいくようにしているけど、外部のノードは嘘をつく可能性があるので、ほんとは ローカルにノードがあったほうがいいような気がする。
---
今日はせっかくの遊びなので、Swift でいろいろクソコードを書くのに挑戦できて面白かった。日本語や絵文字をメソッド名や変数名に使えてとてもたのしい。以下、ラジコンを動かすために iOS から Raspberry Pi に Bluetooth でコマンドを送るためのコード。ひどい。
---
それにしても、Node.js も iOS も Raspberry Pi もなんだかいろいろ便利ですごいなあ。偉い人たちがライブラリやら環境やらを揃えてくれてるおかげでこのおもちゃを全部作るのにかかった時間は正味 3 時間くらい。ぼくは役に立たないものを作るのは大好きだけど、たまには他の人の役に立つものをつくりたいなあ。