Сеть из Nrf24l01+
- Войдите на сайт для отправки комментариев
Всем добрый день.
В наличии имеется 11 устройств: arduino micro + Nrf24l01 mini.
Используется библиотека NRF24.
Требуется реализовать сеть типа звезда.
Как реализовано сейчас: все устройства настроины на одни частоты. Т.е передатчик флудит всем устройствам, а те уже смотрят на начало пакета и если они видят свой id, то выполняют какие то действия. А так они должны постоянно, с какой-то периодичностью отсылать данные, с подключенных на них датчиков, центральному узлу. Далее центральный узел пишет это все serial, а программка arduino_gw направляет их управляющему php скрипту, который в свою очередь записывает их в базу mysql(arduino_gw замена Ethernet Shield).
Все бы хорошо, но проблемы начинаются когда переодичность отправки данных от устройств составляет одинаковое время: 3 сек, 1 мин, 5 мин и т.д. Начинают пробиваться только некоторые устройства.
Как можно этого избежать? У кого есть какие мысли?
11 устройств только на данный момент (пока спаяно), сейчас собирается еще 10.
Вот кстати вид узла:
И вид всего в сборе:
Как реализовано сейчас: все устройства настроины на одни частоты. Т.е передатчик флудит всем устройствам, а те уже смотрят на начало пакета и если они видят свой id, то выполняют какие то действия.
Тоесть им нельзя назначить децствие типа " нука вышли мне инфу че там у тебя"?
Можно. Все описывается в пакете от передатчика: id устройства_код команды. А там уже оконечное устройство понимает что от него хотят.
Так понимаю вы хотите предложить чтобы центральное устройство последовательно опрашивало все узлы? Я правильно понимаю?
Сколько всего будет клиентов ? 21 ??? У меня вполне получалось 2-3 клиента таким способом запустить и работало стабильно.
Можно разделить на группы и каждой группе присвоить один физический адрес. Т.е. на 4-5 клиентов будет один адрес -соотвественно один буфер радиомодуля.
И судя по фото вы подключаете питание на все одновременно - по этому ,если запрограммировали везде 5 минут ,то все начинают долбить эфир одновременно. На практике же, когда модули будут стоять на своих местах,то питание будет отдельно и синхронный запуск будет почти исключен. Можно уменьшить вероятность одновременного запуска поставив в setup случайную паузу.
Ещё возможны ошибки в работе из-за такой кучи одновременно подключенных модулей к одному источнику питания - необходимо ставить ёмкости..
Источник питания естевственно у всех будет свой. Это просто стенд для работы.
Про рассинхрон начала работы на практике согласен. Но если отключается электричество во всей квартире, то они в итоге стартуют в одно время, при его появлении. Про случайную задержку при старте- наверно вариант: надо пробывать!
А про одновремменую работу на одних адресах, то и с 10 шт. все работает хорошо.
У вас сейчас нет гарантированной доставки сообщения от центрального узла к устройству и наоборот.
Задумайтесь над такой вещью
В инструкции к nrf24 указано, что модуль обеспечивает контроль доставки сообщения приемнику. При чем этот функционал реализован в библиотеке rf24 (я предпологаю что используете вы именно ее). Общая суть метода - передадчик отправил, приемник принял и отправил подверждение. Если передатчик подверждение не получил, то он отправляет данные повторно. (количество повторов и интервал задается командой setRetries (uint8_t delay, uint8_t count), отключение этого функционала команда setAutoAck (bool enable))
А тепер внимание...
все модули у вас слушают одну трубу. Передадчик отправляет на эту трубу сообщение. модули это сообщение принимают и отправляют автоответ. передатчик ловит автоответ от случайного приемника и считает что сообщение отправлено. Однако нет гарантии что сообщение пришло именно тому модулю, которому оно предназначалось... Визуально все работает, но работает но не правильно - теряются сообщения... :(
Для более детального понимания, хотелось бы понять \ увидеть
1) как настроены трубы на передатчике \ приемнике
2) когда отвечают узлы ? когда центральное устройство их спросило. Или просто по времени.
3) когда у вас возникают проблемы ? когда узлы опрашиваются или когда узлы просто шлют в эфир данные по времени.
Схема работы с одной трубой на множеством узлов с разделением по ID узлов нормально работает если устройства с разными ID инициируют соединение. И при этом соседнии узлы не слушают трубу центрального узла...
Мдааа. Давайте лучше задумаемся над другой вещью.
21 модуль говорит нам о чем?
Что либо ТС не умеет думать и обьединять задачи, либо у него 21 комната.
И если с первым вариантом остаеться только соболезновать родственикам, то со вторым гораздо забавнее.
Даже если предположить что все 21 комната равноудалены от центрального хола, то у меня есть большие сомнения на тему что центральный модуль будет ввобще кто нибуть слышать, ибо дальность данных модулей без усилителя примерно 2 стены и дальше нифига.
Печалько в общем.
Ну хочет NEGr иметь 21 модуль и не обьединять задачи, его право. Может он универсальные ноды делает. Вопрос звучал не как сделать меьше датчиков, а как 21 штуку заставить правильно работать.
Дальность у них действительно не очень высокая, однако механизм гарантированой доставки в nrf24 эту дальность немного повышает. Действительно стоит подумать об использовании модулей с усилителями или использовании ретрансляторов.
21 не предел. каждая розетка в комнате, с функцией счетчика нагрузки(в комнате окло 6), управление освещением, универсальный ик пульт и т.д
Действительно стоит подумать об использовании модулей с усилителями или использовании ретрансляторов.
Про ретрансляторы тоже думал. Но хочу сначала проверить как будет бить в квартире без них.
У вас сейчас нет гарантированной доставки сообщения от центрального узла к устройству и наоборот.
Задумайтесь над такой вещью
В инструкции к nrf24 указано, что модуль обеспечивает контроль доставки сообщения приемнику. При чем этот функционал реализован в библиотеке rf24 (я предпологаю что используете вы именно ее). Общая суть метода - передадчик отправил, приемник принял и отправил подверждение. Если передатчик подверждение не получил, то он отправляет данные повторно. (количество повторов и интервал задается командой setRetries (uint8_t delay, uint8_t count), отключение этого функционала команда setAutoAck (bool enable))
А тепер внимание...
все модули у вас слушают одну трубу. Передадчик отправляет на эту трубу сообщение. модули это сообщение принимают и отправляют автоответ. передатчик ловит автоответ от случайного приемника и считает что сообщение отправлено. Однако нет гарантии что сообщение пришло именно тому модулю, которому оно предназначалось... Визуально все работает, но работает но не правильно - теряются сообщения... :(
Для более детального понимания, хотелось бы понять \ увидеть
1) как настроены трубы на передатчике \ приемнике
2) когда отвечают узлы ? когда центральное устройство их спросило. Или просто по времени.
3) когда у вас возникают проблемы ? когда узлы опрашиваются или когда узлы просто шлют в эфир данные по времени.
Схема работы с одной трубой на множеством узлов с разделением по ID узлов нормально работает если устройства с разными ID инициируют соединение. И при этом соседнии узлы не слушают трубу центрального узла...
По поводу визуальной и правильной работы согласен.
по пунктам:
1) на передатчике труба[0] передача труба [1] прием, на приемнике наоборот.
2) все узлы шлют данные просто по времени
3)когда узлы шлют инфу по времени.
Есть мысли сделать последовательный опрос всех устройств с центрального по времени. Но он встроен в gate между web-сервером и устройствами(программка на компе все время его слушает через com порт). И есть идея разделить приемник и передатчик. Т.е. сделать два устройства: одно будет отправлять команды и "производить опрос",а другое, встроенное в gate будет тупо принимать все данные на себя.
+1 к использованию random(), причем я бы ввел ее не только при старте, но и при каждой отправке (иначе, если на старте неудачно синхронизируются несколько модулей, то они и дальше будут постоянно мешать друг другу).
Еще вариант - выделить каждому "клиенту" свой тайм-слот в зависимости от его ID, в качестве опорного сигнала начала отсчета тайм-слотов - сигнал синхронизации от главного модуля, далее каждый клиент отсчитывает свою константу в millis() перед началом передачи.
приведите radio.printDetails(); для приемника и передатчика (предварительно передернув питание модулей)
и напишите как именно в коде у вас инициация идет.
учитывая что на этих модулях передача занимает около 5 мС, слабо вериться что работая одновременно с интервалом 1 мин, модули раз в минуту друг другу мешают...
у библиотеки есть хитрость. Если вы назначаете какуюто трубу на запись командой radio.openWritingPipe(pipes), автоматически назначается труба на чтение. и если ее не перебить указав radio.openReadingPipe(0,pipes), то будут указанные выше проблемы.
я делал нечто подобное. Но у меня при отправке сообщения узлу, использовалось изменение трубы. Фактически труба была привязана к ID модуля. Обратно я все отправлял на 0 трубу центрального модуля с указание ID. пока с указаным выше нюансом не разобрался, лажа была полная.
приведите radio.printDetails(); для приемника и передатчика (предварительно передернув питание модулей)
и напишите как именно в коде у вас инициация идет.
учитывая что на этих модулях передача занимает около 5 мС, слабо вериться что работая одновременно с интервалом 1 мин, модули раз в минуту друг другу мешают...
у библиотеки есть хитрость. Если вы назначаете какуюто трубу на запись командой radio.openWritingPipe(pipes), автоматически назначается труба на чтение. и если ее не перебить указав radio.openReadingPipe(0,pipes), то будут указанные выше проблемы.
я делал нечто подобное. Но у меня при отправке сообщения узлу, использовалось изменение трубы. Фактически труба была привязана к ID модуля. Обратно я все отправлял на 0 трубу центрального модуля с указание ID. пока с указаным выше нюансом не разобрался, лажа была полная.
Привести radio.printDetails(), к сожалению смогу только в понедельник- все модули на работе, там собственно все построение пока и происходит
21 не предел. каждая розетка в комнате, с функцией счетчика нагрузки(в комнате окло 6), управление освещением, универсальный ик пульт и т.д
Может почитать другие темы про данный модуль? Тут одна вроде страниц на 20 есть. Найти там про mesh network. Или вы правдо думаете что вы первопроходец? :)
Естественно я так не думаю. Читал я эти страниц 20. То что там якобы mesh network - это обычная древовидная сеть.
Естественно я так не думаю. Читал я эти страниц 20. То что там якобы mesh network - это обычная древовидная сеть.
Древовидная она там или амебо подобная , не суть важно. Важно что она как раз для таких проектов и делалась. И что еще более важно она таки вполне себе нормально работает. Можете взять и доработать библиотеку напильником до нужной вам кондиции.
Все проходят через эту стадию , типа налеплю 3 мильена модулей и расбросаю по дому :) следующая стадия либо бросил все и забыл, либо начинается плановое осмысление и все эти 3 мильена модулей отправляються в коробку до лучших времен.
На счет дальности есть вариант использовать BK2423 - это аналог китайский NRF24L01. Цена чуть даже меньше ,а мощность больше..В ближайшее время буду испытывать их
На счет дальности есть вариант использовать BK2423 - это аналог китайский NRF24L01. Цена чуть даже меньше ,а мощность больше..В ближайшее время буду испытывать их
Есть вариант использовать трансивер на 434 (где то там в отвлеченых я даже фото выкладывал , такая штуковина меньше ногтя) ,цена чуть дороже , скорость поменьше 256кбит, зато дальность особенно в городе метров 500.
Требуется реализовать сеть типа звезда.
ну как зведу
звезданутый опрашивает лучики по циклу кругом и когда есть ответ передает команду и получает подтверждение то есть полезное сообщение(ракета еще готовится 5 минут я занята иди к следующей)\
звездануты (станция наведения ракет) идет к следующей пусковой
на гиагерцах этот круг летает со скоростью гигагерц на 100-ну ракет одновременно
идет к следующему
так все ПВО работают тоже на гигагерцах
плять я кажется секретные секреты рассазал
ну все украинские буки уже будут беззсилны
мало того что мазилы за ручками так еще безсильны
отпишешся ?
Привет.
При вставке radio.printDetails(); в блок void setup ничего ничего не происходит. И более того код, который работал до этого перестает работать. Т.е. в приемник ничего не поступает. Для проверки использовал только один приемник и один передатчик.
На счет дальности есть вариант использовать BK2423 - это аналог китайский NRF24L01. Цена чуть даже меньше ,а мощность больше..В ближайшее время буду испытывать их
да нет. nrf24lo1 как ни странно дешевле
http://ru.aliexpress.com/item/10PCS-HOT-LT8900-BK2423-Wireless-data-tran...
http://ru.aliexpress.com/item/Free-shipping-10pcs-lot-SMD-NRF24L01-wirel...
Я брал за $6.80 10 штук.. Пока успехов с радиомодулями нет ,похоже что китайцы собрали их из того что было и оно по этому не работает) Например стоят кварцы на 12мгц вместо 16 мгц по даташиту.. нет некоторых емкостей ,а так же не аккуратно распилено и спилены дорожки на краю платы на паре модулей. На одном модуле нет кварца.. Вобщем светит диспут с продавцем.
а я как решил что не буду брать такие модули. nrf дешевле и точно должно работать
Эти модули почти полные аналоги ло1(особой адаптации под них не требудется), но интересна разница в мощности ло1 - 0дб ,а эти модули 5дб..
почти))) как запустишь напиши. а то у меня и так секса с ардуиной модулями и тп хватает. не хватало еще с радиомодулем мучаться
Пока решил использовать следующую архитектуру: на Web-сервере переодически запускается скрипт, который по очереди отправляет датчикам команды переслать свои показания, статусы. Между опросами датчиков ставится задержка, которая позволяет получить данные.
Это уже реализованно и работает.
У кого какие мысли на этот счет?
Всем добрый день.
Возможно данный вопрос уже расматривался где-то в других темах, но точного для себя ответа на него я не нашел. Если есть такие, то прошу направить меня на них.
Вопрос возник в процессе реализации оного из модулей - блока универсального управления по ик сигналу. Передача ему осуществляется с web-сервера по радио. Данные имеют следующий вид: id устройства_тип команды_ик код_протокол.
Коды хранятся в базе как в HEX виде так ив сыром RAW. Т.е. если HEX вариант отсутствует, то передается RAW. RAW на случай обучения устройства новым не известным для него пультам.
При передаче HEX кода все нормально, но если протокол устройства не известен, то необходимо передавать RAW. А длинна пакета радиомодуля 32 бит. Как тут быть? Разбивать на более менкие пакеты с указанием в первом количества таких пакетов и потом на премнике их склеивать? Или же можно как-то поступить более красиво и просто?
При передаче HEX кода все нормально, но если протокол устройства не известен, то необходимо передавать RAW. А длинна пакета радиомодуля 32 бит. Как тут быть? Разбивать на более менкие пакеты с указанием в первом количества таких пакетов и потом на премнике их склеивать? Или же можно как-то поступить более красиво и просто?
Конечно нужно поступить красиво, если вам лень изучать библиотеку и описание модуля, сделайте красиво, выкиньте все в мусор и займитесь рыбалкой.
Гон, payload не до 32 бит а до 32 байт, и можно туда затолкать что угодно.
И нахер слать RAW код в сеть на сервак? Он [код] ему [серваку] не нужен. Пусть себе держится в EEPROM, на локальном устройстве.
2 all
Люди, позязя, не цитируйте друг друга полностью.
И нахер слать RAW код в сеть на сервак? Он [код] ему [серваку] не нужен. Пусть себе держится в EEPROM, на локальном устройстве.
Держать на серваке для того чтобы другие устройства тоже могли этим пользоваться. И если вдруг устройство выйдет из строя, чтоб не переучивать его заново. Тем более если оно управляет несколькими устройствами.
Конечно нужно поступить красиво, если вам лень изучать библиотеку и описание модуля, сделайте красиво, выкиньте все в мусор и займитесь рыбалкой.
Не примите за оскорбление:
Вы кроме критики и "забавных" предложений что-нибудь дельное когда-нибудь пишите? Судя по вашим ответам здесь да и на других ветках форума, складывается впечатление что ваше основное призвание: нагадить всем и ничего не предложить. Если так, то уж лучше не пишите вовсе.
Конечно нужно поступить красиво, если вам лень изучать библиотеку и описание модуля, сделайте красиво, выкиньте все в мусор и займитесь рыбалкой.
Не примите за оскорбление:
Вы кроме критики и "забавных" предложений что-нибудь дельное когда-нибудь пишите? Судя по вашим ответам здесь да и на других ветках форума, складывается впечатление что ваше основное призвание: нагадить всем и ничего не предложить. Если так, то уж лучше не пишите вовсе.
Специально для Вас выделил его дельное предложение. Вы ведь тоже пока не прославились на форуме своей помощью? Однако Вам никто не советует прекратить постить. Будьте уже последовательны.
Вы ведь тоже пока не прославились на форуме своей помощью? Однако Вам никто не советует прекратить постить. Будьте уже последовательны.
Согласен я помощью не прославился - не так долго я пока нахожусь на форуме, но и не допускал нападок в чей-либо адрес. Так что с последовательностью у меня все впорядке)
Согласен я помощью не прославился - не так долго я пока нахожусь на форуме, но и не допускал нападок в чей-либо адрес. Так что с последовательностью у меня все впорядке)
Действительно? Пройдемся по теме - Вам давали советы которые, видимо, Вам не понравились. Какого-то внятного объяснения для их отклонения Вы тоже не приводили. Совет Пухлявого Вы интерпретируете как "нападок", хотя в его предложении нет ни грубости ни "наезда", но присутствует хоть и завулированный реальный путь решения Вашей задачи. И где тут последовательность с которой "все в порядке"?
"Завуалированный ответ" - этот то с чего в любом случае необходимо начинать. Сообственно чем я настоящее время и занимаюсь. Так что это совет, если его можно таковым назвать, из серии: спосение утопаяющих дело рук самих утопающих) Советы Пухлявого, как вы его называете, довольно "своеобразные" см. советы выше, а не только его последний "Завуалированный ответ".
Первостепенное назначение форума - помощь. Так что зачем тут разводить полемику по этому поводу?)
Давайте просто закроем этот вопрос- он ни к чему не приведет.
форум не обязательно помощь. моему в первую очередь это обсуждение. а помощь личное дело каждого
"Завуалированный ответ" - этот то с чего в любом случае необходимо начинать. Сообственно чем я настоящее время и занимаюсь. Так что это совет, если его можно таковым назвать, из серии: спосение утопаяющих дело рук самих утопающих) Советы Пухлявого, как вы его называете, довольно "своеобразные" см. советы выше, а не только его последний "Завуалированный ответ".
Первостепенное назначение форума - помощь. Так что зачем тут разводить полемику по этому поводу?)
Давайте просто закроем этот вопрос- он ни к чему не приведет.
Форум - это место общения (единомышленников/единоувлекающихся/фигпоймиещекого). Помощь - побочный эффект и приходит далеко не всем и уж тем более не по требованию.
Так я вроде не требовал, а просил)
Обсуждение главного вопроса отошло в сторону. Так что, как говорил герой Никулина : "Будем искать"!
Я брал за $6.80 10 штук.. Пока успехов с радиомодулями нет ,похоже что китайцы собрали их из того что было и оно по этому не работает) Например стоят кварцы на 12мгц вместо 16 мгц по даташиту.. нет некоторых емкостей ,а так же не аккуратно распилено и спилены дорожки на краю платы на паре модулей. На одном модуле нет кварца.. Вобщем светит диспут с продавцем.
блин у меня таже фигня. только продавался как nrf24l01 хотя выглядит один в один
продавец молчит пока
попытки запустить ни к чему хорошему не привели
есть сомнения в плане подключения
скорее всего не так как в оригинале
а так
http://ru.aliexpress.com/item/20PCS-HOT-LT8900-BK2423-Wireless-data-transimission-module-replacing-NRF24L01-CC2500-CC1101-NRF905/2038016119.html
только хз что делать с REST. но тут побаловаться можно с нужным рабочим уровнем
PKT скорее всего типа IRQ в оригинале
сейчас лень тестировать. но как нибудь попробую
да и еще. кварц на 16 вроде. 6.000 читается более менее, а вот 1 вначале только обрывок
Да у меня на этих модулях все подписано, но запустить так и не смог -подозрение на брак(точнее хлам). Уже открыл диспут - не знаю чего выйдет.т.к. не уследил и продавец установил возрат в 0.. Ещё помучаю как время будет, ща пока занят с модулем ле1 с мозгами и конструктором для его готовой прошивки.
что у тебя написано? если ни одному варианту не соответствует выложи свое фото
у меня без подписей
Подписаны там выводы просто..
2 jeka_tm:
Дык на ebay есть нормальные с подписями и кварцами. Ты уж прямсовсем сэкономить решил. :)
Подписаны там выводы просто..
ну а что подписано?
2 jeka_tm:
Дык на ebay есть нормальные с подписями и кварцами. Ты уж прямсовсем сэкономить решил. :)
да такие у меня есть и работают. хочу чтобы на плату сразу нормлаьно распаять без разъемов
Подписаны там выводы просто..
ну а что подписано?
Ок , не забуду вечером если ,то фото выложу.
2 jeka_tm:
Ну если только для распайки, то да. Там вилка 2x4. Её доволльно геморройной выпаять будет.
выпаять не проблема. я даже раз 5 паял на плату по типу bga с шариками
но это все не то