您可以在 python 中查看Telemetry
及其相关的桌面实现Pytelemetry
主要特点
它是基于PubSub 的协议,但与 MQTT 不同的是,它是点对点协议,没有代理。
与任何 pubsub 协议一样,您可以从一端发布topic
并在另一端收到有关该主题的通知。
在嵌入式方面,发布到主题非常简单:
publish("someTopic","someMessage")
对于数字:
publish_f32("foo",1.23e-4)
publish_u32("bar",56789)
这种发送变量的方式可能看起来有限,但下一个里程碑旨在通过执行以下操作为主题的解析增加额外的意义:
// Add an indexing meaning to the topic
publish("foo:1",45) // foo with index = 1
publish("foo:2",56) // foo with index = 2
// Add a grouping meaning to the topic
publish("bar/foo",67) // foo is under group 'bar'
// Combine
publish("bar/foo:45",54)
如果您需要发送数组、复杂的数据结构等,这很好。
此外,PubSub 模式因其灵活性而非常出色。您可以构建主/从应用程序、设备到设备等。
C 库
只要您有一个像样的 UART 库,C 库就可以非常简单地添加到任何新设备上。
您只需实例化一个名为TM_transport
(由 定义Telemetry
)的数据结构,并分配 4 个函数指针read
readable
write
writeable
。
// your device's uart library function signatures (usually you already have them)
int32_t read(void * buf, uint32_t sizeToRead);
int32_t readable();
int32_t write(void * buf, uint32_t sizeToWrite);
int32_t writeable();
要使用遥测,您只需添加以下代码
// At the beginning of main function, this is the ONLY code you have to add to support a new device with telemetry
TM_transport transport;
transport.read = read;
transport.write = write;
transport.readable = readable;
transport.writeable = writeable;
// Init telemetry with the transport structure
init_telemetry(&transport);
// and you're good to start publishing
publish_i32("foobar",...
Python 库
在桌面端,有pytelemetry
实现协议的模块。
如果您知道 python,以下代码连接到串行端口,在 topic 上发布一次foo
,在 3 秒内打印所有接收到的主题然后终止。
import runner
import pytelemetry.pytelemetry as tm
import pytelemetry.transports.serialtransport as transports
import time
transport = transports.SerialTransport()
telemetry = tm.pytelemetry(transport)
app = runner.Runner(transport,telemetry)
def printer(topic, data):
print(topic," : ", data)
options = dict()
options['port'] = "COM20"
options['baudrate'] = 9600
app.connect(options)
telemetry.subscribe(None, printer)
telemetry.publish('bar',1354,'int32')
time.sleep(3)
app.terminate()
如果你不懂python,可以使用命令行界面
遥测 CLI
命令行可以启动
pytlm
然后你可以connect
,ls
(列出)接收到的主题,print
在一个主题上接收到的数据,pub
(发布)在一个主题上,或者plot
在一个主题上打开一个来实时显示接收到的数据