UiflowでCAT-M/NB-IoT+GNSSユニットからSORACOMにデータを投げてみる(2022.08.01修正済)

# はじめに
2022.07.15にswitch-scienceさんから、[CAT-M/NB-IoT+GNSSユニット](https://www.switch-science.com/catalog/8191/)が販売開始されました。
M5Stackの公式サイトでは少し前から個人輸入で入手することもできたのですが、日本の代理店で公式販売が開始されたということで技適のことを気にせず使えるようになったのは大きいです。
早速入手してSORACOMのSIMを用いUiflowからSORACOM Harvestにデータを投げるところまでをやってみました。

# CAT-M/NB-IoT+GNSSユニットのハマりどころ
[SIM7080G搭載 CAT-M/NB-IoT+GNSSユニットが動かない時に確認したい事と、対応SIM(LTE-M)](https://qiita.com/ma2shita/items/79e77e9872dd3078ead9)に記載のある電源問題(M5StackのGroveポートから供給されるDC5Vでは電力不足)もハマりどころですが、自分がミスったのはSIMカードの向きでした。
最近少なくなってきたmicroSIMなのはまぁいいとして、スマホではあまりなじみのない**切り欠きが外側**に向かうように挿入する仕様です。
![PXL_20220722_140914778.MP.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360166/4206e444-e16f-631d-9df8-504f42389c3f.jpeg)
逆挿入しても問題なくロックがかかってしまうため、恥ずかしながら通信異常の原因をユニットの故障と勘違いする寸前まで行きました…


# SORACOM側の事前準備

[デバイス ID とデバイスシークレットを使用して Harvest にデータを送信する](https://users.soracom.io/ja-jp/docs/inventory/harvest/)を参考に、SORACOM Harvest の設定をします。
私は初めてSORACOM Harvestを利用したのですが、案外他の記事ではこの部分を端折って説明されていないことが多いので、手順を追って書いておきます。
※SIMの登録は済んでいる前提です。

### 1.グループの登録
ユーザーコンソールのSIM管理の画面から、使用したいSIMにチェックを入れて"操作"→"所属グループ"の変更をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360166/361023b2-4aa0-d5d3-1629-b6fb9c529655.png)

"SIMの所属グループの変更"のポップアップが表示されるので、"新しいグループを作成…"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360166/ef72ea38-95e2-a5ae-739c-7e336bd066f8.png)


適当な名前でグループ名を入力し、"グループ作成"→"グループ変更"でグループの登録は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360166/79943ec5-7609-3133-bc37-1679a02f0daa.png)


### 2.SORACOM Harvest Data 設定を有効にする。
グループの登録で登録されたグループ名をクリックすると、SIMグループの詳細画面に遷移します。
"基本設定"のタブから下のほうにスクロールすると"SORACOM Harvest Data 設定"の項目があるので、展開して"OFF"から"ON"に変更して保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360166/89888e04-3acd-a726-9f4c-49916467883c.png)
このサービスは有償の追加オプションになるので確認のポップアップが表示されますが、問題なければ"OK"で完了です。


これでSORACOM側での準備は完了です。


# Uiflowでのプログラミング

