Raspberry Pi 3 Model B に LoRa/GPS HATを取り付けてThe Things Networkに接続

Takaki Hanada

The Things Network User

Posted on 16-05-2019

はじめに

Raspberry Pi初心者がRaspberry Pi 3 Model B に LoRa/GPS HATを取り付けてThe Things Networkに接続したときのメモです。
後日画像などつけて備忘録としたいと思います。

前提

Raspberry Pi 3 Model B
LoRa/GPS HAT
https://jp.rs-online.com/web/p/products/1875121

センサーはLoRa Mini Devを利用中で、設定済で温度と湿度のデータを送信中です。
LoRa Mini Dev
https://jp.rs-online.com/web/p/radio-frequency-development-kits/1883151/
RspberryPi 3B
https://jp.rs-online.com/web/p/processor-microcontroller-development-kits/1254093

センサー設定手順については他のサイトをご参照ください。

手順

  1. 接続する: Raspberry Piを使うための準備
  2. Dual Channel Packet Forwarderをダウンロードする: TTNに接続するためのコードの準備
  3. Dual Channel Packet Forwarderの内容を書き換える: TTNに接続するためのコードを日本向けに修正する
  4. コンパイルする: 修正したコードを使えるようにする
  5. The ThingsNetworkにゲートウェイを登録する。
  6. データの受信を確認する

1. 接続する

1-1. Raspberry Pi 3 Model B と LoRa/GPS HAT を接続します。

私も含め電子工作をされていない方は戸惑うかもしれないので写真を載せておきます。
付属の金色の足を4つをRaspberry Piにネジで止めたあとLoRa/GPS HATのピンに注意しながら差し込みます。
写真では写っていませんが最後にナットで固定します。

1-2. パッケージのアップデートをします

HDMIでディスプレイに接続して、USBキーボートとUSBマウスを繋いだらMicroUSBにケーブルを差し込んで起動します。
起動したら
$ sudo apt-get update
$ sudo apt-get dist-upgrade
ちょっと時間がかかります。

1-3. SPIを有効にします

画面左上のラズベリーパイのアイコンをクリック-設定-Raspberry Piの設定をクリック
インターフェイスタブをクリック
SPI: を有効クリック
OKをクリック

2. Dual Channel Packet Forwarderをダウンロードする

githubからdual_chan_pkt_fwdをダウンロードします。
https://github.com/bokse001/dual_chan_pkt_fwd
(githubを表示したら、Clone or downloadをクリックしてDownload ZIPを選択します)
ダウンロードフォルダにダウンロードしましょう。

dual_chan_pkt_fwd-master.zip を解凍すると
dual_chan_pkt_fwd-master フォルダができます。
フォルダ名を
dual_chan_pkt_fwd
に変更して、/home/pi に移動します。

ここまででディレクトリは以下のようになっています。
/home/pi/dual_chan_pkt_fwd
(注意)この構成になっていないと3. コンパイルするでエラーが起きます。

3. Dual Channel Packet Forwarderの内容を日本向けに書き換える

dual_chan_pkt_fwd フォルダの中で変更するファイルは2つです。
1. dual_chan_pkt_fwd.cpp
1. global_conf.json

3−1. dual_chan_pkt_fwd.cpp の修正(2箇所修正)

エディタでdual_chan_pkt_fwd.cppを開きます。

(修正箇所1つ目)
以下を探します

// Set spreading factor (SF7 - SF12), &nd  center frequency
// Overwritten by the ones set in global_conf.json
SpreadingFactor_t sf = SF7;
uint16_t bw = 125;
uint32_t freq = 868100000; // in Mhz! (868.1)
uint32_t freq_2 = 868300000; // in Mhz! (868.3)

その下に以下をコピーしてください

// Tx Power Register
#define REG_PA_CFG 0x09
// Power Setting for Japan ARIB STD-T108
// 20mW=13dBm
// SX1276 RegPaConfig(0x09), Val=0x3f
// bit 7 PaSelect = 0 select RFO
// bit 6-4 MaxPower = 3 Pmax=10.8+0.6*3=12.6 < 13
// bit 3-0 OutputPower = 0x0f Pout=Pmax-(15-0x0f)=12.6
// SX1272 RegPaConfig(0x09), Val=0x0e
// bit 7 PaSelect = 0 select RFO
// bit 6-4 unused = 0
// bit 3-0 OutputPower = 0xe Pout=-1 + OutputPower = -1 + 0x0e = 13dBm
int PWR_JPN_1276 = 0x3f;
int PWR_JPN_1272 = 0xe;

(修正箇所2つ目)
以下を探します

  if (sx1272) {
    if (sf == SF11 || sf == SF12) {
      WriteRegister(REG_MODEM_CONFIG, 0x0B, CE);
    } else {
      WriteRegister(REG_MODEM_CONFIG, 0x0A, CE);
    }
    WriteRegister(REG_MODEM_CONFIG2, (sf << 4) | 0x04, CE);
  } else {
    if (sf == SF11 || sf == SF12) {
      WriteRegister(REG_MODEM_CONFIG3, 0x0C, CE);
    } else {
      WriteRegister(REG_MODEM_CONFIG3, 0x04, CE);
    }
    WriteRegister(REG_MODEM_CONFIG, 0x72, CE);
    WriteRegister(REG_MODEM_CONFIG2, (sf << 4) | 0x04, CE);
  }

