Telemetry
Pythonでのデスクトップ実装とそれに関連するものを見ることができますPytelemetry
主な特徴
これはPubSubベースのプロトコルですが、MQTTとは異なり、ポイントツーポイントプロトコルであり、ブローカーはありません。
他のpubsubプロトコルと同様に、一方の端からaで公開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ライブラリ
Cライブラリは、適切なUARTライブラリがあれば、新しいデバイスに簡単に追加できます。
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を知っている場合、次のコードはシリアルポートに接続し、トピックについて1回公開し、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