Arduino MKR GSM 1400 を Google Cloud IoT Core に安全接続 - ステップバイステップガイド
必要な部品と材料
| Arduino MKR GSM 1400 | ×1 |
| Micro-USB ケーブル | ×1 |
| 3.7V LiPoバッテリー | ×1 |
| Micro SIMカード (データ通信対応) | ×1 |
| セルラー用 UF.L アンテナ | ×1 |
アプリとオンラインサービス
- Arduino IDE
- Google Cloud IoT Core (現在は Google Cloud IoT へ移行済み)
プロジェクト概要
> **注意: このチュートリアルは古い可能性があります。最新版は こちら を参照してください。**はじめに
デバイスを GCP IoT Core に接続するには HTTP または MQTT を使用します。このチュートリアルでは、Arduino MKR GSM 1400 を MQTT クライアントとして GCP IoT Core に **安全に** 接続する手順を解説します。MQTT (Message Queuing Telemetry Transport) は M2M (Machine-to-Machine) 接続プロトコルで、パブリッシュ/サブスクライブ型のメッセージングを提供します。
認証には JSON Web Token (JWT) を使用します (RFC 7519)。GCP IoT Core は RSA と楕円曲線暗号 (ECC) の両方で JSON Web Signature (JWS、RFC 7515) を検証できます。
MKR シリーズ (MKR GSM 1400を含む) には、Microchip ATECC508A または ATECC608A 暗号素子 が搭載されています。これを使って 256ビットの ECC 秘密鍵を安全に生成・格納し、JWT の署名に使用します。秘密鍵はチップから決して出ません。
ソフトウェアとハードウェアのセットアップ
- Arduino IDE をインストール (未インストールの場合)
- ボードマネージャで 「Arduino SAMD Boards」 の最新版 (執筆時 1.6.20) をインストール
- ライブラリマネージャで以下をインストール:
- MKRGSM
- Arduino_JSON
- ArduinoECCX08 (v1.3.0 以上)
- ArduinoMqttClient (v0.1.3 以上)
- Arduino Cloud Provider Examples (v1.2.0 以上)
- MKR GSM 1400 に Micro SIM、アンテナ、LiPoバッテリーを接続し、USBでPCと接続
- Arduino IDE でボード「Arduino MKR GSM 1400」、適切なシリアルポートを選択


GCP IoT Core へのデバイス登録
JWT認証用の公開鍵をボードで生成し、GCPコンソールに登録します。
- Arduino IDE で ファイル → スケッチ例 → ArduinoECCX08 → Tools → ECCX08JWSPublicKey を開いて書き込み
- シリアルモニタを開く (改行コード「NL & CR」に設定)
- 初回のみ、暗号素子の永続設定・ロックを求められます。この処理は不可逆 ですが、クラウド接続には必須です。スロット0〜4の5つの秘密鍵スロットが利用可能になり、いつでも再生成できます。
- スロット番号を聞かれるので「0」を入力
- 生成された PEM 形式の公開鍵 (「-----BEGIN PUBLIC KEY-----」で始まるブロック) をコピー

GCPコンソールでの作業
- Google Cloud Console にログイン
- プロジェクトを作成 (例: "MKR GCP Tutorial")
- ナビゲーションメニュー → 「Big Data」 → 「IoT Core」 → 「APIを有効化」
- 「デバイス レジストリを作成」: レジストリID (例: "MKR_GCP_Tutorial")、リージョン (例: "us-central1") を指定
- レジストリ詳細画面で「デバイス」→「デバイスを作成」
- デバイス名 (例: "MyMKRGSM1400")、公開鍵形式「ES256」、公開鍵値に先ほどのPEMを貼り付け → 「作成」

ボードを GCP IoT Core に接続
- Arduino IDE で ファイル → スケッチ例 → Arduino Cloud Provider Examples → GoogleCloudPlatformIoTCore → GCP_IoT_Core_GSM を開く
arduino_secrets.hタブで SIMのPIN、GPRS APN/ユーザー/パスワードを設定- 同ファイルで GCP情報を設定:
#define SECRET_PROJECT_ID "mkr-gcp-tutorial" #define SECRET_CLOUD_REGION "us-central1" #define SECRET_REGISTRY_ID "MKR_GCP_Tutorial" #define SECRET_DEVICE_ID "MyMKRGSM1400" - スケッチを書き込み、シリアルモニタで接続ログを確認

GCP IoT Core でのデバイス操作
接続成功後、スケッチは5秒ごとに /devices/{deviceId}/state トピックにメッセージを送信し、/devices/{deviceId}/config と /devices/{deviceId}/commands/# を購読します。
- コマンド送信: デバイスページの「コマンドを送信」ボタンからメッセージ (例: "Hello There!") を送ると、ボードのシリアルモニタに表示されます。
- 状態確認: 「構成と状態の履歴」タブでデバイスからのメッセージを確認。Base64エンコードされているので「Text」ラジオボタンでデコード表示。



結論
このチュートリアルでは、MKR GSM 1400 のハードウェア暗号素子 (ATECC508A/608A) に格納された秘密鍵で JWT に署名し、MQTT 経由で GCP IoT Core に安全に接続する方法を説明しました。これにより、GCP の他のサービス (BigQuery, Pub/Sub, Dataflow 等) と連携した本格的な IoT システム構築の第一歩となります。
コード リポジトリ
GitHub: ArduinoCloudProviderExamples
製造プロセス
- Raspberry Pi 3とDHT11センサーを接続し、ThingsIo.aiクラウドへデータ送信
- Windows 10 IoT CoreとSHT15センサーで高精度な温湿度モニタリング
- Raspberry Pi 3 Model B+へのWindows 10 IoT Coreインストール:ステップバイステップガイド
- Windows 10 IoT Coreで音声制御ロボットを構築 - Raspberry Pi 2編
- Arduino Portenta H7デュアルコアシステムをSegger J-Linkでデバッグする
- Arduino Megaで写真撮影・Google Drive自動アップロード:PHPoC WiFiシールド活用
- ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
- ESP32で作るIoT環境モニター:温湿度・気圧・CO2をWebダッシュボードで可視化
- Azure IoT対応スマートプール制御システム:水温・気温監視と遠隔ポンプ制御
- ADLINKとGoogle Cloudが協業し、シームレスなIoTソリューションを提供
- IoTゲートウェイをマスターする:デバイスをクラウドへシームレスに接続