Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 02.03.2018
Сообщений: 73

Парсинг данных полученных от Arduino через виртуальный COM порт

23.03.2019, 10:04. Показов 6442. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день уважаемые софорумчане,при реализации моего проекта возникла необходимость получать данные с блютуз устройства,задачу эту я решил открытия канала связи с виртуальным COM портом блютуз,и да данные я получить смог,но тут возникла другая проблема решение которой не даёт осуществить недостаток знаний,проблема собственно в том что от удалённого устройства в виртуальный COM-порт приходят данные такого типа:

Code
1
2
3
4
5
6
------- Xoris - Telemetry Report -------
Humidity: 43.30 %
Temperature: 24.50 *C
Pressure: 99468 mm.rt.st
ALT: 76 metres
------- Xoris - Telemetry Report END ---
Открытие порта для приёма данных:

C#
1
2
3
byte[] data = new byte[1024]; // Глобальный масив для данных от телеметрии
 
        SerialPort port = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One); // Порт блютуз для телеметрии
Само чтение и запись в массив:

C#
1
2
port.Open();
port.Read(data, 0, data.Length);
Собственно проблемой стало то,как значения Humidity Temperature и другие распарсить в переменные C# такие например как string temperature и т.д,как я не пытался у меня ничего не вышло,буду рад любой помощи,если можете дайте пожалуйста примеры готового кода и если не сложно пояснения почему именно так. Заранее спасибо жду вашей помощи)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.03.2019, 10:04
Ответы с готовыми решениями:

Отправка данных с АПЦ Arduino Nano в Hiasm через COM-порт
Здравствуйте! У меня имеется готовая программа в Hiasm и АЦП для нее (на микроконтроллере Atmega8) который отправляет данные в COM-порт. ...

STM32F102C8T6 и виртуальный COM порт через USB.
Господа, помогите осознать, что происходит. Микроконтроллер STM32F102C8T6. В прошивке виртуального COM порта внутрь калбэка void...

Потеря данных полученных в Android от Arduino по Bluetooth (appinvertor)
Отправляю сигналы с ардуино, с разных датчиков, в виде "имя датчика + уровень" Пробовал вот так: Serial1.print("pp");...

23
172 / 118 / 57
Регистрация: 08.01.2013
Сообщений: 664
23.03.2019, 11:51
Если я не ошибаюсь, то в data, храниться вся ваша информация, ее просто нужно переформатировать c byte в нужную вам структуру.
Пример:
Послали вы 1 число int32 и 1 символ char. В итоге 2 "слова"(int32 и char). int32 - 32 бит, что равно 4 byte, в первых 4 байт будет хранится число int32, а в следующем байте char, так как char 8 бит=1 байту.

Добавлено через 5 минут
Если не получится разобраться и найти нужные данные, то нужно разбираться с настройкой порта, совпадают ли боды, у вас стоит 9600, вы с такой же скоростью отправляете и принимаете данные и тому подобные настройки
0
0 / 0 / 0
Регистрация: 02.03.2018
Сообщений: 73
23.03.2019, 11:57  [ТС]
Да с устройства на порт данные идут всё на той же скорости 9600,но вы меня не так поняли,мне надо понять или нужен код для того чтобы разложить конечный результат по переменным
0
172 / 118 / 57
Регистрация: 08.01.2013
Сообщений: 664
23.03.2019, 12:01
Цитата Сообщение от makris Посмотреть сообщение
мне надо понять или нужен код для того чтобы разложить конечный результат по переменным
Да, из data байты преобразовать в нужную вам структуру(int, string, float и т.д. в зависимости в каком порядке вы отправляли). Я лично с bluetooth не работал, но работал с wifi с COM портом. Но думаю принцип получения передачи данных одинаково
0
0 / 0 / 0
Регистрация: 02.03.2018
Сообщений: 73
23.03.2019, 12:38  [ТС]
Можете дать примерный код как это должно выглядеть ?
0
172 / 118 / 57
Регистрация: 08.01.2013
Сообщений: 664
23.03.2019, 14:08
Цитата Сообщение от makris Посмотреть сообщение
Можете дать примерный код как это должно выглядеть ?
у меня нет, я очень давно этим заморачивался, но если поискать по форуму "как массив byte конвертировать в int", то найдете ответ на свой вопрос
0
0 / 0 / 0
Регистрация: 02.03.2018
Сообщений: 73
23.03.2019, 14:11  [ТС]
Дак мне не нужен int,нужен string и потом эту строку разложить ещё дальше по переменным
0
172 / 118 / 57
Регистрация: 08.01.2013
Сообщений: 664
23.03.2019, 14:20
Цитата Сообщение от makris Посмотреть сообщение
Дак мне не нужен int,нужен string и потом эту строку разложить ещё дальше по переменным
https://www.cyberforum.ru/post308847.html

