柏の葉 IoTハッカソンで技術賞を受賞しました!

1234

私の提案(おまけ)

プレゼン発表では、近接ICをICリーダーでタッチして、webページのリストを更新する、というのを実演しました。それっぽいデモではなくて、実際にLoRaWANデバイスからデータを送信して、きちんと処理を行なっています。

この時用意したWebページはデモ用に用意したもので、あと、使用した機器類に関しても少し書こうかなと思います。

デモに使用した機器

デモに使用した機器は、次の通りです。

  • LoRaWANデバイス
  • Arduino
  • ラズパイ
  • 近接ICカード
  • ICリーダー(RC S380)
ArduinoでS380が使用できない

ArduinoはUSBデバイスを認識できません。ArduinoのUSBポートは、「ArduinoをPC等に認識してもらうため」にあります。とりあえずすぐ手に入ったICリーダーがS380だったのですが、これがArduinoで認識できない。むむー。

S380はこんなのです。

ArduinoでUSB機器を認識するには、USBホストシールドなるものが必要だそう。

こんなのです。これがあれば直接ArduinoでS380を使えたのですが、私は持ってませんでした。なので、ラズパイを間に挟んでなんとかすることにしました。

pythonでIC番号を読み取り、Arduinoへ送信

ICリーダーでICカードの情報を読み取ったりするのは、調べてみるとpythonで「nfcpy」というライブラリを用いて行なっている人が多かったです。なので、それに習うことにしました。こんな感じで機器を使用しています。
デモの機器接続写真

デモの機器接続の図
デモの機器接続の図

まず、pythonでICカードにIC番号を書き込みます。厳密にはIC番号というより、ICカードにデータとして番号を書き込んでいます。

pythonでICカードの情報を読み取ります。この時、欲しい情報だけじゃなくて色々なものが表示されるので、欲しい情報であるIC番号のみを取り出します。

最後に、シリアルポートを開いて、USB経由でArduinoへIC番号を送信します。Arduino側では「Serial.readString()」というのを実行すると、string型で値を変数に格納できます。

Arduino側ではstring型で取得した値をchar型に変換して、一文字ずつループで16進数に変換し、LoRaWANデバイスで送信します。

送信したデータは、私の用意したサーバーにJSONとして届き、処理されます。

※動かしてみると、すごく情報反映が遅い…。調べてみると、シリアルポート経由でArduinoにデータを送ると、その度にArduinoが再起動するようです。さらに、「Serial.readString()」はタイムアウトまで1秒かかる模様。これらの理由で、合計5秒ほど処理が遅延していました。デモだからとりあえずこれで実装しましたが、実際の運用ではICリーダーはArduinoに直接繋げられるものを使用して、もっと早い動作を期待できます。

デモ用Webページ

デモ用のWebページは、とにかく簡単に、htmlファイルで大まかに作りました。スタイルシートもインラインで直書きです。大まかな図を見て下さい。

デモページの図
デモページの図

情報の更新はajaxで実装しました。3秒に1度、情報を更新します。外から大事な情報を盗み見られないように、ajaxで指定したphpファイルは「ただ他のphpをincludeしているだけ」のファイルで、実際に処理を行なうphpファイルはwebでアクセスできない、もっと上の階層に設置しました。

処理はほとんど「send_json.php」と同じです。最終的にJSONをMQTTではなくてajax用に出力しているのと、htmlファイルに最適な形にJSONの中身を多少書き換えているくらいです。

まとめ

データベース(mysql)がシステムの主役なので、あとで拡張機能をつけたくなったとき、mysqlにアクセスできる言語ならなんでもOKという自由度があります。また、車両情報、駐車場情報の登録はログイン式のWebサイトを用意し、そこからフォーム等で行なうことで簡単に運用できます。

また、時刻の比較は全部2038年問題が発生しないようなコードで書いています。ちょっとしたこだわりです。

自分なりに、問題解決に向けていい提案ができたのではないかと思います!

余談ですが、プレゼン発表前日の夜にPCの電源アダプターが断線しました。このままでは準備ができない!ということで急遽電源アダプターの断線箇所をハンダ付けすることに。運が悪い><

すごい長くなっちゃった!またねー!さき
集合写真

1234