Monarch DevKit UnaMKRをArduinoモードで使う

>先に[こちら(Monarch対応開発キット - UnaMKR -)](https://qiita.com/ghibi/items/e6c9656ccc1614e4624d)をお読みください。
また1年間無償回線の契約方法がわからない場合は、[こちら(Sigfox Devkit（開発キット）を1年間の無償回線で利用する)](https://qiita.com/ghibi/items/5893923b44f1757294e9)を見てください。

ここでは、UnaBiz社のMonarch対応開発キットUnaMKRの動作モードのひとつである**Arduinoモード**の使い方を説明します。
UnaMKRは、Arduino MKRZEROとピン互換があり、MKRZEROからの電源供給、13/14ピンのUARTで内部通信モジュールの制御を行っています。

#ファームウェアの更新（必要に応じ）
UnaMKRの工場出荷時は、Arduinoモードになっていますが、[Embedモード](https://qiita.com/ghibi/items/902bd12c2519caa535f7)に切り替えて使っていた場合は、Arduinoモードに変更するためのファームウェア更新が必要です。
ファームウェアをArduinoモード（ないしModemモード）に切り替える方法を説明します。

1. ST社の[BlueNRG Flasher utilityをダウンロード](https://www.st.com/content/st_com/en/products/embedded-software/wireless-connectivity-software/stsw-bnrgflasher.html#overview)、インストールします。
2. UnaMKRの電源を切ります。（全てのUSBケーブル、電源ケーブルが外されていることを確認します）
3. UnaMKRがArduino MKRZEROに接続されていないことを確認します。
4. 各ジャンパ(Jumpers)を下記の通り切り替えます。このJ11は電源取得の変更(USB or Arduino PIN）、J6,J7はUARTのTX/RXの変更(USB or Arduino PIN)、J10はファームウェアの書き込み許可を与えるものです
　　- J10: ON
　　- J11: RIGHT
　　- J7: RIGHT
　　- J6: RIGHT

5. UnaMKR用の[USBドライバ(CP210x USB to UART Bridge VCP Drivers)をダウンロード](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)、インストールします。（既にインストール済みの場合は必要ありません）
6. UnaMKRとPCをMicroUSBケーブルで接続します。(UnaMKRが立ち上がります）
7. [UnaBiz社GitHub](https://github.com/UnaBiz/unamkr)のfirmwareフォルダをダウンロードしておきます。
8. firmwareフォルダ内の"burnFw.bat"を実行し、該当ファームウェア"Arduino_Modem_v000x.bin"を選択することにより、UnaMKRのファームウェアが書き変わります。

#####BATファイルの注意事項
上記1.でインストールしたBlueNRG Flasher utilityをburnFW.batから呼び出すことになりますが、2020年8月時点でのBlueNRG Flasher utilityのバージョンがburnFW.bat内に記載されているものと異なります。
BATファイルの"#   Start to Program Application"のところで、BlueNRG Flasher Lancuer.exeがご自身の環境と会っていない場合は書き換えてください。下記は、現時点での最新版(BlueNRG-X_Flasher_Launcher.exe)に合わせています。

```burnFW.bat
IF EXIST "BlueNRG-X_Flasher_Launcher.exe" (
  copy "%file%" UnaMKR.bin
  echo on
  BlueNRG-X_Flasher_Launcher.exe flash -address 0x10040000 -f "UnaMKR.bin" -all -UART -verify -l
) ELSE IF EXIST ".\flasher\BlueNRG-X_Flasher_Launcher.exe" (
  copy "%file%" UnaMKR.bin
  echo on
  .\flasher\BlueNRG-X_Flasher_Launcher.exe flash -address 0x10040000 -f "UnaMKR.bin" -all -UART -verify -l
) ELSE IF EXIST "%userprofile%\ST\BlueNRG-X Flasher Utility 4.0.0\Application\BlueNRG-X_Flasher_Launcher.exe" (
  cd "%userprofile%\ST\BlueNRG-X Flasher Utility 4.0.0\Application"
  copy "%file%" UnaMKR.bin
  echo on
  BlueNRG-X_Flasher_Launcher.exe flash -address 0x10040000 -f "UnaMKR.bin" -all -UART -verify -l
)
```

#UnaMKRをArduinoモードで使う
##ジャンパ設定
Arduinoモードでは、数の通り、J11:LEFT, J7:LEFT, J6:LEFT, J10:OFFにジャンパします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/77f8cf7e-c8bd-8798-f168-25f9d8f876f7.png)

##Arduino MKRZEROと接続
UnaMKRにSigfox用アンテナ（必要な場合はBLE用アンテナ）を接続し、Arduino MKRZEOと接続します。下図のような形になるはずです。
![IMG_5120.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/f566241c-10d9-2542-179c-5e3151b27391.jpeg)
その後、PCとマイクロUSBケーブルで接続すると、緑色LEDが点灯します。（もし、LEDが点灯しない場合は、ジャンパ接続等を確認してください。）

##Arduino IDE設定
[ツール]_[ボード]メニューから、**Arduino MKRZERO**を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/72f1fb3d-bdd8-d341-f7d4-7f5c6fc62f51.png)
シリアルポートはMKRZERO接続時に割り当てられたCOM番号を指定します。

##UnaMKR用ライブラリを使用する
1. [GitHub (UnaBiz/UnaMKR)](https://github.com/UnaBiz/unamkr)にアクセスし、[Code]_[Download ZIP]でライブラリをダウンロードします。
2. Arduino IDEの[スケッチ]_[ライブラリをインクルード]_[.ZIP形式のライブラリをインストール...]メニューをクリック
3. ダウンロードしたファイルを選択
4. [ファイル]_[スケッチ例]に**UnaMKR**が追加されていることが確認できます

###内蔵センサ用ライブラリを使用する
UnaMKRには、BOSCHの温湿度、気圧、ガスセンサBME680とFloraの加速度、地磁気センサLSM303が内蔵されており、下記ライブラリを使用することで、簡単にセンサデータを扱うことができます。

- [Adafruit_Sensor](https://github.com/adafruit/Adafruit_Sensor)
- [Adafruit_BME680](https://github.com/adafruit/Adafruit_BME680)
- [Adafruit_ZeroTimer](https://github.com/adafruit/Adafruit_ZeroTimer)
- [STM32duino_LSM303AGR](https://github.com/stm32duino/LSM303AGR)

##サンプルスケッチを動かす
[ファイル]_[スケッチ例]_[UnaMKR]から**Demo_Sigfox-AllSensors**を選択します。
そのまま、コンパイル及びマイコンボードに書き込んでも動きますが、UnaMKRのZone（Radio Configuration）は工場出荷時には日本向けのなっていません。`void setup()`内に`my_mkr.setZone(3);`を追加し、RC3に設定してからSigfoxメッセージ送信するようにすべきです。

スケッチ実行後、**UnaMKRのボタンを押す**と、各センサからデータを読み取り、Sigfoxメッセージを送信することを確認できます。

```
Interrupt detected: Button 
AT$ZONE?
3
  * RC = 3
  * Temperature = 30.60 *C
  * Humidity = 63.35 %
  * Pressure = 1011.64 hPa
  * Air Quality = 0.00 kOhms
  * Acc (X,Y,Z)[mg] = (  -58, -299, 1131)
  * Mag (X,Y,Z)[mGauss] = ( -103,  -66, -498)
  * Visible: 383
  * Infrared: 104
  * Reed Switch: 0

[Payload 0] 058FC6ED546B130BF47000AD
[Payload 1] 068FF6FFAFCF2318BFA0301C
[Payload 2] 033278443000083017F000E1
[Payload 3] 0830068000000000000000E7

SigFox uplink... 
AT$SF=058FC6ED546B130BF47000AD,0
OK
AT$SF=068FF6FFAFCF2318BFA0301C,0
OK
AT$SF=033278443000083017F000E1,0
OK
AT$SF=0830068000000000000000E7,0
OK
AT$SLEEP
OK
Done
```
他にもリードスイッチの切り替えやタイマによる送信トリガもあるようですので、お試しください。
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/d6ad10bc-75ba-8124-14d4-f144657c6473.png)](https://twitter.com/ghibi) @ghibi