nRF24L01+ через USB

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

artko
Сообщения: 51
Зарегистрирован: Пн дек 10, 2012 12:17 am
Благодарил (а): 2 раза
Поблагодарили: 4 раза

Re: nRF24L01+ через USB

Сообщение artko » Пт дек 27, 2013 12:38 pm

MaksMS82 писал(а):Аппаратно поддерживается 6 "труб" -насколько я понял для этих 6 "труб" в радиомодуле имеют свои буфера обмена .Более 6 соединений нельзя организовать идеально,чтобы данные не потерялись.
Можно на одну трубу посадить не одно,а например два устройства,но надежность думаю будет не очень хорошая..

Есть идея,что 2 клиента могут иметь одинаковые настройки,но например в структуре данных у них будут разные идентификаторы,то работать это будет,если клиенты будут связываться с сервером в разное время ,например раз в минуту..
Возможно такой эксперимент позже проведу.

Хотя даже при обычном режиме работы с 5 клиентами,если клиенты в цикле постоянно долбят сервер данными,то сервер начинает терять принятые данные и теряются данные для отправки,если клиентов больше одного..
Немножко не так. У модуля nRF24L01 есть буфер приема и передачи на три пакета максимальной длины (по 32 байта).
И есть возможность настроить в режиме приема аппаратную фильтрацию принимаемых пакетов с автоматическим подтверждением.
Вот этих каналов приема с фильтрацией - 6 штук.

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

Если описаная в данной теме клиент-серверная архитектура много датчиков на один сервер - то никто не мешает десяткам датчиков отсылать пакеты на один конкретный адрес сервера - все будет нормально. Да и у сервера не возникнет проблем, все равно адрес кому должен быть выставлен непосредственно перед передачей.

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

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

В результате у меня все устройства вообще имеют один адрес, на который же и отсылают данные. Дальше каждый приемник, который собрал пакет без потерь - разворачивает его у себя и заглядывает в адресные заголовки Ethernet кадра.

Протип - вполне справляется с пингами непрерывными на два клиента, не теряя пакетов. Вчера сработал и тестовый запрос напрямую на majordomo стандартным http-get со стороны датчика. Никакого дополнительного софта :)
MaksMS82
Сообщения: 422
Зарегистрирован: Ср сен 05, 2012 7:30 am
Откуда: Киров
Благодарил (а): 0
Поблагодарили: 70 раз
Контактная информация:

Re: nRF24L01+ через USB

Сообщение MaksMS82 » Пт дек 27, 2013 8:23 pm

artko писал(а):
Протип - вполне справляется с пингами непрерывными на два клиента, не теряя пакетов. Вчера сработал и тестовый запрос напрямую на majordomo стандартным http-get со стороны датчика. Никакого дополнительного софта :)
А какая схема прототипа ? ethernet шилд ? Написано на си ? или ардуино ?

То ,что я взял библиотеку RF24 за основу подразумевает использование одного канала на передачу с USB-nRF24L01 преобразователя,а на прием используется другие 5 адресов.В микроконтроллере USB устройства хранятся массивы данных как принятых ,так и отправленных данных - что дает возможность надежнее работать всей радиосети не завися от компьютера.Соответственно,грубо говоря массивы данных занимают памяти до 320 байт(32*2*5),что вроде ещё не много (для м/к с озу 1024байта) и можно ещё хранить столько же клиентов,но насколько будет корректно работать программный USB??..Необходимо тестировать..

Плюсом использования библиотеки RF24 является её распространенность и соответственно про её полно инструкций и примеров в интернете.
artko
Сообщения: 51
Зарегистрирован: Пн дек 10, 2012 12:17 am
Благодарил (а): 2 раза
Поблагодарили: 4 раза

Re: nRF24L01+ через USB

Сообщение artko » Пт дек 27, 2013 10:04 pm

MaksMS82 писал(а): А какая схема прототипа ? ethernet шилд ? Написано на си ? или ардуино ?

То ,что я взял библиотеку RF24 за основу подразумевает использование одного канала на передачу с USB-nRF24L01 преобразователя,а на прием используется другие 5 адресов.В микроконтроллере USB устройства хранятся массивы данных как принятых ,так и отправленных данных - что дает возможность надежнее работать всей радиосети не завися от компьютера.Соответственно,грубо говоря массивы данных занимают памяти до 320 байт(32*2*5),что вроде ещё не много (для м/к с озу 1024байта) и можно ещё хранить столько же клиентов,но насколько будет корректно работать программный USB??..Необходимо тестировать..

Плюсом использования библиотеки RF24 является её распространенность и соответственно про её полно инструкций и примеров в интернете.
увы, чистый си. впрочем, для связи используется массовая и дешевая enc28j60(есть в массе шилдов), код универсален - сейчас проверил на PIC24, STM8, STM32DISCOVERY
(последние два вместе с отладчиками и программаторами стоят не дороже ардуин). схема - stm32vldiscovery например и к ней на проводочках модули enc + nrf
на ардуину не знаю как переносить - библиотеку для управления nrf24 писал сам. впрочем,главная проблема - понятия не имею, как писать под ардуино вообще :)

стресс тест показал что при двух клиентах и одновременно 16-ти запросах на соединения (пинги :) ) потери пакетов составили порядка одного процента.

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

а программный усб - у меня есть опасения, что использовать его для достаточно нагруженого устройства врядли нормально выйдет.
MaksMS82
Сообщения: 422
Зарегистрирован: Ср сен 05, 2012 7:30 am
Откуда: Киров
Благодарил (а): 0
Поблагодарили: 70 раз
Контактная информация:

Re: nRF24L01+ через USB

