Jump to content

    
Sign in to follow this  
amiller

Беспроводная передача данных

Recommended Posts

Приветствую!

Возникла задача сделать канал передачи данных между основным устройством на микроконтроллере и пультом управления (тоже на микроконтроллере).

Сначала я сориентировался на блютуз модули типа НС-05 и НС-06.

Закупил несколько штук, удалось настроить канал связи достаточно легко.

Тестировал в двух вариантах:

1. COM-порт блютуза от ноутбука - НС-05 (slave) - UART микроконтроллера.

2. USB-UART - НС-05 (master) - НС-05 (slave) - UART микроконтроллера.

В принципе связь есть в обоих случаях, но с проблемами.

У меня протокол полудуплексный, спроектирован под RS485: запрос - ожидание ответа - если таймаут, то новая попытка.

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

Конечно можно переделать ПО для связи, сделать отдельные очереди на передачу и прием с разбором и распределением ответов, хотя это не избавляет от задержек реакции на единичный запрос.

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

Может есть варианты перепрошивки модулей. Кстати для их прошивки я находил только реализацию программаторов на базе LPT. Может кто видел решение посовременнее?

Или предложите совсем другое решение. Цель в общем то понятна из названия.

Edited by amiller

Share this post


Link to post
Share on other sites
Цель в общем то понятна из названия.

1)Название абсолютно не отражает НИЧЕГО.

2)Все радиоитерфейсы ПАКЕТНЫЕ а не байтовые в отличие он UART.

3)Так что либо как то подстраиваться под правила формирования пакетов такими модулями, либо писать свой софт со своими правилами формирования пакетов.

Но фомировать пакеты по любому придется.

4) Все. Чудес не будет. Никто за Вас устраивающую Вас упаковку Вашего неведомого байтового протокола во фреймы эфирного не сделает.

Share this post


Link to post
Share on other sites
Приветствую!

Возникла задача сделать канал передачи данных между основным устройством на микроконтроллере и пультом управления (тоже на микроконтроллере).

Сначала я сориентировался на блютуз модули типа НС-05 и НС-06.

Закупил несколько штук, удалось настроить канал связи достаточно легко.

Тестировал в двух вариантах:

1. COM-порт блютуза от ноутбука - НС-05 (slave) - UART микроконтроллера.

2. USB-UART - НС-05 (master) - НС-05 (slave) - UART микроконтроллера.

В принципе связь есть в обоих случаях, но с проблемами.

У меня протокол полудуплексный, спроектирован под RS485: запрос - ожидание ответа - если таймаут, то новая попытка.

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

Конечно можно переделать ПО для связи, сделать отдельные очереди на передачу и прием с разбором и распределением ответов, хотя это не избавляет от задержек реакции на единичный запрос.

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

Может есть варианты перепрошивки модулей. Кстати для их прошивки я находил только реализацию программаторов на базе LPT. Может кто видел решение посовременнее?

Или предложите совсем другое решение. Цель в общем то понятна из названия.

Пере прошивать можно.Для реализации вашей задачи нужно создавать прошивку, но слава богу не с нуля.Качайте Bluelab 4.1, в месте с ним будет доступны примеры, интерактивная справка по структурам, функциям, перечислениям и.д. , через браузер. Там же и документация по программированию. По всей видимости на BC417 доступно только программирование на СИ, так как во всей документации я не нашел информации по MCU XAP, не смог найти и по ассемблеру, накопал только по XAP4,5,6, все что ниже как будто засекретили.В блюкор чипах уже с завода предустановлена прошивка.Программист имеет возможность создавать программу, которые взаимодействует с Виртуальной машиной и работает с уже встроенной прошивкой.Как я понял там несколько кольцевых буферов, все тонкости не знаю, сам учусь, в качестве любителя, но думаю размер буфера настроить можно.Отлаживать и запускать можно прям на Ваших платках, через SPI LPT.USB SPI для SCR bluecore продают китайцы на али.Есть решение на FTDI чипе, но у меня не вышло, так как я самостоятельно сделал платку, а чип оказался поддельный, мне кажется проще купить готовый USB to UART с FTDIRL.

