こんにちは、エンジニアの森です。社内で行われているHack Day Japanに2011年夏に参加したときのレポートを書きたいと思います。作ったものはPCとArduinoをつないで、LEDを使って数字を表示するガジェットです。PC部分のソフトウエアを私が作成し、Arduinoを使ったハードウエア部分を稲津君に作ってもらいました。それぞれ担当部分を2回に分けて説明させていただきます。
ソフトウエア編
始まり
以前、私は社内のある数字を管理する業務を行っていた時期がありました。
その際、当時のリーダーから毎日、四半期や日々の数字の確認があり、手作業ではかなり面倒になったことから、自動的に集計して見てもらえるようにできないかと考えるようになりました。
この数字は社内のシステムに保管されていて、幸いなことにHTTPでCSVでダウンロードすることができ自動化には好都合でした。
ある日、近所の交番の前を歩いていたときに、交通事故の状況を表す掲示が目に入り、これと似たような電光掲示板を作れないかと、ふと思いつきました。
昔話
今では私も社内ではずいぶん年配の域に達し、新卒社員のお父さんと同じくらいの年になってしまいました。
コンピューターは、インターネットなどない時代に、半田付けして作った東芝のワンボードコンピューターEX-80から始めた世代です。
8bitから16bitや32bitに変わってきて、もうコンピューターを自分で半田付けすることはないだろうと考えるようになっていました。
ところが2010年くらいにネットなどでArduinoなどのガジェットの記事を目にするようになり、イタリア製の本物はちょっと高価なのであまり興味がわかなかったのですが、秋月でパーツを買ってクローンを作れば2000円程度でできることを知り、急に興味が出てきていろいろ調べ始めました。
ArduinoとはAtmelという会社のAVRというマイコンを使ったシステムで、ネットで調べればいろいろ情報があります。これを使えば電光掲示板を制御することも簡単にできそうだということがわかってきました。
EX-80はインテル8080(東芝のセカンドソース)の2MHzで、このCPUは3クロックくらいで1命令でしたが、AVRは20MHzで、1クロックで1命令ですので、同じ8bitといえ30倍近い処理能力になります。
なんともすごい時代になったものです。
協力者募集
社内にはHack Day Japanという自由にもの作りができるイベントがあり、考えを温めていた電光掲示板を作ってみることにしました。
その当時、Hack Day Japanは24時間(=8時間×3日間)で何らかの制作物を作ることが決まりで、一人で作り込むのは難しいと考え、協力者を探し始めました。
社内の情報検索システムを使いArduinoで検索したところ、何人かのページが引っかかり、Arduinoに詳しそうな稲津くんを見つけることができました。
稲津くんにYahoo!メッセンジャーで連絡して今回の電光掲示板作りについて説明したところ、まったく面識が無く仕事で関わったこともありませんでしたが、快く協力してもらえることになりました。
当時のリーダーやチームメイトの制作さんにも協力して、Hack Day Japan開催までの間、全員で何度か打ち合わせを行い当日までの準備を進めました。
準備
部品などは事前に手配しておく必要がありましたが、大きなLEDは案外高価で、いろいろ探しまわってみた結果、サトー電気の通販サイトに大きくて安めのものがあり注文しました。支払いは今時珍しい現金書留でとても懐かく感じました。LEDはHack Day Japanの前の週くらいに手配が完了しました。
開発
大まかに言いますと、定期的にシステムからデータを取得して電光掲示板に送り込み表示する機器を製作します。
当時私は開発部門ではなく、手元に開発環境がなかったのですが、サーバーのアカウントはあったのでサーバーにJDKをインストールし、ソースをコンパイルしてjarを作り、これを自分のパソコンに転送して動作させ、データを取得して電子掲示板に送ることにしました。
パソコンと電光掲示板の接続についてはUSBは通常のAVRではサポートされないため、音声によるFSK信号でのデータの送受信で対応することにしました。
EX-80などの昔のマイコンやパソコンは音楽用のカセットテープ(前世紀の遺物なので見たことのない人も多いかもしれませんね)にFSKでデータを記録して保存していたのを思い出しました。古い友人に不思議なところで再会した気分です。
私の担当はパソコン側のJavaソフトウエアの開発で、稲津くんにはAVRを使った電子掲示板を作ってもらうことになりました。
Hack Day Japanの1日目はデータを取得する仕組みを作ることにしました。この仕組みはHTTPSで認証を行った後にHTTPでパラメーターを付け必要なデータをダウンロードする流れです。 java.netなクラスで認証のパラメータを送信してみましたがうまくいかないことが分かり、Wiresharkでブラウザーの挙動を調べてみると、どうも二回セッションが張られていることがわかりました。
認証系で使われる、Set-Cookie-Redirectの仕組みが使われていてjava.netのクラスで処理するのは面倒な作業であることが1日目の終了間際に判明しました。
この作業により、ほとんど一日を無駄にしてしまいました。
2日目にApacheのHttpClientを使って認証の実装をしたところ昼過ぎにはCookieもいただくことができました。これを使って必要データのダウンロードのコードを書き始めました。
3日目はダウンロードコードを引き続き作り、次にJavaのサウンドを使ってFSKを送るコードを追加しました。JavaのFSKのコードは以前個人的に作ってあったSourceFogeにあるコードを利用しています。
昼まで時間を費やし、ようやく認証->ダウンロード->FSKのコードがつながり、電光掲示板との結合ができる状態になりました。ところがこれがうまくいきません・・・
いろいろと調整を行い、FSKの通信速度を1200ボーから300ボーくらいに落とすと2回に1回くらいはデータの受け渡しができるようになりました。
ただし不安定な状態が続き、数値の11バイトのデータとチェックサムを送信する実装したところで時間切れとなってしまいました。
当初はSwingでUIをつける予定が1日目が無駄になったためコマンドラインでのツールになってしまいました。
Hack Day Japan終了後にもいろいろ調整を行い、実際にしばらく利用していたので、席の近くを通りかかる人の目を引きつけていました。
こちらの記事のご感想を聞かせください。
- 学びがある
- わかりやすい
- 新しい視点
ご感想ありがとうございました