Сообщение MaksMS82 » Сб дек 28, 2013 7:40 am

Под ардуино не обязательно писать в среде Ардуино ИДЕ ,можно и на чистом си в avr-gcc или winavr.
rf24 библиотеку думаю можно использовать и на варианте всего с 2 каналами: исходящий и входящий.Сегодня попробую это протестировать на USB-переходнике,тогда ограничение на 5 клиентов будет снято и будет ограничено только памятью для буферов в озу м/к переходника.
буферы обмена в переходники нужны,так как v-usb не работает в реальном времени -все таки это программная реализация.Ядро работы с nRF24L01 заполняет буферы входящими данными ,а компьютер их запрашивает..

На счет загруженности - если данные не передавать с клиентов интенсивно в цикле без пауз,то данные будут теряться,а если даже с периодом в 200 миллисекунд,то работает вполне.
artko
Сообщения: 51
Зарегистрирован: Пн дек 10, 2012 12:17 am
Благодарил (а): 2 раза
Поблагодарили: 4 раза

Re: nRF24L01+ через USB

Сообщение artko » Сб дек 28, 2013 1:46 pm

MaksMS82 писал(а):Под ардуино не обязательно писать в среде Ардуино ИДЕ ,можно и на чистом си в avr-gcc или winavr.
я знаю, но как-то атмел в свое время сразу отбросил из-за отсутствия нормальной отладки, а сейчас их чипы и вообще ничего интересного не представляют, как на меня.
MaksMS82 писал(а):rf24 библиотеку думаю можно использовать и на варианте всего с 2 каналами: исходящий и входящий.Сегодня попробую это протестировать на USB-переходнике,тогда ограничение на 5 клиентов будет снято и будет ограничено только памятью для буферов в озу м/к переходника.
здесь другой вопрос - там настраивается только с режимом автоматического подтверждения модулями? встречал жалобы, что когда более одного клиента с одним адресом на приемнике - бывают вроде лажи - все они пытаются подтвердить передатчику прием пакета и коллизия...
MaksMS82 писал(а): буферы обмена в переходники нужны,так как v-usb не работает в реальном времени -все таки это программная реализация.Ядро работы с nRF24L01 заполняет буферы входящими данными ,а компьютер их запрашивает.

На счет загруженности - если данные не передавать с клиентов интенсивно в цикле без пауз,то данные будут теряться,а если даже с периодом в 200 миллисекунд,то работает вполне.
ну и достаточно, имхо. главное чтобы не пришло пачкой больше трех радиопакетов, пока усб обслуживается.
MaksMS82
Сообщения: 422
Зарегистрирован: Ср сен 05, 2012 7:30 am
Откуда: Киров
Благодарил (а): 0
Поблагодарили: 70 раз
Контактная информация:

Re: nRF24L01+ через USB

Сообщение MaksMS82 » Сб дек 28, 2013 2:02 pm

Ага ,попробовал сейчас на одном адресе посадить 2 клиента - работает ! усб приемник принимает пакет ,смотрит первый байт,в котором находится id и копирует пакет в массив буфера,соответствующий клиенту .Получается ,что снято ограничение на 5 клиентов и сейчас программно ограничивается в прошивке усб передатчика и размером ОЗУ и где-то будет составлять 20 клиентов при пакете передачи 32 байта и 32 клиента с размером пакета передачи соответственно 20 байт.
С компьютера выключаю/включаю светодиод на клиентах,реакция не немедленная,т.к. установлен опрос 200 миллисекунд,но вполне нормально отрабатывает.Если отправлять данные на клиенты не нужно,то опрос можно установить ещё больше,чтобы не засорять эфир.
artko
Сообщения: 51
Зарегистрирован: Пн дек 10, 2012 12:17 am
Благодарил (а): 2 раза
Поблагодарили: 4 раза

Re: nRF24L01+ через USB

Сообщение artko » Сб дек 28, 2013 2:24 pm

т.е. в пакет данных добавлен еще свой ид клиента?
MaksMS82
Сообщения: 422
Зарегистрирован: Ср сен 05, 2012 7:30 am
Откуда: Киров
Благодарил (а): 0
Поблагодарили: 70 раз
Контактная информация:

Re: nRF24L01+ через USB

Сообщение MaksMS82 » Сб дек 28, 2013 2:51 pm

artko писал(а):т.е. в пакет данных добавлен еще свой ид клиента?
Ну да , надо же как-то идентифицировать клиента :)
artko
Сообщения: 51
Зарегистрирован: Пн дек 10, 2012 12:17 am
Благодарил (а): 2 раза
Поблагодарили: 4 раза

Re: nRF24L01+ через USB

Сообщение artko » Пн дек 30, 2013 8:34 pm

Вот идея для датчика - монитор общедомового потребления энергии.
Выглядеть может в итоге например так:
Изображение

Повесил на счетчик датчик импульсов с небольшой расчетной частью и каждые 5 секунд сейчас отсылает данные на сервер, текущее потребление и сколько импульсов насчитали.

В консоль приемника (можно и напрямую в мажордомо записывать, но пока так сделал) пишет отладочную инфу.
Received a broadcast from 192.168.1.231:44778
30.12.2013 19:32:29
Текущая нагрузка на ввод в дом : 418 Вт
С момент включения израсходовано 3 КВт*час энергии
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: nRF24L01+ через USB

Сообщение ser009 » Чт янв 02, 2014 10:43 am

Рекомендую обратить внимание на библиотеку RF24Network.
плюсами библиотеки:
- количество передатчиков до 250 (ну это больше чем 6)
- возможность ретрансляции данных через друих клиентов при отсутствии прямой связи

рекомендую :)
Ответить