Edited by bassizlink

Share this post


Link to post
Share on other sites

1. БеСпроводная

2. Китайские модули HC05 ужасно плохо документированы (по состоянию на 5 лет назад, когда я рассматривал их применение). Было на что-то более солидное описание, где расписывались эфирные пакеты и эфирные таймауты. В первом случае (если не пользоваться механизмом таймаутов) вам просто надо забить любым мусором свой пакет от конца информационной части до конца эфирного пакета. Во втором случае надо попробовать настроить таймауты блютус-модуля, чтобы он выдавал в эфир незаполненный буфер. В любом из этих случаев в эфире будет присутствовать мусорная часть пакета. В третьем случае можно попробовать подогнать длину эфирного пакета под Вашу длину (если протокол и система команд модуля позволяют менять длину эфирного пакета)

Share this post


Link to post
Share on other sites
1. БеСпроводная

2. Китайские модули HC05 ужасно плохо документированы (по состоянию на 5 лет назад, когда я рассматривал их применение). Было на что-то более солидное описание, где расписывались эфирные пакеты и эфирные таймауты. В первом случае (если не пользоваться механизмом таймаутов) вам просто надо забить любым мусором свой пакет от конца информационной части до конца эфирного пакета. Во втором случае надо попробовать настроить таймауты блютус-модуля, чтобы он выдавал в эфир незаполненный буфер. В любом из этих случаев в эфире будет присутствовать мусорная часть пакета. В третьем случае можно попробовать подогнать длину эфирного пакета под Вашу длину (если протокол и система команд модуля позволяют менять длину эфирного пакета)

Вся передача внутри микроконтроллера основана на потоках.То есть например источником выступает UART, а приемником RFComm, два пути обмена данными, это прямое соединение, например что то в роде ConnectStreame(Источник,Приемник). В этом случае происходит не контролируемая передача, но при этом есть функции которые конфигурируют потоки, там вроде как можно указывать максимальную длину пакета и что то там еще.Я честно говоря совсем в другой области работаю, поэтому из за ненадобностью я плохо ориентируюсь в тонкостях.Есть еще и контролируемая передача, в которой можно проверять количество байт в источнике(я так понимаю это кольцевой буфер обмена) читать , что то делать с ними, а потом отправлять их в приемник или не отправлять, причем задача получает сообщения типа MORE_DATA,если в источник поступили байты и соответственно обработчик сообщений может выполнить обработку данных из него и дальнейшую передачу. Управление происходит по имени сообщения,которое передается в качестве аргумента обработчику.

Edited by bassizlink

Share this post


Link to post
Share on other sites
2. Китайские модули HC05 ужасно плохо документированы (по состоянию на 5 лет назад, когда я рассматривал их применение). Было на что-то более солидное описание, где расписывались эфирные пакеты и эфирные таймауты. В первом случае (если не пользоваться механизмом таймаутов) вам просто надо забить любым мусором свой пакет от конца информационной части до конца эфирного пакета. Во втором случае надо попробовать настроить таймауты блютус-модуля, чтобы он выдавал в эфир незаполненный буфер. В любом из этих случаев в эфире будет присутствовать мусорная часть пакета. В третьем случае можно попробовать подогнать длину эфирного пакета под Вашу длину (если протокол и система команд модуля позволяют менять длину эфирного пакета)

С этим согласен. И интерфейс управления через AT-команды убогий. Забивать буфер мусором, при этом не зная его реального размера, тоже не очень эффективно. я надеялся, что можно простыми средствами изменить настройки модуля, но похоже не судьба. Видимо придётся переходить в реализации протокола от уровня отдельных сообщений к уровню обработки потоков данных. При этом заполнение буферов произойдёт автоматически.

 

 

