PubSub 如何与多个 ESP32 一起工作?
How does PubSub work with multiple ESP32s?
让我们假设:
- 我将“cloud:demo/INP”添加到名为 INP 的帐户主题中。
- 我有几个 ESP32 设备,每个设备都有一个应用程序订阅以在“云:demo/INP”上接收一些消息:
import pubsub
topic ::= "cloud:demo/INP"
main:
print "wakeup - checking messages"
pubsub.subscribe topic --blocking=false: | msg/pubsub.Message |
sender := ?
if msg.sender.is_device:
sender = "Device($msg.sender.hardware_id)"
else:
sender = "ExternalSystem($msg.sender.external_name)"
print "Received message '$msg.payload.to_string' from $sender"
- 我有一个用 go/java/python/c#/dart/SCALA 编写的应用程序...使用 toit api,向主题“cloud:demo/INP”发送消息.
是所有订阅接收消息的 ESP32 设备都会收到消息,还是只有其中一个设备会收到消息?我猜每个人,虽然不确定。
- 现在让我们再添加一个名为“cloud:demo/OUT”的主题 OUT。
- 让我们更改 toit 应用程序,以便当它收到有关“cloud:demo/INP”主题的消息时,它会向“cloud:demo/OUT”主题发送消息并部署此应用程序在几个 ESP32 上:
import pubsub
INCOMING_TOPIC ::= "cloud:demo/INP"
OUTGOING_TOPIC ::= "cloud:demo/OUT"
main:
print "app is started"
pubsub.subscribe INCOMING_TOPIC --auto_acknowledge: | msg/pubsub.Message |
print "received: $msg.payload.to_string"
pubsub.publish OUTGOING_TOPIC msg.payload
print "sent: $msg.payload.to_string"
- 让我们更改 go/dart/python ... 使用 toit api 的应用程序,使其不仅可以发送消息,还可以接收消息。
如果我现在向主题“cloud:demo/INP”发送一些消息,我会收到来自所有 ESP32 的消息吗?如果是这样,有没有办法确定接收到的消息属于哪个ESP32设备?
提前感谢您的回复
Toit PubSub 进行广播 - 所有设备都会收到消息。
关于主题发送的每条消息都包含一个 publisher
,可以是 external
或 device
。
发布消息的 device
将拥有 hardware_id
和 job_id
,这是确定发送消息的设备的唯一方式。我们还向外部订阅者发送 device_id
.
发布消息的 external
将包含 name
,这是发布消息的外部应用程序的标识符。例如,在 CLI 中,您可以使用以下方式编写消息:toit pubsub write <topic> <external-name> -- <msg>
这里 <external-name>
将填充到 publisher.external.name
属性.
中
让我们假设:
- 我将“cloud:demo/INP”添加到名为 INP 的帐户主题中。
- 我有几个 ESP32 设备,每个设备都有一个应用程序订阅以在“云:demo/INP”上接收一些消息:
import pubsub
topic ::= "cloud:demo/INP"
main:
print "wakeup - checking messages"
pubsub.subscribe topic --blocking=false: | msg/pubsub.Message |
sender := ?
if msg.sender.is_device:
sender = "Device($msg.sender.hardware_id)"
else:
sender = "ExternalSystem($msg.sender.external_name)"
print "Received message '$msg.payload.to_string' from $sender"
- 我有一个用 go/java/python/c#/dart/SCALA 编写的应用程序...使用 toit api,向主题“cloud:demo/INP”发送消息. 是所有订阅接收消息的 ESP32 设备都会收到消息,还是只有其中一个设备会收到消息?我猜每个人,虽然不确定。
- 现在让我们再添加一个名为“cloud:demo/OUT”的主题 OUT。
- 让我们更改 toit 应用程序,以便当它收到有关“cloud:demo/INP”主题的消息时,它会向“cloud:demo/OUT”主题发送消息并部署此应用程序在几个 ESP32 上:
import pubsub
INCOMING_TOPIC ::= "cloud:demo/INP"
OUTGOING_TOPIC ::= "cloud:demo/OUT"
main:
print "app is started"
pubsub.subscribe INCOMING_TOPIC --auto_acknowledge: | msg/pubsub.Message |
print "received: $msg.payload.to_string"
pubsub.publish OUTGOING_TOPIC msg.payload
print "sent: $msg.payload.to_string"
- 让我们更改 go/dart/python ... 使用 toit api 的应用程序,使其不仅可以发送消息,还可以接收消息。 如果我现在向主题“cloud:demo/INP”发送一些消息,我会收到来自所有 ESP32 的消息吗?如果是这样,有没有办法确定接收到的消息属于哪个ESP32设备?
提前感谢您的回复
Toit PubSub 进行广播 - 所有设备都会收到消息。
关于主题发送的每条消息都包含一个 publisher
,可以是 external
或 device
。
发布消息的 device
将拥有 hardware_id
和 job_id
,这是确定发送消息的设备的唯一方式。我们还向外部订阅者发送 device_id
.
发布消息的 external
将包含 name
,这是发布消息的外部应用程序的标识符。例如,在 CLI 中,您可以使用以下方式编写消息:toit pubsub write <topic> <external-name> -- <msg>
这里 <external-name>
将填充到 publisher.external.name
属性.