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 セッション接続処理を記述載}