SIM800L gsm/gprs モジュールに接続された esp32 ボードがあります。このプロジェクトにはTinyGSMライブラリを使用しています。どういうわけか、http ブリッジを介してGoogle クラウドにデータを正常に公開するためのセットアップを取得できません。以前、curl を使用してこれを行う方法に関するドキュメントに示されている例を実行しましたが、成功しました。
curl -X POST -H 'authorization: Bearer JWT' -H 'content-type: application/json' --data '{"state": {"binary_data": "DATA"}}' -H 'cache-control: no-cache' 'https://cloudiotdevice.googleapis.com/v1/projects/{project-id}/locations/{cloud-region}/registries/{registry-id}/devices/{deviceid}:setState'
TinyGSMとesp32で想定される同じリクエストを生成すると、Google サーバーから常に同じ http レスポンスを取得します。
"error": { "code": 403, "message": "呼び出し元に権限がありません", "status": "PERMISSION_DENIED" }
最初は間違った JWT と関係があると思っていましたが、意図的に間違ったものに変更すると、エラー メッセージは次のように変わります。
"error": { "code": 401, "message": "リクエストに必要な認証資格情報がありません。OAuth 2 アクセス トークン、ログイン Cookie、またはその他の有効な認証資格情報が必要です 。https://developers.google.com/identity/を参照してくださいサインイン/web/devconsole-project." 、「ステータス」:「認証されていません」}
したがって、無効なJWTの可能性を除外できると思います
プロジェクトの構成に何か問題があるのではないかと思いますが、その場合は、curl では常に機能するのに esp32 では機能しない理由がわかりません。