United Statesからアクセスのようです。言語設定をEnglishに切り替えますか?
Switch to English site
Skip to main content

Raspberry Piを使ってLoRaWANゲートウェイを製作する

title

Things Network カルダデール 実現のため、Raspberry Pi 2とiC880A でゲートウェイ第1号を作る

昨年、フリーでオープンなLoRaWANによるIoTアプリケーション向けデータネットワーク、The Things Network(TTN)について書いた。そして、カルダデールにおいて、我々の喫緊の課題であるクラウドソースの洪水センサネットワークにこのデータネットワークを利用するためコミュニティをスタートさせた。

この記事では、前回の続きとして、DIYゲートウェイ(アクセスポイントやベースステーションとしても知られる)を製作する際に使ったハードウェアを詳しく見ていくほか、ソフトウェアや構成、初期テストについても触れる。

より安く簡単なDIYのソリューションやすぐに使えるLoRaWANのゲートウェイがいくつか存在するが、ここでご紹介するアプローチは、コスト、柔軟性、そして性能のバランスがとれており、それだけでなくLoRaWANがどのように動作するかについて知ることもできるものだ。

ハードウェア

title

フロントエンドには、IMST iC880A LoRaWAN コンセントレータボードを利用する。ボードには2つのSemtech SX1257トランシーバICとSX1301ベースバンドプロセッサが搭載されている。この組み合わせにより49のLoRa復調器をエミュレートすることができ、10の並列復調経路を持つため、異なるチャンネルの異なる拡散率で送られた最大8つのLoRaパケットを同時に受信することができる。

こう書くと複雑に聞こえるかもしれないが、このLoRAの復調フォーマットのおかげで、1つのゲートウェイに対して何千ものノードがサポートされているにも関わらず、信じられない広範囲のカバーを驚くべき少ない電力で実現できている。状況によっては無線とMACレイヤーの構成が必要になる可能性があるが、実際には、あまり細かな点を気にする必要はない。

Raspberry Pi2のモデルB上でゲートウェイソフトウェアを動作させ、シンプルな汎用基板でブレークアウト/ベースボードを製作し、SPIを通してコンセントレータと接続した。iC880Aの接続の詳細については、付属のドキュメントに記載されている。なお、SPI接続に加えて、モジュールをリセットするためにRaspberry Piの通常のGPIOピンが必要になる。

ボードは、RF遮蔽のためアルミニウムダイキャストケースに収めた。ケースには、電源ソケットやスイッチ、LED、Ethernetのためにドリルなどで穴をあけた。

ソフトウェア

title

最新のRaspbian Jessie Liteイメージをダウンロードし、マイクロSDカードに書き出した。Raspberry Piをブートし、次のようにコマンドを適用した。

$ sudo apt-get update
$ sudo apt-get upgrade

また次のコマンドを適用。

$ sudo apt-get install git wiringpi

今回、Gitはソフトウェアソースをクローンするために、WiringPiはコンセントレータボードをリセットするためのGPIOをトグルするために必要だ。

続いて、/etc/hostnameと/etc/hosts内のそれに対応する部分を編集し、ホストネームを変更した。

Raspberry Piコンフィグレーションツールを次のように起動。

$ sudo raspi-config

SPIバスによる通信を有効にするため、Advanced Options (9)に続きSPI (A6)を選択し、SPIをイネーブル、ブート時にカーネルモジュールをロードする、を選択した。

16GBのマイクロSDマイクロSDカード使っていたため、すべての容量を扱えるようraspi-configでルートファイルシステムの拡張も設定し、最後にリブートした。

IMSTの資料によると、SemtechのリファレンスソースをもとにLoRaWANソフトウェアを作ると紹介されている。しかし、それらにアップデートを加えた派生ソースがThe Things NetworkのGitHubで開発されている。

The Things Network Zurichは、さらに進んで自動インストーラーまで提供している。ただ、このうちいくつかのステップ、たとえばRaspberry Piを一般的な名前(ttn-gateway)に変更してしまう、WiringPiをRaspbianのリポジトリにあるパッケージを単に使うのではなくビルドするといった不都合な点がある。

そこで、変わりに 手動インストールを楽するためinstall.shスクリプトを使用した。これは次のように動作する。

  1. 自動インストーラのSPIブランチに行く (git clone、 git checkout...)

  2. LoRaゲートウェイアプリケーションをクローン、ビルドする

  3. パケットフォワーダアプリケーションをクローン、ビルドする

  4. binディレクトリとpoly_pkt_fwdのシンボリックリンクを作成し、global_conf.jsonファイルにコピー
  5. local_conf.jsonを削除するかゲートウェイIDをリセットする

  6. start.shをbinディレクトリにコピー、サービスとしてパケットフォワーダを設定する

ゲートウェイアプリケーションを構築する際に注意すること:

  • PLATFORMをimst_rpiにセット(install.shの対応するsedコマンドの行を参照)するため、libloragw/library.cfgファイルをアップデートしなければならない

  • libloragw/library.cfgに適切な変数をセットすることでデバッグをすることが可能

SPI、デバイスレジスタ、HALなどのデバッグをできることは、構成したがアプリケーションがうまく起動しない場合、非常に有用だ。