その下に以下をコピーしてください

  // Set Tx Power for Japan
  if (sx1272) {
    WriteRegister(REG_PA_CFG,PWR_JPN_1272, CE);
  } else {
  // sx1276
    WriteRegister(REG_PA_CFG,PWR_JPN_1276, CE);
  }
  if (sf == SF10 || sf == SF11 || sf == SF12) {
    WriteRegister(REG_SYMB_TIMEOUT_LSB, 0x05, CE);
  } else {
    WriteRegister(REG_SYMB_TIMEOUT_LSB, 0x08, CE);
  }

ファイルを保存してエディタを終了します

3−2. global_conf.json

"SX127x_conf":を探します。
そのブロックを以下のように書き換えます。

{
  "SX127x_conf":
  {
    "freq": 923400000,
    "freq_2": 923200000,
    "spread_factor": 10,
    "pin_nss": 6,
    "pin_dio0": 7,
    "pin_nss_2": 6,
    "pin_dio0_2": 7,
    "pin_rst": 3,
    "pin_led1":4,
    "pin_NetworkLED": 22,
    "pin_InternetLED": 23,
    "pin_ActivityLED_0": 21,
    "pin_ActivityLED_1": 29
  },

"gateway_conf":を探します。
そのブロックを自身の情報に書き換えます。

  "gateway_conf":
  {
    "ref_latitude": 35.65871489,
    "ref_longitude": 138.56962123,
    "ref_altitude": 10,

    "name": "Takaki Hanada",
    "email": "takaki@hanada.org",
    "desc": "Dual channel pkt forwarder",

    "interface": "wlan0",

    "servers":
    [
      {
        "address": "asia-se.thethings.network",
        "port": 1700,
        "enabled": true
      },
      {
        "address": "router.eu.thethings.network",
        "port": 1700,
        "enabled": false
      }
    ]
  }
}

最後のwlan0はRaspberryPiがインターネットにどのように接続しているかによって変わります。
イーサーネットケーブルの場合
"interface": "eth0",
になります。

ファイルを保存してエディタを終了します

4. コンパイルする

/home/pi/dual_chan_pkt_fwd で
$ sudo make install
成功するとゲートウェイが起動します。
私がハマったのは作業を/home/pi/Download/で作業していたために、dual_chan_pkt_fwd.serviceでエラーが起こりました。

5. The ThingsNetworkにゲートウェイを登録する。

TTNのコンソールを開きます。
https://console.thethingsnetwork.org/

ゲートウェイ一覧を開きます。
https://console.thethingsnetwork.org/gateways

ゲートウェイを登録をクリックします。
https://console.thethingsnetwork.org/gateways/register

ゲートウェイIDにはその下にある I'm using the legacy packet forwarder にチェックをして
Rapsberry Piの Mac アドレスを入力します。
Mac アドレスは コンソール(LXTerminal)で
$ ifconfig -a
で確認できます。
なお登録時はMACアドレスの3バイト目と4バイト目の間にffffを挟んでください。
11:22:33:44:55:66に対して11:22:33:ff:ff:55:66のようになります。

記述は今設定しているRapsberry Piがどのようなものか自分でわかるようにするためのメモです。

周波数計画
Asia 920-923MHz

Router
ttn-router-jp

場所
緯度(lat)と経度(lng)を入力します。
地図上で正確な位置を確認してください。
またglobal_conf.jsonのgateway_confセクションに記載した内容とあっているかも確認してください。

アンテナ
インドアを選択します。

上記設定まで済ませたらゲートウエイ登録をクリックします。

6. データの受信を確認する

ゲートウエイ一覧に登録したゲートウエイが表示されています。
https://console.thethingsnetwork.org/gateways

ゲートウェイが接続済になっていたら成功です。

そのゲートウェイをクリックします。
右上のトラフィックをクリックしてにセンサーからの情報が表示されていたら設定終了です。

雑感

作業はThe Things Network―「LoRaWAN」をみんなでシェアして使う (I・O BOOKS)
https://www.amazon.co.jp/dp/4777520439/
があると捗ると思います。
特に私のような初心者は時間を無駄にしないためにも手元に1冊あると役立つはずです。

個人的には多機能なLG01-P-JPをThe Things Networkに接続するよりも、今回の構成でThe Things Networkに接続するほうが簡単に感じました。

参考にさせていただいたページ
https://www.thethingsnetwork.jp/forum/t/topic/278
http://joomlaweb.blog117.fc2.com/blog-entry-1190.html
本当にありがとうございました。

また山梨大学の豊木先生が実際にセットアップした経験を追記しました。
豊木先生ご指摘ありがとうございました。