LoRaWAN対応無線モジュールのRhino WANを動かしてみた

## 経緯
[Rhino WANモジュール](https://www.switch-science.com/catalog/6748/)がスイッチサイエンスさんから発売されたので、早速、購入し、自宅で動かしているTTN(The Things Nwtwork)に繋いでみた。

##Arduinoセットアップ

[サポートページ](https://www.cyrola.co.jp/product-9.html)にある手順で、行えばセットアップは完了する。


*Arduino IDEの[ファイル]-[環境設定]-[追加のボードマネージャのURL]に以下のURLを登録します。
https://www.cyrola.co.jp/archive/package_cyrola_rhino_index.json
*[ツール]-[ボード]-[ボードマネージャ...]から、"STM32L0 Boards by Cyrola Inc"パッケージをインストールします。

#EUIの取得
買ってきて、スケッチを何も書いていなければ、EUIの値がシリアルに出力されるので、控えておく

#TTN（OOTA）接続のサンプル動かしてみる

Arduinoのメニューから、「スケッチ例」→Rhino-WAN-LO82CZ用のスケッチ例の「LoRaWAN」→「LoRaWAN_TTN_OOTA」を選択すると、サンプルスケッチが表示されます。


```c:LoRaWAN_TTN_OOTA.ino
/* Simple OTAA join for TheThingNetwork LoRaWAN network
 *
 *  Uncomment one of the region defined below to select the
 *  proper radio setup.
 *    
 *  EU868/IN865 have duty cycle restrictions. For debugging it makes sense
 *  to disable those via setDutyCycle(false);
 *    
 *  For an external antenna one should set the proper antenna gain
 *  (default is 2.0) via setAntennaGain().
 *    
 *  Please edit the keys below as they are just debugging samples.
 *    
 *    
 * This example code is in the public domain.
 */

#include "LoRaWAN.h"

// #define REGION_AS923_920_923 /* Japan, Malaysia, Singapore */
// #define REGION_AS923_923_925 /* Brunei, Cambodia, Hong Kong, Indonesia, Laos, Taiwan, Thailand, Vietnam */
// #define REGION_AU915
// #define REGION_EU868
// #define REGION_IN865
// #define REGION_KR920
// #define REGION_US915

const char *appEui  = "0101010101010101";
const char *appKey  = "2B7E151628AED2A6ABF7158809CF4F3C";
const char *devEui  = "0101010101010101";

void setup( void )
{
    Serial.begin(9600);
    
    while (!Serial) { }

#if defined(REGION_AS923_920_923)
    LoRaWAN.begin(AS923);
#endif

#if defined(REGION_AS923_923_925)
    LoRaWAN.begin(AS923);
#endif

#if defined(REGION_AU915)
    LoRaWAN.begin(AU915);
    LoRaWAN.setSubBand(2);
#endif

#if defined(REGION_EU868)
    LoRaWAN.begin(EU868);
    LoRaWAN.addChannel(1, 868300000, 0, 6);
#endif

#if defined(REGION_IN865)
    LoRaWAN.begin(IN865);
#endif

#if defined(REGION_KR920)
    LoRaWAN.begin(KR920);
#endif

#if defined(REGION_US915)
    LoRaWAN.begin(US915);
    LoRaWAN.setSubBand(2);
#endif

    // LoRaWAN.setDutyCycle(false);
    // LoRaWAN.setAntennaGain(2.0);
    LoRaWAN.joinOTAA(appEui, appKey, devEui);

    Serial.println("JOIN( )");
}

void loop( void )
{
    if (LoRaWAN.joined() && !LoRaWAN.busy())
    {
        Serial.print("TRANSMIT( ");
        Serial.print("TimeOnAir: ");
        Serial.print(LoRaWAN.getTimeOnAir());
        Serial.print(", NextTxTime: ");
        Serial.print(LoRaWAN.getNextTxTime());
        Serial.print(", MaxPayloadSize: ");
        Serial.print(LoRaWAN.getMaxPayloadSize());
        Serial.print(", DR: ");
        Serial.print(LoRaWAN.getDataRate());
        Serial.print(", TxPower: ");
        Serial.print(LoRaWAN.getTxPower(), 1);
        Serial.print("dbm, UpLinkCounter: ");
        Serial.print(LoRaWAN.getUpLinkCounter());
        Serial.print(", DownLinkCounter: ");
        Serial.print(LoRaWAN.getDownLinkCounter());
        Serial.println(" )");

        LoRaWAN.beginPacket();
        LoRaWAN.write(0xef);
        LoRaWAN.write(0xbe);
        LoRaWAN.write(0xad);
        LoRaWAN.write(0xde);
        LoRaWAN.endPacket();
    }

    delay(10000);
}
```

以下の３行を自分のパラメータに変えて

```
const char *appEui  = "0101010101010101";
const char *appKey  = "2B7E151628AED2A6ABF7158809CF4F3C";
const char *devEui  = "0101010101010101";
```

さあ、書込だあと思ったら！
エラーが！

```
fork/exec /Users/kazuyuki/Library/Arduino15/packages/cyrola/hardware/stm32l0/0.0.1/tools/macosx/dfu-suffix: permission denied
ボードRhino-WAN-L082CZに対するコンパイル時にエラーが発生しました。
```

で、とりあえず、該当のパーミッションを見てみると

```
kazuyuki@MBP-16-2019 macosx % ls -al
total 408
drwxr-xr-x  7 kazuyuki  staff     224 11  7 16:09 .
drwxr-xr-x  6 kazuyuki  staff     192 11  7 16:09 ..
-rw-r--r--  1 kazuyuki  staff   23244 11  7 16:09 dfu-prefix
-rw-r--r--  1 kazuyuki  staff   23244 11  7 16:09 dfu-suffix
-rw-r--r--  1 kazuyuki  staff  154524 11  7 16:09 dfu-util
drwxr-xr-x  3 kazuyuki  staff      96 11  7 16:09 openocd
-rw-r--r--  1 kazuyuki  staff     390 11  7 16:09 stm32l0-upload
kazuyuki@MBP-16-2019 macosx % 
```

おーい、dfu-あんちゃらと、stmあんちゃらに、実行パーミッションがないぞということで、
chmodで実行パーミッションを付加

```
kazuyuki@MBP-16-2019 macosx % chmod 755 dfu-prefix 
kazuyuki@MBP-16-2019 macosx % chmod 755 dfu-suffix 
kazuyuki@MBP-16-2019 macosx % chmod 755 dfu-util 
kazuyuki@MBP-16-2019 macosx % chmod 755 stm32l0-upload
kazuyuki@MBP-16-2019 macosx % ls -al                   
total 408
drwxr-xr-x  7 kazuyuki  staff     224 11  7 16:09 .
drwxr-xr-x  6 kazuyuki  staff     192 11  7 16:09 ..
-rwxr-xr-x  1 kazuyuki  staff   23244 11  7 16:09 dfu-prefix
-rwxr-xr-x  1 kazuyuki  staff   23244 11  7 16:09 dfu-suffix
-rwxr-xr-x  1 kazuyuki  staff  154524 11  7 16:09 dfu-util
drwxr-xr-x  3 kazuyuki  staff      96 11  7 16:09 openocd
-rwxr-xr-x  1 kazuyuki  staff     390 11  7 16:09 stm32l0-upload
kazuyuki@MBP-16-2019 macosx % 
```

で、ビルドでき、実際にデータをTTN　Consoleで確認することができました！

![スクリーンショット 2020-11-13 15.52.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33220/35b854e8-267a-5236-18fe-24ef586aab44.png)

ちゃんちゃん！

ビルドできないとお悩みの方に役立つといいなあ〜！