もし、提供されたサービスディスクリプションファイル(ブート時にアプリケーションをスタートさせる)を使いたいときは、ソフトウェアとconfigが /opt/ttn-gateway下の所望する場所へ移動されるか確認する必要がある。うまく移動されない場合は、適切に編集する必要がある。

いつかインストーラリポジトリをクローンして、スクリプトを少し自分好みに修正するかもしれない。もっと良いのは、binディレクトリの実行ファイルではなく、/etc/ttn/といった適した場所にあるconfigでDebianのリポジトリやapt-getによりゲートウェイとパケットフォワーダアプリケーションを適切にパッケージ、インストールできるようにすることではあるのだが。

現状では、送信テストのユーティリティを実行でき、これによりSPIとソフトウェアの動作も確認できた。

title

スペクトルアナライザの小さなアンテナはポートにつながっており、直接はつながっていなかったため、レベル測定については無視してほしい。また、このときは十分な電流を供給できない電源でゲートウェイを動作させており、送出バーストの様子がコンセントレータに十分な電力が供給されているときとは少し違うかもしれない。

コンフィギュレーション

title

lora_gatewayとpacket_forwarderという2つのビルドされたソフトウェアはどのように動作するのだろう?

lora_gatewayは主にlibloragw.aというライブラリであり、ゲートウェイを構築する基礎となるものであり、特定のハードウェアプラットフォームやデバッグのオプションなどソフトウェアの動作するコンピュータのインターフェースはlibrary.cfgによって設定される。ヘルパープログラムは受信パケットをログしたり、SPIと送信のテストを実行したりするために利用されます。

packet_forwarderは、ライブラリ(ドライバやHALとも知られる)の最上部で、IP/UDPリンクを通してホストへ無線で受信したパケットをフォワードするためのインターフェースである。さらにアップリンクの動作では、ゲートウェイはサーバによって生成された、たとえば時間同期などの情報の、ノードへダウンリンクのパケットを送出することができる。現状、通常のダウンリンクのデータサービスはまだサポートされていない。

記事を書いている時点では、4つのパケットフォワーダのアプリケーションがある。

  • basic その名の通り、UDPを使ってホストへ受信パケットをフォワードする

  • gps 絶対的な時間同期とゲートウェイの位置を取得するためのGPSサポート

  • beacon GPSと同様だが、ノードの同期のためビーコンパケットの送出をサポートを追加

  • poly ビーコンと同様だが、複数サーバとその他の機能のサポートを追加

poly_pkt_forwardアプリケーションは、仮にいくつかの高度な機能を必要としないい場合でも安定性を向上すると報告されているので、利用が好ましい。

パケットフォワーダアプリケーションは、一般的なglobal_conf.jsonファイルで設定され、トランシーバ、無線チャンネル、MAC、ネットワークキーなどの大半の設定が含まれる。サイトコンフィギュレーションは、local_conf.json(上の写真)によって行われ、デフォルトの設定に追加の設定をオーバーライドできる。主なものとして、

  • ゲートウェイID FFEというプリフィックスとRaspberry Piのイーサネットインタフェースのマックアドレスから作られる。

  • 連絡先e-mailとゲートウェイの説明

  • GPS座標と標高。現在、レシーバモジュールとしてfake_gpsを有効することには対応していない。

  • サーバのアドレスとポート。The Things Networkによって運用されているサーバ。

最後の設定については、あなたのサーバを設定することも同様に可能だ。

コンフィギュレーションが完了したら、次のように手動でパケットフォワーダを起動できる。

$ ./poly_pkt_fwd

title

パケットフォワーダがきちんと動作することを確認できたので、Raspberry Piをシャットダウンした。

設置場所への取り付け

title

アルミニウムダイキャストのケースに入れたゲートウェイを、ウォールマウントのさらに大きな鉄製のIP規格に対応したケースの中に収めた。将来、スペクトルをモニタリングするための広帯域SDRレシーバを収めるためにスペースに余裕がある。DINレールはキャビネット下部に取り付けた。

title

現在、別の電圧レールが後で必要になった時のために追加のスペースを残し、商用電源と容量に余裕を持たせた5V PSUが設置されている。

title

アンテナの手前にキャビネットの最上部にサージ避雷器を取り付け、アースに太い10mm2のケーブルで繋いだ。

title

ケース内側には、図のように868MHzとGPSのアンテナ用の2つの細い同軸ケーブルが取り付けられている。その左側は25-3,0000MHzアンテナ用のNタイプのフィードスルーである。その左にあるスペアは、将来的に同軸中継器を通して別の機器を利用できるように工房に引き込まれたアンテナを取り付けることができるようにしてある。

テスト

title

設置したゲートウェイを使ってテストを行った。この時点で我々が用意できたLoRaWANのノードは、Flood Network(洪水監視ネットワーク)の新しいセンサのプロトタイプだけであった。この端末を利用してThe Things Network APIでこれを探したところ、幸運にも動作した!

title

次にやることは? 現在計画していることは、

  • Flood Network(洪水監視ネットワーク)と協力して、いくつかのセンサをオンラインにする

  • 1つ目のゲートウェイの到達範囲を調べる

  • 地域のハッカースペースBridge Rectifierとともに、2つ目のゲートウェイをオンラインにする

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.