Пере прошивать можно.Для реализации вашей задачи нужно создавать прошивку, но слава богу не с нуля.Качайте Bluelab 4.1, в месте с ним будет доступны примеры, интерактивная справка по структурам, функциям, перечислениям и.д. , через браузер. Там же и документация по программированию. По всей видимости на BC417 доступно только программирование на СИ, так как во всей документации я не нашел информации по MCU XAP, не смог найти и по ассемблеру, накопал только по XAP4,5,6, все что ниже как будто засекретили.В блюкор чипах уже с завода предустановлена прошивка.Программист имеет возможность создавать программу, которые взаимодействует с Виртуальной машиной и работает с уже встроенной прошивкой.Как я понял там несколько кольцевых буферов, все тонкости не знаю, сам учусь, в качестве любителя, но думаю размер буфера настроить можно.Отлаживать и запускать можно прям на Ваших платках, через SPI LPT.USB SPI для SCR bluecore продают китайцы на али.Есть решение на FTDI чипе, но у меня не вышло, так как я самостоятельно сделал платку, а чип оказался поддельный, мне кажется проще купить готовый USB to UART с FTDIRL.

Путь погружения в программирование блютуз модулей выглядит слишком затратным. Часть моего вопроса была ещё в том, что может быть известны другие работоспособные варианты реализации беспроводного канала связи.

Желателен конечно блютуз (из-за распространенности), но не исключены и другие технологии.

Или же, как пишет уважаемый zltigo "2)Все радиоитерфейсы ПАКЕТНЫЕ а не байтовые в отличие он UART." Следовательно при беспроводной передаче данных следует просто это учитывать.

 

Share this post


Link to post
Share on other sites
С этим согласен. И интерфейс управления через AT-команды убогий. Забивать буфер мусором, при этом не зная его реального размера, тоже не очень эффективно. я надеялся, что можно простыми средствами изменить настройки модуля, но похоже не судьба. Видимо придётся переходить в реализации протокола от уровня отдельных сообщений к уровню обработки потоков данных. При этом заполнение буферов произойдёт автоматически.

 

 

 

Путь погружения в программирование блютуз модулей выглядит слишком затратным. Часть моего вопроса была ещё в том, что может быть известны другие работоспособные варианты реализации беспроводного канала связи.

Желателен конечно блютуз (из-за распространенности), но не исключены и другие технологии.

Или же, как пишет уважаемый zltigo "2)Все радиоитерфейсы ПАКЕТНЫЕ а не байтовые в отличие он UART." Следовательно при беспроводной передаче данных следует просто это учитывать.

Думаю, что говорить о платках HC-05,06, как о китайских не совсем правильно на мой взгляд.По сути из китайского там только обвязка, текстолит и не большой кусочек кода микропрограммы.Посмотрел на дорогие модули bluegiga, там тот же чип от SCR, только обвязка другая и экран металлический,разочаровался.На самом деле не так страшен черт как его малюют и запрограммировать этот чип не так сложно.Весь процесс заключается в том, что нужно взять пример из Bluelab4.1(в инете пошарьте найдете), с которым платка будет полностью работать как готовое устройства реализуя профиль SPP, только не будет ни одной AT команды.Если сравнить HC-05,06 и другие например блюгига, то базовая прошивка там везде одинаковая, это предустановленная заводом изготовителя чипа и всем известная под именем linvor.Процесс программирования сводится к тому,что просто создаются свои AT команды, которые изменяют PSkey ключи из хранилища.Но такая микропрограмма необходима не во всех случаях.Можно абсолютно легально скачать Bluesuite с сайта SCR и с помощью PSTool изменить нужные ключи, которые будут заставлять работать чип так как Вам нужно, если конечно нет необходимости в динамическом изменении поведения работы чипа.В этой же программе есть кнопка, которая предоставляет описание на ключ.

Edited by bassizlink

Share this post


Link to post
Share on other sites
Путь погружения в программирование блютуз модулей выглядит слишком затратным. Часть моего вопроса была ещё в том, что может быть известны другие работоспособные варианты реализации беспроводного канала связи.

Желателен конечно блютуз (из-за распространенности), но не исключены и другие технологии.