Добавлено через 4 минуты
P.S. также нужно учитывать кодировку
0
0 / 0 / 0
Регистрация: 02.03.2018
Сообщений: 73
23.03.2019, 14:24  [ТС]
В Arduino вроде UTF-8

Добавлено через 27 секунд
Но к сожалению мою проблему это не решает
0
172 / 118 / 57
Регистрация: 08.01.2013
Сообщений: 664
23.03.2019, 14:35
Цитата Сообщение от makris Посмотреть сообщение
Но к сожалению мою проблему это не решает
Как я говорил, нужно разобраться в структуре отправки(мб ваше устройство не строку отправляет, а структуру) и мб в настройке порта.
0
0 / 0 / 0
Регистрация: 02.03.2018
Сообщений: 73
23.03.2019, 14:46  [ТС]
Моё устройство отправляет каждые 2 секунды следующую структуру:

------- Xoris - Telemetry Report -------
Humidity: 43.30 %
Temperature: 24.50 *C
Pressure: 99468 mm.rt.st
ALT: 76 metres
------- Xoris - Telemetry Report END ---
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
23.03.2019, 14:48
Цитата Сообщение от makris Посмотреть сообщение
Моё устройство отправляет каждые 2 секунды следующую структуру
Больше похоже на текст, а не на структуру...
0
0 / 0 / 0
Регистрация: 02.03.2018
Сообщений: 73
23.03.2019, 14:51  [ТС]
Можно сказать что тексовая структура с данными от телеметрии,но увы распарсить данные этих строк у меня так и не вышло
0
172 / 118 / 57
Регистрация: 08.01.2013
Сообщений: 664
23.03.2019, 14:53
Цитата Сообщение от makris Посмотреть сообщение
Моё устройство отправляет каждые 2 секунды следующую структуру:
в переменной data тебе нужно их искать, конвертировав под структуру отправки этого устройтсва(мб в каких то документациях или даташитах на это устройство написано)

Добавлено через 45 секунд
Цитата Сообщение от makris Посмотреть сообщение
Можно сказать что тексовая структура с данными от телеметрии,но увы распарсить данные этих строк у меня так и не вышло
сам текст в приложение пришло?

Добавлено через 1 минуту
data с не нулювыми значениями?
0
0 / 0 / 0
Регистрация: 02.03.2018
Сообщений: 73
23.03.2019, 14:56  [ТС]
Если текст конвертировать в UTF-8 или ASCI2 то будет выводится только - и всё,на устройство документации нет ибо оно самодельное,а построено на базе Arduino Uno
0
172 / 118 / 57
Регистрация: 08.01.2013
Сообщений: 664
23.03.2019, 15:02
Цитата Сообщение от makris Посмотреть сообщение
проблема собственно в том что от удалённого устройства в виртуальный COM-порт приходят данные такого типа:
Данные в приложении где храниться? в string/файл или что-то подобное. Мы не можем понять что тебе нужно.
Если проблема в получении текстовой структуры в приложении, то нужно разбираться с data, портом, настройками блютуз устройства. Если проблема в получение данных (Humidity, Temperature, Pressure, ALT) из полученного текста в приложении, то тут надо со строкой/текстом разбираться
0
0 / 0 / 0
Регистрация: 02.03.2018
Сообщений: 73
23.03.2019, 15:08  [ТС]
Есть переменные

