Monarch DevKit UnaMKRをEmbedモードで使う

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

ここでは、UnaBiz社のMonarch対応開発キットUnaMKRの動作モードのひとつである**Embedモード**の使い方を説明します。
Embedモードは、UnaMKR内蔵の[ST BlueNRG-2 SoC](https://www.st.com/ja/wireless-transceivers-mcus-and-modules/bluenrg-2.html)を使った開発モードとなっており、より低消費電力のデバイスを開発することができます。

#Embedモードへの移行
ModemモードないしArduinoモードで動作しているUnaMKRをEmbedモードへ移行するためにはファームウェア更新が必要です。下記の手順で行ってください。

1. ST社の[Flashユーティリティ](https://www.st.com/content/st_com/en/products/embedded-software/wireless-connectivity-software/stsw-bnrgflasher.html#overview)をダウンロード＆インストール
2. UnaMKRの電源OFF確認
3. MnaMKRにArduinoボードが接続されていないことを確認
4. ジャンパ確認（J10:ON、J6,J7,J11:右）
5. [USBシリアルドライバ](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)がインストールされていることを確認（[こちら](https://qiita.com/ghibi/items/33c62bd56fc1eb334e8a#usb-serial%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E5%BF%85%E8%A6%81%E3%81%AB%E5%BF%9C%E3%81%98)を実施済み方はインストール済みです）
6. MicroUSBケーブルを使用し、UnaMKRをPCとシリアル接続
7. [UnaMKR GitHub(https://github.com/UnaBiz/unamkr/)](https://github.com/UnaBiz/unamkr/)からfirmwareフォルダをダウンロード 
8. ダウンロードしたfirmwareフォルダにある**burnFw.bat**を実行すると、binファイルの選択ダイアログが表示されますので、試したいファームウェアを選択。（ここでは、**Embed_Sigfox-Sensors-Sleep_v0002.bin**を試してみます。）
9. 下記のようにファームウェア更新が実行されます。

```
 * Please select firmware file you would like to update:
   Selected file is : "C:\...\firmware\Embed_SigFox-Sensors-Sleep_v0002.bin"
        1 file(s) copied.
Qt: Untested Windows version 10.0 detected!

Working on ST DK COM port :
 1) COM5

19:44:46.519: Device COM5 -> Call flashDevice
19:44:46.519: Device COM5 -> Call initDevice: Init Device
19:44:46.690: Device COM5 -> Call bootloaderInstance
19:44:46.697: Device COM5 -> Call flashDevice: Start Programming...
19:44:46.714: Device COM5 -> Call BTL_flashBin: startAddress = 0x10040000, doErase = False, doGo = False
19:44:46.757: Device COM5 -> BTL_flashBin erase page 0: result = 0
19:44:46.796: Device COM5 -> BTL_flashBin programming.... 0 bytes of 135384, result = 0
...
19:45:09.411: Device COM5 -> BTL_flashBin programming.... 135168 bytes of 135384, result = 0
19:45:09.411: Device COM5 -> Call flashDevice: End Programming.
19:45:10.687: Device COM5 -> Call readDevice
19:45:10.693: Device COM5 -> Call readDevice: Start...
19:45:29.243: Device COM5 -> Call closeDevice
19:45:29.246: Device COM5 -> Call readDevice: Finished.

**** INPUT PARAMETERS FOR FLASH OPERATION****

- OPERATING MODE = UART
- AUTOMATIC MODE = True
- BLUENRG1 DEVICE FILE = UnaMKR.bin
- BLUENRG2 DEVICE FILE = UnaMKR.bin
- VERIFY = True
- MASS ERASE = False
- START ADDRESS = 0x10040000 (only  for .bin image file)
- LOG = True
- LOG PATH = C:\...\ST\BlueNRG-1_2 Flasher Utility 3.1.0\Application\Logs\

**** RESULTS OF FLASH OPERATION ***

1 - Device COM5
Device = BlueNRG-2
Command -> FLASH = Success
LIST OF OPTION -> VERIFY = Success, IDENTIFICATION = Success

Press any key to continue . . .
```
これでファームウェア更新が完了しました。

#Embedモードの動作確認
ファームウェア更新が成功したら、UnaMKRの電源をOFF（MicroUSBケーブルを外す）し、J10ジャンパを取り外した後に、再度、UnaMKRを起動（MicroUSBケーブルを接続）してください。
その後、ターミナルソフトでUnaMKRが接続されているポートを開いてください。（UnaMKRのシリアルポート設定は[こちら](https://qiita.com/ghibi/items/33c62bd56fc1eb334e8a#%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E3%83%9D%E3%83%BC%E3%83%88%E8%A8%AD%E5%AE%9A)。

今回のサンプルアプリ（Embed_SigFox-Sensors-Sleep_v0002.bin)は、UnaMKR上のボタン押下をトリガにボード内のセンサ情報を取得し送信するものと20分間隔でセンサ情報を送る仕組みとなっています。
動作確認のために、ボード上の黒いボタンを押すと、ターミナルソフト上で下記コマンド応答を確認することができます。

```
<Triggered by Button>
Current RC zone: 1

BME680:
 - Temperaure : 28.15 *C
 - Humidity   : 41.08 %
 - Pressure   : 1006.18 hPa
 - Air Quality: 20.47 kOhms

lsm303agr:
 - Raw Acceleration  :  3712    -6784   13568
 - Raw Magnetic field:  -171      320    -161
 - Acceleration  [mg]: 226.20   -413.40 826.80
 - Magnetic field[mG]: -256.50  480.00  -241.50

TSL2540:
 - Visible : 1823
 - Infrared: 1633

[Payload 0] 120E2E6333A2BF900C9D34E5
[Payload 1] 2FE7030FE807FF071F06616B

Uplink payload 0...
  -> status = 0x00
Uplink payload 1...
  -> status = 0x00
Done.
```
温度、湿度、気圧、ガス、加速度、地磁気の各センサ値を2つのメッセージで送信していることが確認できます。
ペイロードへの変換方法は、このサンプル自体のソースコードが、まだ公開されていないので、わかりませんが、おそらく、Arduinoモードのサンプル（[Demo_SigFox-Optimal-AllSensors](https://github.com/UnaBiz/UnaMKR/blob/master/examples/Demo_SigFox-Optimal-AllSensors/Demo_SigFox-Optimal-AllSensors.ino)）と同じではないかと思います。

念のため、Sigfox Backend CloudのMESSAGESビューで確認したところ、確かに2つのメッセージが受信されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/90d97328-9b74-3cc4-34a0-c9d30ab47680.png)

実際の開発は、[ArmKeil](http://www.keil.com/)などの開発環境を使うことになると思います。

[Sigfox Japan KCCS](https://qiita.com/organizations/sigfox)

関連ページ

- [Monarch対応開発キット - UnaMKR -](https://qiita.com/ghibi/items/e6c9656ccc1614e4624d)
- [Monarch DevKit UnaMKRをModemモードで使う](https://qiita.com/ghibi/items/33c62bd56fc1eb334e8a)
- [UnaBiz UnaMKR公式ドキュメント](https://unabiz.github.io/UnaMKR/#/)