Так и их вагон + маленькая тележка.

При отсутствии других требований, можно выбрать то, что попроще в реализации и предсказуемо себя ведёт: например nRF24L01 - описание простое, подробное.

BT я бы выбирал в последнюю очередь, если только нужна связь устройство - комп(телефон) без доп. устройств на стороне компа(тела) и если в этом случае нельзя почему-то использовать WiFi.

И работа с ними на МК гораздо проще чем уродским интерфейсом АТ-команд и прошлого века терминалов и пользователей.

Не понимаю - почему так народ на этом BT зациклен??? Если нужна радио-связь, то и следует выбирать радио-связь, а не левую надстройку над ней.

Share this post


Link to post
Share on other sites
Приветствую!

Возникла задача сделать канал передачи данных между основным устройством на микроконтроллере и пультом управления (тоже на микроконтроллере).

Сначала я сориентировался на блютуз модули типа НС-05 и НС-06.

Закупил несколько штук, удалось настроить канал связи достаточно легко.

Тестировал в двух вариантах:

1. COM-порт блютуза от ноутбука - НС-05 (slave) - UART микроконтроллера.

2. USB-UART - НС-05 (master) - НС-05 (slave) - UART микроконтроллера.

В принципе связь есть в обоих случаях, но с проблемами.

У меня протокол полудуплексный, спроектирован под RS485: запрос - ожидание ответа - если таймаут, то новая попытка.

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

Конечно можно переделать ПО для связи, сделать отдельные очереди на передачу и прием с разбором и распределением ответов, хотя это не избавляет от задержек реакции на единичный запрос.

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

Может есть варианты перепрошивки модулей. Кстати для их прошивки я находил только реализацию программаторов на базе LPT. Может кто видел решение посовременнее?

Или предложите совсем другое решение. Цель в общем то понятна из названия.

Я тут учусь и пишу прошивку на эти модули, правда пока только Slave режим, хочу сделать возможность конфигурировать устройство по воздуху, например менять параметры UART, включать аппаратное управление потоками, менять имя, пинкод, изменять размер кадра при передачи по UART(7 бит, но пока сомневаюсь, что получится ).Вы хотите, чтобы пакет не превышал определенного размера?Могу попробовать реализовать это в своей прошивки, выложить на форуме.

Edited by bassizlink

Share this post


Link to post
Share on other sites
Так и их вагон + маленькая тележка.

При отсутствии других требований, можно выбрать то, что попроще в реализации и предсказуемо себя ведёт: например nRF24L01 - описание простое, подробное.

BT я бы выбирал в последнюю очередь, если только нужна связь устройство - комп(телефон) без доп. устройств на стороне компа(тела) и если в этом случае нельзя почему-то использовать WiFi.

И работа с ними на МК гораздо проще чем уродским интерфейсом АТ-команд и прошлого века терминалов и пользователей.

Не понимаю - почему так народ на этом BT зациклен??? Если нужна радио-связь, то и следует выбирать радио-связь, а не левую надстройку над ней.

nRF24L01 посмотрю, спасибо.

Почему блютуз, - я для себя так ставил задачу:

У меня в производстве достаточно много разных устройств с управлением по последовательному интерфейсу.

Хотелось иметь в качестве опции универсальное беспроводное решение.

Чтобы можно было управлять с ноутбука, с телефона, и с собственного микроконтроллерного пульта, поставив туда беспроводной адаптер.

Поэтому и выбрал такое предварительное решение. А сейчас хочу или утвердится в этом решении или сменить на другое.

 

Share this post


Link to post
Share on other sites
nRF24L01 посмотрю, спасибо.

Почему блютуз, - я для себя так ставил задачу:

У меня в производстве достаточно много разных устройств с управлением по последовательному интерфейсу.

Хотелось иметь в качестве опции универсальное беспроводное решение.

Чтобы можно было управлять с ноутбука, с телефона, и с собственного микроконтроллерного пульта, поставив туда беспроводной адаптер.

