はじめに
https://qiita.com/openwave-co-jp/items/ece578bb51d748f11f71
を参考にLG01-JPのLoRaWANゲートウェイとLoRa mini Dev-JPを使ったエンドデバイスでとりあえず"Hello, World!"を送ろうとしました。
ただやり方が悪いのか諸々環境が変わってきたのか、記事のとおりだと何故か上手く行かず・・・試行錯誤した忘備録です。
1, TTN(The Thing Network)の設定
基本的にはhttps://qiita.com/openwave-co-jp/items/ece578bb51d748f11f71、#1~#3のとおりで大丈夫でしたので割愛します。
2, ゲートウェイ(LG01-JP)の設定
初期ユーザー名/初期パスワードは root/dragino です
ちなみにWAN側に割り振られたIPアドレスへ、WANと同じサブネットからブラウザでアクセスしても(確認が取れるファームウェア4.3.4では)管理画面が開ける
2-1 ファームウェアアップデート
まずLG01-JPのファームウェアのバージョンを確認します。
バージョンは上部メニューのStatus→Overviewから確認できます。
バージョンが4.3.4より下の場合、ファームウェアをアップデートする必要があります。
メーカー(dragino社)からファームウェアをダウンロードします。
http://www.dragino.com/downloads/index.php?dir=motherboards/ms14/Firmware/IoT/IoT--build-v4.3.4-20180507-1426/
LG01-JPのSystem→Backup/Flash Firmwareからアップデートを行えます。
2-2 Arduino Sketchの書き込み
LG01-JP(どうやらArduino Yunベースらしい)へ、LoRaモデムで受信したデータをそのままIP経由で転送するためのArduinoスケッチを書き込みます。
冒頭の記事より新しいスケッチが発売元より公開されているようなので、こちらを利用します。
http://www.dragino.com/downloads/index.php?dir=motherboards/lg01/sketch/から「Single_pkt_fwd_v004.ino.hex」をダウンロードします。
これを上部メニューのSensor→Flash MCUの画面でLG01-JPへ書き込みます。
2-3 IoT Serverの設定
Sensor→IoT Serverの画面から「IoT Server」にプルダウンメニューのなかから「LoRaWAN」を選択します。
選択したら「Apply & Setting」を押して設定を反映させます。
このへんどういう設定なのかいまいちよくわからないのですが、察するにLG01にはLoRa WANゲートウェイ以外にもいろんな機能があるのだろうと思います。
2-4 LoRa Gatewayの設定
上部メニューのSensor→LoRa / LoRa WAN から設定します。
この辺から冒頭の記事と違いが大きくなってきます。
LG01からTTNへの接続設定
まずLoRaWAN Serverの設定です。この部分ではLG01-JPとTTNとの接続の設定を行うようです。
以下のように設定しました
- Server Address: router.as1.thethings.network
- Server Port: 1700
- Gataway ID: TTNで設定したGataway EUI
- Mail Address: 実在する任意のメールアドレス(で大丈夫なはずです)
ゲートウェイの地理情報は空白でも大丈夫でした。
ゲートウェイ(LG01-JP)なんですが、設定入れてから実際につながるまで、コンソール上のステータスが"connected"に変わるまで結構時間かかるようです・・・
ちなみに、TTNのコンソール上では冒頭の記事と同じく選択するRouter"ttn-router-asia-se"を選択したのですが、この画面でServer Addressには"router.as1.thethings.network"を設定しました。元の記事通りでもつながる気はします。
LG01-JPが取り扱うLoRaの電波の設定
Radio Settingsの項目で、ゲートウェイが発信するLoRaの周波数等電波の設定を変えられるようです。
以下のように設定します
- TX Frequency: 923200000
- RX Frequency: 923200000
- Encryption Key: 空白
- Spreding Factor: SF7
- Transmit Spreding Factor: SF9
- Coding Rate: 4/5
- Signal Bandwidth: 125kHz
- Preamble Length: 8
設定し終えたら「Save & Apply」ボタンを押して設定を保存・反映させます。
Spreding Factorが冒頭の記事と異なるのは、エンドデバイスで冒頭の記事とは異なる設定を用いるためです。
これでLG01-JPの設定は終わり(のはず)です。
3, エンドデバイス(Dragino mini Dev-JP)の設定
Arduino Unoベースで、SPIバスを介してでLoRaモデムと接続されているようです。
UART-USB変換モジュールにCH340というものを使用しているので、もしPCから認識しないようならCH340のドライバをインストールしてください。
3-1 サンプルコードの用意とネットワークキーなどの編集
Dragino社がgithub上で公開しているサンプルコードをダウンロードしてください。
そして、36行目~50行目をTTNのコンソール上で表示されているものに変更します。
Applications→任意のアプリケーション名→Devices→任意のデバイス名 の部分で確認します。
// LoRaWAN NwkSKey, network session key
// This is the default Semtech key, which is used by the prototype TTN
// network initially.
//ttn
static const PROGMEM u1_t NWKSKEY[16] = { 0xB3, 0xC2, 0x99, 0x8A, 0x2B, 0x04, 0x83, 0x5A, 0x34, 0xF6, 0xF1, 0x2E, 0x5A, 0x5F, 0xF8, 0x17 };
// LoRaWAN AppSKey, application session key
// This is the default Semtech key, which is used by the prototype TTN
// network initially.
//ttn
static const u1_t PROGMEM APPSKEY[16] = { 0xE6, 0xA3, 0xC2, 0x13, 0x08, 0xFF, 0x89, 0xA0, 0x5B, 0x41, 0x39, 0x83, 0xC7, 0xFD, 0xB6, 0xAA };
//
// LoRaWAN end-device address (DevAddr)
// See http://thethingsnetwork.org/wiki/AddressSpace
// ttn
static const u4_t DEVADDR = 0x26011880;
- NWKSKEY: TTNコンソール上のNetwork Session Key
- APPKEY: TTNコンソール上のApp Session Key
- DEVADDR: TTNコンソール上のDevice Address
このコードがきちんと動作すると60行目のこの部分(ちなみにa(のASCIIコード) = 0x61)がTTNへ定期的に送信されるはずです。
static uint8_t mydata[] = "abcdefg";
3-2 Arduino-lmic ライブラリのインストールと設定
上記のまま実行してもlmic.hがないと言われてコンパイルエラーが出るので、Android-lmicライブラリをインストールします。
github上でいろいろフォークされてて何が何やらわからりにくいですが、今回は以下のものを使用しました。
https://github.com/mcci-catena/arduino-lmic
日本の周波数設定がもともと用意されてる・・・ありがたや・・・・
デフォルトだとおそらくアメリカの周波数で動き出すので、日本の周波数を使用するように設定を変更します。project_settings/lmic_project_config.h
を編集することでこの設定を変えられるようです。
Arduino IDEのメニューの「スケッチ」→「ライブラリをインクルード」→「.ZIP形式のライブラリをインストール」からインストールした場合、ライブラリはC:\Users\ユーザー名\Documents\Arduino\libraries\
にインストールされます。
この中の\arduino-lmic-master\project_config
にあるlmic_project_config.h
を編集し以下のようにします。
// project-specific definitions
//#define CFG_eu868 1
//#define CFG_us915 1
//#define CFG_au921 1
# define CFG_as923 1
# define LMIC_COUNTRY_CODE LMIC_COUNTRY_CODE_JP /* for as923-JP */
//#define CFG_in866 1
# define CFG_sx1276_radio 1
//#define LMIC_USE_INTERRUPTS
3行目'''#define CFG_us915 1'''をコメントアウトし、5行目と6行目のコメントアウトを解除します。
これで設定は完了・・・のはずです。
4 動作確認とシングルチャンネルゲートウェイ
最後にコンソール画面上からデータがアップリンクしてくるのを確認します。
データ来てるの確認できたしこれで終わりヽ(=´▽`=)ノ・・・と思いきや2回に1回はデータを受信できていません。
これは多分設定で回避できるんでしょうが、デフォルトの設定だとこうなる理由として、LG01がsingle channel gateway にしかできないからというのがあるようです。
フル機能のLoRaWAN Gatawayは8チャンネルとか同時にLoRaを待ち受けできるようですが、LG01は同時に1チャンネルしか搭載しているハードウェアの制約上待ち受けできないそうです。
今回利用したArduino-lmicライブラリは(何故か2チャンネルだけしか使ってないですが)923.2MHzと923.4MHzで交互にデータを送信するようになっています。8チャンネルのLoRaWAN Gatawayならばどちらもきちんと受信できます。しかし、シングルチャンネルゲートウェイであるLG01は、今回2-4で923.2MHzを利用するよう設定したので、923.2MHzで送信されたデータのみしか受信できないため、このような形になってしまうと推測されます。
詳しくはhttp://wiki.dragino.com/index.php?title=LoRa_Questions#What_is_the_difference_between_LG01_single_channel_gateway_and_a_8-channel_LoRaWAN_gateway.3F
最後までお付き合いいただき、ありがとうございました。
参考にしたサイト
- https://qiita.com/openwave-co-jp/items/ece578bb51d748f11f71
- http://wiki.dragino.com/index.php?title=Connect_to_TTN#Create_Single_Channel_Gateway_By_LG01
- http://wiki.dragino.com/index.php?title=Connect_to_TTN#Use_LoRa_Shield_and_Arduino_as_LoRa_End_Device
- http://wiki.dragino.com/index.php?title=LoRa_Questions#What_is_the_difference_between_LG01_single_channel_gateway_and_a_8-channel_LoRaWAN_gateway.3F