MKR GSM1400をGoogleCloud IoTCoreに安全に接続する
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> |
| |||
|
このプロジェクトについて
注:このチュートリアルは古くなっている可能性があります。どうぞ ここ 最新バージョンの場合。
はじめに
デバイスは、HTTPまたはMQTTを使用してGCP IoTCoreに接続できます。このチュートリアルでは、MQTTクライアントを使用してArduino MKR GSM1400ボードをGCPIoTCoreに安全に接続する方法について説明します。 MQTT(Message Queuing Telemetry Transport)は、メッセージングサブスクリプションと公開トランスポートを提供するM2M(マシンツーマシン)接続プロトコルです。
デバイスは認証にJSONWebトークン(JWT)を使用する必要があります。JWTの詳細については、RFC 7519を参照してください。GCPIoTCoreは、JSON Web署名(JWS)を検証するためにRSAアルゴリズムとEllipticCurveアルゴリズムの両方をサポートしています。 JWSの詳細については、RFC7515を参照してください。
MKR GSM 1400を含む、オンボード接続を備えたすべてのArduino MKRボードには、MicrochipATECC508AまたはATECC608A暗号要素が装備されています。この暗号要素は、256ビットのECC(Elliptic Curve Cryptography)キーを安全に生成および保存するために使用できます。 JWTに署名するために、crypto要素内に格納されている秘密鍵を使用します。
ソフトウェアとハードウェアのセットアップ
コンピュータにArduinoIDEがインストールされていない場合は、ダウンロードしてインストールしてください。
インストールしたら、最新の「ArduinoSAMDボード」パッケージがインストールされていることを確認してください。 Arduino IDEを開き、ツール->ボード: "..."->ボードマネージャー... を開くと、確認できます。 メニューエントリ、および「ArdunoSAMD」の検索。執筆時点では、1.6.20が最新バージョンでした。
<図>次に、Arduino IDEのライブラリマネージャーを使用して、使用するArduinoライブラリをインストールする必要があります。スケッチを開く->ライブラリを含める->ライブラリを管理する.. 。 メニューで、次の各ライブラリを検索して個別にインストールします。
- MKRGSM
- Arduino_JSON
- ArduinoECCX08(バージョン1.3.0以降)
- ArduinoMqttClient(バージョン0.1.3以降)
- Arduinoクラウドプロバイダーの例(バージョン1.2.0以降)
次に、マイクロSIMカードをMKR GSM 1400ボードの下部にあるスロットに挿入し、アンテナを接続して、3.7VLipoバッテリーをJSTコネクタに接続します。次に、マイクロUSBケーブルを使用してMKR GSM 1400をコンピューターに接続し、ツール->ポート "..." を使用してArduinoIDEのシリアルポートを選択します。 メニューをクリックし、ツール->ボード「...」でArduinoMKR GSM1400を選択します。 メニュー。
<図>
ボードの構成とGCPIoTコアへの追加
前述のように、GCP IoT Coreでは、認証にJWTを使用するためにMQTTプロトコルを使用して接続するデバイスが必要です。スケッチを使用してボード上に秘密鍵と公開鍵を生成し、公開鍵のPEM値をGCP IoTCoreコンソールに追加します。
プライベートとパブリックは、ArduinoECCX08ライブラリのスケッチ例を使用して生成できます。 ファイル->例-> ArduinoECCX08->ツール-> ECCX08JWSPublicKey を使用して、ArduinoIDEでスケッチを開きます。 。 [アップロード]ボタンをクリックしてスケッチを作成し、ボードにアップロードしてから、シリアルモニターを開きます。行末構成が「NLとCRの両方」に設定されていることを確認してください。
このスケッチでは、ATECC508AをECC608A暗号要素に永続的に構成するように求められます(構成およびロックされていない場合)。 注:このロックプロセスは永続的で元に戻せませんが、暗号要素を使用するために必要です-スケッチセットを使用すると、任意のクラウドプロバイダー(またはサーバー)で5つの秘密鍵スロットを使用でき、秘密鍵はいつでも再生成できます5つの秘密鍵スロット(0〜4)のいずれか 。ボードが工場から出荷されるとき、暗号要素は未構成でロック解除された状態です。
この後、使用するスロットの入力を求められます。このチュートリアルでは、スロット0を使用して、公開鍵に使用される秘密鍵を生成および保存します(必要に応じて、スロット1〜4を使用して追加の秘密鍵を生成および保存できます)。 注: 秘密鍵は暗号要素内で生成されるため、デバイスから離れることはなく、安全に保管され、読み取ることはできません。
<図>生成された公開鍵の値をコピーします。このスクリーンショットでは、値は次のとおりです。
----- BEGIN PUBLIC KEY ----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFl4 + DXufU84AhDGib7aMwmYwUVAp9coRdC9jOdzRe2kqGWFEb + QP4V4YUK9Zy7P
後のステップで、デバイスをGCP IoTCoreに追加するときに使用します。
PEM公開鍵を取得したので、GCP IoT Coreコンソールにログインして、そのための新しいデバイスを作成する必要があります。
1)Webブラウザを開き、https://cloud.google.com/にアクセスし、[サインイン]リンクをクリックしてGoogleIDでログインします。
<図>2)ログインしたら、[コンソールに移動]ボタンをクリックします。次に、メインダッシュボードが表示されます。
<図>3)[作成]リンクをクリックして、新しいプロジェクトを作成します。
<図>4)プロジェクト名の入力を求められます。名前には、「MKRGCPチュートリアル」を使用します。 [作成]ボタンをクリックして続行します。
<図>5)プロジェクトが作成されると、プロジェクトのダッシュボードビューが表示されます。
<図>6)次に、左上のメニューアイコンをクリックし、[ビッグデータ]見出しまでスクロールして、[IoTコア]リンクをクリックします。
<図>7)APIを有効にするように求められたら、[APIを有効にする]ボタンをクリックします。
<図>8)APIを有効にすると、デバイスレジストリを作成するように求められます。 [デバイスレジストリの作成]ボタンをクリックして続行します。
<図>9)フォームが表示されます。 「レジストリID」を入力し、地域を選択します。下のスクリーンショットでは、レジストリIDに「MKR_GCP_Tutorial」と入力され、リージョンとして「us-central1」が選択されています。フォームに記入したら、[作成]ボタンをクリックします。
<図>10)レジストリの詳細が表示されます。
<図>11)新しいデバイスを追加するには、左側のナビゲーションバーにある[デバイス]リンクをクリックします。
<図>12)次に、ページ上部の見出しにある[+デバイスの作成]をクリックします。
<図>13)以下のスクリーンショットで、「MyMKRGSM1400」が使用されたデバイス名を入力します。 「公開鍵形式」として「ES256」を選択する必要があります。以前にボードで生成されたPEM公開鍵を「公開鍵値」テキスト領域に貼り付けます。次に、[作成]ボタンをクリックします。
<図>
ボードをGCPIoTコアに接続する
1)ファイル->例-> を使用して、ArduinoIDEでGCPIoT CoreGSMスケッチを開きます Arduinoクラウドプロバイダーの例-> GoogleCloudPlatformIoTCore-> GCP_IoT_Core_GSM。
2)arduino_secrets.hタブで、SIMカードのPIN(必要な場合)、および使用している携帯電話会社のGPRS APN、ユーザー名、パスワードを入力します。
// GSM settings#define SECRET_PINNUMBER "" #define SECRET_GPRS_APN "GPRS_APN" // GPRSを置き換えるAPN#define SECRET_GPRS_LOGIN "login" // GPRSに置き換えるlogin#define SECRET_GPRS_PASSWORD "password" //に置き換えるGPRSパスワード
4)次に、プロジェクトID、クラウドリージョン、レジストリID、デバイスIDの値を更新します。
// Google CloudPlatformに入力-IoTCore info#define SECRET_PROJECT_ID "" #define SECRET_CLOUD_REGION "" #define SECRET_REGISTRY_ID "" #define SECRET_DEVICE_ID ""
プロジェクトIDの値は、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"
5)スケッチをボードにアップロードし、シリアルモニターを開きます。ボードはセルラーネットワークへの接続を試み、成功した場合はMQTTを使用してGCP IoTCoreへの接続を試みます。
<図>
GCPIoTコアでのボードとのやり取り
ボードがGCPIoT Coreに正常に接続されたので、GCP IoTCoreコンソールを使用してボードとやり取りできます。スケッチは / devices / {deviceId} / state にメッセージを送信します 5秒ごとにトピックを作成し、 / devices / {deviceId} / config の両方でメッセージをリッスンします トピックと / devices / {deviceId} / commands /# トピック。
GCP IoT Coreコンソールのデバイスページで、[SENDCOMMAND]ボタンをクリックします。
<図>送信するメッセージを入力できるモーダルダイアログが表示されます。下のスクリーンショットでは、「HelloThere!」入力されました。 [コマンドを送信]ボタンをクリックしてメッセージを送信します。
<図>ボードがメッセージを受信すると、シリアルモニターに印刷されます。
<図>ボードが送信しているメッセージを表示するには、[構成と状態の履歴]タブをクリックします。
<図>メッセージはBase64でエンコードされた形式で表示され、値をクリックしてリストに入力し、[テキスト]ラジオボタンを選択します。
<図>上のスクリーンショットでは、ボードは "hello 464488" を送信していました。 値、464488値は、 millis()の結果です。 ボード上の機能。
結論
このチュートリアルでは、GCP IoTCoreでArduinoMKR GSM1400ボードを安全に使用する方法について説明しました。署名されたJWTは、JWTの署名に使用された秘密鍵を格納するATECC508AまたはATECC608AでMQTTプロトコルを使用してGCP IoTCoreで認証するために使用されました。 MQTTメッセージはボードとの間で送受信されました。
これはほんの始まりに過ぎません。GCPIoTCoreは、GCPが提供する他の多くのサービスで使用できます。
コード
Github
https://github.com/arduino/ArduinoCloudProviderExamples製造プロセス
- ADLINKはGoogleCloudと提携して、IoT対応ソリューションを提供します
- DHT11センサーを接続するRaspberryPIベースのIoTプロジェクト
- Windows 10 IoTCoreおよびSHT15
- Windows 10 IoT Core for Raspberry Pi3モデルB +
- Windows 10 IoT Core:音声制御ロボット
- PortentaH7デュアルコアデバッグ
- Arduino-写真を撮る-Googleドライブにアップロード
- IoTを使用した心拍数モニター
- Arduinoクラウドセンサータワー
- AzureIoTスイミングプール
- IoTゲートウェイ:モノをクラウドに接続するためのガイド