いよいよUiflowでCAT-M/NB-IoT+GNSSユニットにネットワークに接続し、SORACOM Harvestにデータを送信するプログラムを組みます。
CAT-M/NB-IoT+GNSSユニットは[M5Core2](https://www.switch-science.com/catalog/6530/)に[M5GO Bottom2](https://www.switch-science.com/catalog/6785/)を取り付けてPort.Cに接続して使う前提で書いています。
（M5Core2本体のPort.Aでも使えるのですが、ここはセオリーに則るということで。）

### 1.ATコマンドでの通信設定
SIM7080Gの通信設定はATコマンドで設定する必要があります。

ATコマンドはUARTで設定するので、送信ピン・受信ピン・ボーレートを設定します。
送信ピン・受信ピンはCAT-M/NB-IoT+GNSSユニットを接続しているポートに合わせて設定します。

ATコマンドはUARTの書き出しブロックで設定します。
ATコマンドについては[ATコマンドマニュアル](https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/unit/sim7080g/en/SIM7070_SIM7080_SIM7090%20Series_AT%20Command%20Manual_V1.04.pdf)や他の記事で詳しく説明されているものがありますので、ここでは簡単に説明しておきます。

　AT+CNACT=0,0：再起動した際にエラーにならないよう、一旦接続を無効にするコマンドを入れています。
　AT+CGDCONT=1,"IP","soracom.io"：パケット発信時の接続先（APN）を設定します。
　AT+CNCFG=0,1,"soracom.io"：PDP認証の設定です。SORACOMではユーザー名やパスワードの設定は不要みたいです。
　AT+COPS=1,2,44010：オペレータをDocomo回線にする設定コマンドです。
　AT+CNACT=0,1：接続を有効にします。もし接続済みの状態で再度AT+CNACT=0,1を送信するとエラーになりますが、接続は継続されます。
　AT+SNPING4="pong.soracom.io",3,16,1000：これは接続設定としては不要ですが、SORACOM回線で接続できている確認のためにpong.soracom.ioにpingを打って反応を確認しています。
　※[pong.soracom.ioはSORACOM回線用のping応答サービスです](https://users.soracom.io/ja-jp/docs/air/endpoints/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360166/1d766e62-d841-87cd-0128-7462b25b2f5f.png)


### 2.SORACOM Harvestへデータを送信
"CatM+GNSSブロック"で用意されている"HTTPSブロック"でSORACOM Harvestへのデータ送信を設定します。
ここではBボタン押したときに **{'time':稼働時間(ms)}** のjsonデータを送信し、送信結果をUSBシリアル出力するようにしています。
[Harvest Data でデバイスのデータをクラウドで収集・取得・可視化する ステップ 2: データを送信する](https://users.soracom.io/ja-jp/docs/harvest/send-data/#%e3%82%b9%e3%83%86%e3%83%83%e3%83%97-2-%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e9%80%81%e4%bf%a1%e3%81%99%e3%82%8b)も参考にしてください。
※今回は説明を割愛しますが、[Unified Endpoint を利用して Funnel と Harvest にデータを送信する](https://users.soracom.io/ja-jp/docs/unified-endpoint/funnel-and-harvest/)も利用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360166/0e083a7c-5ee8-4650-745a-26c1980eee96.png)


### 3.実際に実行
ここまで出来たら、実際にプログラムをM5Core2(M5Stack)に転送して実行します。
2022.08.1現在、送信に成功しても失敗しても結果は"False"になりますが、Falseでも送信に成功している場合があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360166/4a74830e-5a66-e865-0a5e-d9f868d4e118.png)


# SORACOM Harvestでの確認
問題なければ、[デバイス ID とデバイスシークレットを使用して Harvest にデータを送信する Harvest データの確認](https://users.soracom.io/ja-jp/docs/inventory/harvest/#harvest-%e3%83%87%e3%83%bc%e3%82%bf%e3%81%ae%e7%a2%ba%e8%aa%8d)にあるように、送信データが確認できるはずです。
SORACOMのユーザーコンソール画面左上のメニューボタンから"データ収集・蓄積・可視化"→"SORACOM Hervest Data"からでも送信データ確認画面にアクセスできますが、リソース欄でSIMを指定しないと表示されないので注意です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360166/c5992d62-32c1-91bf-46f1-14995832b8e4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360166/f135aa27-e212-f989-a36f-fea2f4e778f8.png)

私はまだ使ったことがりませんが、SORACOM Lagoonを使えば自分以外でも閲覧可能なダッシュボードとしてデータを扱えるはずです。



# 参考記事
[SIM7080G搭載 CAT-M/NB-IoT+GNSSユニットが動かない時に確認したい事と、対応SIM(LTE-M)](https://qiita.com/ma2shita/items/79e77e9872dd3078ead9)
[M5Stackの SIM7080G-CAT-M-NB-IOT-UNITでEmail送信（１）](https://qiita.com/tkyktcy/items/bf9bcc24eb415e5ec2cd)
[CAT-M UNIT+SORACOM SIMを試す](https://mametarou963.com/posts/cat-m_unit+soracom_sim%E3%82%92%E8%A9%A6%E3%81%99/)
[TechHarmony勉強会 #16開催レポート ライトニングトーク ①ローコードで空気よむ](https://blog.usize-tech.com/thseminor16-report/#toc8)


# ~~2022.07.24 追記(お詫び)~~
~~2022.07.23時点の本記事での説明内容はM5Stack本体のWifiを使う方法になっています。(記事作成時には気づきませんでした…)~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360166/167f33e3-cae8-c931-d04c-4c89b05fd033.png)

~~CAT-M/NB-IoT+GNSSユニットでhttp通信するためのブロックはありますが、現時点では有効に使えない状態なのでM5Stackにコンタクトを取って確認中です。~~

~~問題解決後に記事は修正しますが、現時点での記事の内容はCAT-M/NB-IoT+GNSSユニットを用いた通信とはいいがたいものなので、参考にしないでください。
※記事の削除も考えましたが、既に参考にされている方がいると申し訳ないので訂正文を追記しました。~~


# 2022.08.01 再追記(使用可能になりました)
本件についてtwitterにて[SORACOMのMaxさん](https://twitter.com/ma2shita)や[M5Stack公式アカウント](https://twitter.com/M5Stack)とやり取りをした結果、Uiflow V1.10.2でBugfixがかかったようです！
@ma2shitaさん、ならびにM5Stackの方、ありがとうございました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360166/77a5bb2f-2cd9-e2ca-98e5-712cb50a64d3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360166/07a281fd-802e-1772-a3d2-7a02885bedad.png)
実際に動作確認して正常に動作可能なことを確認できたので、記事の内容を修正しています。