string temperatur = "";
string humidity = "";

и другие под Pressure, ALT

мне надо получить данные с устройства,перевести их в читабельный string буфер ( просто переменная для хранения буферного значения переведённого массива ) и этот буфер как-то считать и данные из него распихать уже по переменным,но т.к в программирование на C# я не очень силён для меня это стало настоящей проблемой,блютуз устройство в данный момент не используется а устройство подключено по USB и делает для себя тот самый виртуальный COM порт,в принципе как и блютуз.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18240 / 14154 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 1
23.03.2019, 15:09
makris, сначала нужно получить все байты отчета и преобразовать их в строку. Преобразование делается с помощью Encoding.GetString().

После преобразования данные можно вытянуть регулярками
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
string report = @"------- Xoris - Telemetry Report -------
Humidity: 43.30 %
Temperature: 24.50 *C
Pressure: 99468 mm.rt.st
ALT: 76 metres
------- Xoris - Telemetry Report END ---";
 
 
double humidity = double.Parse(
    Regex.Match(report, @"^Humidity:\s+(\d+(.\d+)?)\s+%", RegexOptions.Multiline).Groups[1].Value,
    CultureInfo.InvariantCulture
);
double temperature = double.Parse(
    Regex.Match(report, @"^Temperature:\s+(\d+(.\d+)?)\s+\*C", RegexOptions.Multiline).Groups[1].Value,
    CultureInfo.InvariantCulture
);
int pressure = int.Parse(
    Regex.Match(report, @"^Pressure:\s+(\d+(.\d+)?)\s+mm\.rt\.st", RegexOptions.Multiline).Groups[1].Value,
    CultureInfo.InvariantCulture
);
int alt = int.Parse(
    Regex.Match(report, @"^ALT:\s+(\d+(.\d+)?)\s+metres", RegexOptions.Multiline).Groups[1].Value,
    CultureInfo.InvariantCulture
);
1
0 / 0 / 0
Регистрация: 02.03.2018
Сообщений: 73
23.03.2019, 15:33  [ТС]
Да,но вот преобразование выполнить почему-то не получается,выводит только - и больше ничего,из офф документации узнал что Arduino отправляет данные в COM порт через ASCI2,но увы и для теста решил использовать ваш код,но он к сожалению не работает при его запуске пишет что Входная строка имела неверный формат,и тут я тоже не знаю что делать,ибо с регулярками и регексами кроме как в pawn нигде не работал,да и там мой опыт с ними был около 5-6 строк
Миниатюры
Парсинг данных полученных от Arduino через виртуальный COM порт  
0
0 / 0 / 0
Регистрация: 02.03.2018
Сообщений: 73
23.03.2019, 15:59  [ТС]
С получением и конвертом строки разобрался,а вот с регулярками не получилось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.03.2019, 15:59
Помогаю со студенческими работами здесь

[Arduino] Как правильно распознать команду через COM- порт
Не могу правильно интерпретировать полученое на Ардуино. На нем идет считывание и считаное = отправить назад. Все он отправляет назад...

Парсинг множества документов PDF с сохранением полученных данных в БД
Всем доброго времени суток. Ситуация такая, что у меня есть куча PDF файлов из которых нужно вытащить данные в мою базу данных, все файлы...

Парсинг файлов формата IFC и построение дерева TreeView на основе полученных данных
Всем здрасти! У меня ужасное положение. Мне нужно сдавать проект. Проект парсит файлы формата IFC и строит тривьюху по распарсенным...

COM-порт прием данных и парсинг
Всем привет. Прикупил arduino и не могу разобраться с COM портом. Пытаюсь принять данные отправленные из программы написанной на C#. ...

Асинхронная функция которая считывает всего несколько раз данные с микроконтроллера (Arduino) через СОМ порт
Такая проблема: Пишу небольшой проектик (задание:визуализация на диплом). Схема работы должна быть такой: Считываем с другого компа данные,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru