0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ESP32からCoAPでThingsBoardにテレメトリ/属性をアップする

0
Last updated at Posted at 2026-02-11

久しぶりのThingsBoardです。
ESP32からThingsBoardにテレメトリをアップするには、HTTP、MQTTなどに加えて、CoAPでもできます。
CoAPは、UDPで軽量なので、ESP32に合っているかなあと。

送信には、ESP32で動作するJavascript実行環境を使います。

ThingsBoardのCoAPの仕様は以下にあります。

テレメトリにアップロード

テレメトリのUploadは、上記を見ると以下のフォーマットとのことです。

coap://$THINGSBOARD_HOST_NAME/api/v1/$ACCESS_TOKEN/telemetry

書き込む値は、送信BodyにJSONで指定します。

main.js
coap.setCallback(e =>{
	console.log(JSON.stringify(e));
});

var token = coap.post("[ThingsBoardサーバのIPアドレス]", 5683, false, "/api/v1/[アクセストークン]/telemetry", value);

アクセストークンは、ThingsBoardにデバイスを追加すると発行されます。
valueは、設定したい値をObjectで指定します。以下例です。

main.js
value = { temperature: 12.3 }

設定したコールバックに結果が返ってきます。

{"type":1, "code":197, "message_id":31327, "token":[coap.postの戻り値], "remote_ip":"[ThingsBoardサーバのIPアドレス]", "remote_port":5683}

typeはMessage Type、codeはCoAP Response Code(CoAPコード)です。

こんな感じで、ThingsBoardの画面で、テレメトリがアップされていることが確認できます。

image.png

属性のアップロード

属性のアップロードは以下です。

coap://$THINGSBOARD_HOST_NAME/api/v1/$ACCESS_TOKEN/attributes

書き込む値は、送信BodyにJSONで指定します。

main.js
var token = coap.post("[ThingsBoardサーバのIPアドレス]", 5683, false, "/api/v1/[アクセストークン]/attributes", value);

属性の取得

次は属性を取得してみます。

coap://$THINGSBOARD_HOST_NAME/api/v1/$ACCESS_TOKEN/attributes?clientKeys=attribute1,attribute2&sharedKeys=shared1,shared2
main.js
var token = coap.get("[ThingsBoardサーバのIPアドレス]", 5683, false, "/api/v1/[アクセストークン]/attributes?clientKeys=temperature");

コールバックに返ってきます。

{"type":1, "code":201, "message_id":31328, "token":[coap.postの戻り値], "payload":"{\"client\":{\"temperature\":12.3}}", "content_format":50, "remote_ip":"[ThingsBoardサーバのIPアドレス]", "remote_port":5683}

まとめると、ESP32内のJavascriptはこうなります。

main.js
import * as coap from "Coap";

coap.setCallback(e =>{
	console.log(JSON.stringify(e));
});

setInterval(() =>{
	console.log("call interval");
	var value = {
		temperature: 12.3
	};
//	var token = coap.post("[ThingsBoardサーバのIPアドレス]", 5683, false, "/api/v1/[アクセストークン]/telemetry", value);
//	console.log("token=" + token);
//	var token= coap.post("[ThingsBoardサーバのIPアドレス]", 5683, false, "/api/v1/[アクセストークン]/attributes", value);
//	console.log("token=" + token);
	var token = coap.get("[ThingsBoardサーバのIPアドレス]", 5683, false, "/api/v1/[アクセストークン]/attributes?clientKeys=temperature");
	console.log("token=" + token);
}, 2000);

function loop(){
	esp32.update();
}

(参考) ESP32で動作するJavascript実行環境

ESP32で動作するJavascript実行環境を公開しています。
この中で実装しています。

「電子書籍:M5StackとJavascriptではじめるIoTデバイス制御」

サポートサイト

(参考)ThingsBoardインストール

ThingsBoardをDockerでインストール

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?