Поэтому и выбрал такое предварительное решение. А сейчас хочу или утвердится в этом решении или сменить на другое.

Почему бы вам просто не включить аппаратное управление потоками например изменив ключ "UART configuration when under VM control"(PSKEY_UART_CONFIG_USR), в PSTool , на 0x08a8 , в ваших HC05,06, проделать что то похожее на других микроконтроллерах, добавить пару лишних проводов и гарантированная передача данных без переполнения буферов готова.

 

Если у вас нет LPT, то купите себе вот этот адаптер https://www.aliexpress.com/item-img/Wavesha...2728399302.html

Поставьте себе вот этот драйвер https://github.com/lorf/csr-spi-ftdi, там и распиновка есть.

Edited by bassizlink

Share this post


Link to post
Share on other sites

 

Программно управление потоком можно задействовать так:

 

PioSetRts (True) //устанавливает лог 1 на контакте RTS, это говорит о готовности принимать данные, в противном случае виртуальная машина автоматически меняет лог на 0.

 

PioGetCts () // активизирует Cts на прием, Виртуальная машина начинает реагировать на входящий сигнал.

 

 

Share this post


Link to post
Share on other sites
Почему бы вам просто не включить аппаратное управление потоками например изменив ключ "UART configuration when under VM control"(PSKEY_UART_CONFIG_USR), в PSTool , на 0x08a8 , в ваших HC05,06, проделать что то похожее на других микроконтроллерах, добавить пару лишних проводов и гарантированная передача данных без переполнения буферов готова.

 

Если у вас нет LPT, то купите себе вот этот адаптер https://www.aliexpress.com/item-img/Wavesha...2728399302.html

Поставьте себе вот этот драйвер https://github.com/lorf/csr-spi-ftdi, там и распиновка есть.

Если Вы говорите о добавлении пары лишних проводков, то речь идёт о интерфейсе между блютуз модулем, например НС-05, и моим микроконтроллером.

Так тут проблем никаких нет, я работаю на скорости всего лишь 115200 и никаких переполнений буферов не наблюдается.

Речь идёт о том, что модуль накапливает данные, которые я посылаю, и потом их достаточно большим пакетом передает по радиоканалу.

Поможет ли аппаратное управление потоком между НС-05 и микроконтроллером упорядочить/изменить передачу пакетов по радиоканалу? Что-то сомневаюсь.

LPT у меня есть, при желании найду на складе. Только я с большим сомнением отношусь к технологиям, которые в 2017 году имеют единственную возможность программирования через интерфейс 30-летней давности.

Share this post


Link to post
Share on other sites
Если Вы говорите о добавлении пары лишних проводков, то речь идёт о интерфейсе между блютуз модулем, например НС-05, и моим микроконтроллером.

Так тут проблем никаких нет, я работаю на скорости всего лишь 115200 и никаких переполнений буферов не наблюдается.

Речь идёт о том, что модуль накапливает данные, которые я посылаю, и потом их достаточно большим пакетом передает по радиоканалу.

Поможет ли аппаратное управление потоком между НС-05 и микроконтроллером упорядочить/изменить передачу пакетов по радиоканалу? Что-то сомневаюсь.

LPT у меня есть, при желании найду на складе. Только я с большим сомнением отношусь к технологиям, которые в 2017 году имеют единственную возможность программирования через интерфейс 30-летней давности.

Согласен, что не поможет.Есть современное решение, если вы имели введу LPT https://ru.aliexpress.com/item/CSR-Bluetoot...7e-b22d526db131

Share this post


Link to post
Share on other sites
Согласен, что не поможет.Есть современное решение, если вы имели введу LPT https://ru.aliexpress.com/item/CSR-Bluetoot...7e-b22d526db131

Я примерно про это и спрашивал. На аппаратном уровне это же простой преобразователь USB-SPI, таких полно на рынке. Но можно ли с его помощью программировать блютуз модули? Поддерживает ли ПО такие адаптеры?

Ведь недаром в интернете предлагаются только варианты с LPT, резисторами и проводочками...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this