Вы можете взглянуть на Telemetry
и связанную с ним реализацию рабочего стола в python 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 библиотека
Библиотеку 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, следующий код подключается к последовательному порту, публикуется один раз по теме 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, вы можете использовать интерфейс командной строки
Pytelemetry CLI
Командная строка может быть запущена с
pytlm
Затем вы можете connect
, ls
(список) полученных тем, print
данные, полученные по теме, pub
(публикация) по теме или открыть plot
по теме, чтобы отобразить полученные данные в режиме реального времени