Отправить пакет данных нескольких датчиков в модуль Bluetooth

В своем проекте я использую 3 датчика. Я посылаю обычный поток данных датчиков в модуль Bluetooth, но теперь я хочу отправить данные в виде пакета (размер которого может быть 30 байт или 40 байт), в котором первые 10 байт содержат данные первого датчика, а следующие 10 байт-данные второго датчика и так далее. Но проблема здесь в том, что я не нахожу что-то относящееся к моему подходу. Может ли кто-нибудь предложить мне какую-нибудь ссылку или какой-нибудь способ сделать это?

Заранее спасибо.

, 👍1

Обсуждение

https://en.wikipedia.org/wiki/Struct_(C_programming_language), @Majenko

Мне непонятно, в чем тут собственно проблема. Для наложения пакетного протокола на последовательный поток двоичных данных вы обычно просто отправляете начальный байт (или последовательность стартовых байтов), которую вы определили, затем отправляете длину пакета, а затем данные. Не намного больше. Это то, о чем вы просите?, @chrisl

Да, я хочу этого. Не могли бы вы помочь мне, как это сделать с помощью программного обеспечения arduino IDE?, @Namra Noor


1 ответ


Лучший ответ:

1

Существует множество способов передачи двоичных данных через интерфейс на основе байтового потока, такой как последовательный (который используется обычными модулями Bluetooth, такими как HC-05/HC-06). Я опишу здесь только одну.

Сначала нам нужно определить стартовый байт, который отмечает начало нового пакета. Это может быть любое произвольное значение, например 0xFF. Также можно использовать определенную последовательность байтов в качестве стартового маркера. Этот стартовый байт/последовательность-это то, что мы посылаем в первую очередь при передаче пакета.

Затем мы хотим передать размер следующих данных. При малых и нормальных размерах пакетов здесь достаточно одного байта (что дает место до 255 байт).

Иногда вам может понадобиться вычислить хэш-значение CRC для проверки повреждения данных. Это тоже можно было бы отправить сюда. Но если у вас нет системы, которая действительно теряет/искажает данные, она вам не нужна. Я предлагаю вам сначала попробовать его без и проверить, действительно ли поврежденные данные являются вещью для вашей установки.

А затем мы отправляем фактические данные. Как именно вы это делаете, зависит от того, как данные хранятся в вашем коде. Хотя вы будете использовать Serial.write() в некотором роде. Если вы хотите получить более конкретный ответ на этот вопрос, вам нужно включить свой код, чтобы мы могли видеть, как вы храните данные своих датчиков.

Затем на принимающей стороне вы ждете стартового маркера, читаете байт размера, а затем читаете байты до тех пор, пока не получите столько байтов, сколько сказал байт размера. Поскольку у вас есть несколько датчиков, вы можете отправить данные датчиков каждого датчика в своем собственном пакете. Затем данные могут быть отформатированы следующим образом: 1 байт ID датчика, X байт данных датчика.

,