SORACOM Beam を使って Google IoT Core と MQTT 接続 (Wio LTE) 2020/12/15

デバイスは、Wio LTE JP Version (seeed 社)です。

ここ↓を参考にSORACOM サポート様のお世話になりながらMQTT 接続をやってみて、個人的に分かりにくかったところをまとめてみました。
SORACOM Beam を使用して Google IoT Core と MQTT 接続する | Getting Started | SORACOM Users


■公開鍵、秘密鍵をどうやって作成するのか?

↓この部分

|以下のような openssl のコマンドで鍵ペアを作成します。

openssl genpkey -algorithm RSA -out rsa_private.pem -pkeyopt rsa_keygen_bits:2048
openssl rsa -in rsa_private.pem -pubout -out rsa_public.pem

この↑2行をコピーし、Cloud Shell を起動して、コマンドラインにペーストします。

赤枠の [ >_ ] ボタン(Cloud Shell をアクティブにする)をクリックして、Cloud Shell を表示させます。



Cloud Shell が表示されるので、あらかじめコピーしておいた2行をそのままペーストします。


エディターを開く」をクリックすると、rsa_private.pem と rsa_public.pem が表示されます。
これをコピーして公開鍵 ・ 秘密鍵欄にペーストします。




■outTopic, inTopic には、何を書けば良いのか?

SORACOM Beam を使用して Google IoT Core と MQTT 接続する | Getting Started | SORACOM Users
↑では、「デバイスからデータを送信」の部分は、Raspberry Pi を使っています。
今回は Wio LTE JP Version なので、こちら↓を参考にしました。「コマンドの送信」のところはそのまま使えます。
【作業】3-1: SORACOM Beam を用いた MQTT Pub/Sub 双方向通信
成功すると、Wio LTE ボード上の LED が光ります。

スケッチの変更例のところ、
 #define MQTT_SERVER_HOST "hostname"  #define MQTT_SERVER_PORT (1883)  #define ID "WioLTE"  #define OUT_TOPIC "outTopic"  #define IN_TOPIC "inTopic" を、  #define MQTT_SERVER_HOST "soracom.io"  #define MQTT_SERVER_PORT (1883)
 #define ID "WioLTE" // たまたま Google IoT Core で登録したレジストリID と同じなので、そのまま  #define OUT_TOPIC "devices/EC21J/events" // デバイスID が"EC21J"なので  #define IN_TOPIC "devices/EC21J/commands/#" // 同じく に変更します。


Google IoT Core で The authorization token expired. エラー サンプルスケッチ mqtt-client.ino で長時間接続すると、Google IoT Core 側で The authorization token expired. エラーが出ます。 1 時間程度で token の有効期限が過ぎて無効になるのは、 Google IoT Core の仕様のようです。 具体的には、void loop() 内に以下を追加し、切断された場合、自動で再接続する処理を追加することで回避できます。

if(!MqttClient.connected ()) {  MQTT セッション接続処理を記述載}