Nrf24l01+
- Войдите на сайт для отправки комментариев
Чт, 08/12/2011 - 23:54
Заказал из китая 2 модуля, получил, подключил. А дальше....?
Погуглил, и облом. Мало инфы сопряжения с ардуинкой.
Кто имел дело с такими модулями? Помогите пожалуйста. посоветуйте прогу для теста.
Спасибо.
П.С.
Тем, кто еще не связывался, но собирается, не советую подключать к 5в., сделайте простой делитель напряжения из 2х резисторов для уменьшения до 3в. 5в - убьет чип. Подключение к шине элементарное - SPI.
М, я так понял что это беспроводной приемопередатчик. Частота 2.4ГГц. Это по вайфай чтоли? и цена в 3 доллара вкусная. Не в курсе, с вайфай телефона можно связать?
З.Ы. первая же ссылка в гугле: www.arduino.cc/playground/InterfacingWithHardware/Nrf24L01
Ну это не вай-фай, но цена действительно вкусная.
Эту прогу пробовал. ни как не могу понять как работает. =((
Нашел неплохую статью, может кому поможет
http://www.elecfreaks.com/480.html
Если у кого есть рабочая прога передачи байтиков, дайте плиз...
В даташите на Nrf24l01+ указано что порты толерантны к 5 вольтовым уровням.
Сама микросхема приемлит питание до 3,6 вольт.
Значит питание даём с 3,3 выхода ардуино, а SPI подключаем без всяких резистивных делителей.
Сейчас попробую. Постараюсь отписаться как прошел опыт с подключением к SPI без делителя.
Нормально всё работает.
Подключил к двум Ардуино нано на 328 меге два модуля Nrf24l01+.
Питание 3,3 вольта. SPI напрямую.
Код привожу ниже - соеденял свой комп с ноутбуком - все передаётся нормально и без ошибок.
Естественно код должен быть различным для приёмопередатчиков.
Просто в одном поставьте Mirf.setRADDR((byte *)"app1");
во втором Mirf.setRADDR((byte *)"app2");
и соответсвенно в первом Mirf.setTADDR((byte *)"app2");
во втором Mirf.setTADDR((byte *)"app1");
вот код.
Буфер тоже должен быть одинаковым.
И как эти модули? Какова дальность работы? Что за модули, можно картинку?
Здесь подробнее.
forum.easyelectronics.ru/viewtopic.php
forum.easyelectronics.ru/viewtopic.php
Nixoid, спасибо за пример - сначала заработал он, потом все остальное из примеров ;)
Завсегда вэлком..
И как эти модули? Какова дальность работы? Что за модули, можно картинку?
google.gik-team.com/
Отличная ссылка, возьму на вооружение ;))))
Отличная ссылка, возьму на вооружение ;))))
Мне тоже нравится..
Вот какая задачка возникла:
есть один "приемник" (для определенности - обзовем его rx00) и есть неколько передатчиков:
tx00 - отправляет свой номер, номер посылки, дату, время, день недели, температуру, влажность, номер посылки (в несколько заходов, размер буфера 32)
tx01 - отправляет свой номер, номер посылки, температуру, влажность (в один заход, размер буфера 32)
в дальнейшем, думаю, количество передатчиков возрастет (возможно, будут и двусторонние связи, но это позже.
В скетче для tx00 есть строчки:
В скетче для tx01:
Соответственно, в скетче для приемника (rx00), если есть строки:
То слушаем tx00
если же:
То служаем tx01
А вот теперь задачка.. как можно модифицировать код для приемника, чтобы он принимал как от tx00, так и от tx01?
Сложность (или наоборот, это хорошо?) еще в том, что темп поступления данных - разный, причем, существенно (tx00 шлет данные примерно раз в 1 секунду, а tx00 - раз в 5 минут).
Код "приемника":
P.S. Собственно, используетя эта библиотека: http://arduino.cc/playground/InterfacingWithHardware/Nrf24L01
А вот теперь задачка.. как можно модифицировать код для приемника, чтобы он принимал как от tx00, так и от tx01?
пусть tx 00 передаёт в tx 01 а tx 01 уже передаёт пакет в приёмник rx. Одновременно то же довольно просто (и приёмник и передатчик) нужно заюзать питание модуля на лапку микроконтроллера (любую) и дёргать ей (модуль необходимо сбрасывать с питания для смены его ч приёмника на передатчик) и на внешнее событие привязать другогой лапки (диджитал рид ). Модуль на 13 лапке, полсекунды он Hight полсекунды Low потом опять Hight. паралельно слушаем другой пин 10 например (он то же на полсекунды завязан, дергаем лапкой вхолостую High или Low). В скетче же связь если 10 пин High то настройки как у передатчика, если Low то как у приёмника.
Может я чего не понимаю, но не совсем понятно что вы придумали... зачем подключать питание модуля к МК? зачем передавать данные по цепочке тоже не ясно... но открою секрет - nRF24L01+ поддерживает аппаратно до 6 передатчиков на один приемник.
да верно шесть передатчиков и один приёмник вы мне сами его и посоветовали если я не ошибаюсь. Но модуль настраивается либо как передатчик либо как приёмник, а для смены его с передатчика на приёмник необходимо его отключить от питания иначе никак. Иначе будет односторонняя связь. Цепочка это я не знаю, просто автор топика просил как сделать так , что бы слить в один канал все данные.
http://avrproject.ru/publ/kak_podkljuchit/radiomoduli_nrf24l01/2-1-0-92 вот тут про его односторонний характер и про смену его с приёмника на передатчик
"При смене нужно сбрасывать "модуль", а Atmega8 сбрасывать не надо.
Просто подключи ножку (+) питания "модуля" к любой ножке (порту) Atmega8.
Например: к PORTD.3 = Output, т.е. появится возможность сбрасывать "модуль" меняя "PORTD.3 = 1" на "PORTD.3 = 0", и обратно на "PORTD.3 = 1".
Принцип работы:
1) выставляем порт в "PORTD.3 = 1" на "модуль" идёт питание, и производим настройку на передачу.
2) сбрасываем "модуль" отключением питания, а после включаем снова, т.е. меняем "PORTD.3 = 1" на "PORTD.3 = 0".
3) подаём питание на "модуль" включением "PORTD.3 = 1", и производим настройку на приём.
У модуля nRF24L01 токовое потребление как у светодиода, поэтому с портом Atmega8 ничего не будет (не зажжёте, проверено). "
Вы не теми библиотеками пользуетесь. Модуль может работать и как приемник и как передатчик и без отключения питания, более того он сам аппаратно поддерживает подтверждение передачи данных. А за то как настроен модуль - передатчик или приемник отвечает вывод CE.
Попробуйте вот эту библиотеку на мой взгляд самая простая в использовании.
спасибо буду пробовать
По какой то причине ссылки криво работают, вот https://github.com/maniacbug/RF24/archive/master.zip
Что бы долго не разбираться...
Вывод IRQ не подключаю и не использую. Это заливаете в дуину, которая подключена к компу:
запускаете сериал монитор и что нибудь отправляете.
А этот заливаете в дуину которая будет автономна:
Суть теста - первый код получив данные из сериал, отправляет в радиоэфир пакет, второй код принимает пакет и отправляет обратно, первый принимает пакет и передает обратно в сериал. Сам не проверял на работоспособность но вроде как должен работать - то есть что написали в сериал, то и должно вернуться обратно.
А подскажите, как подключить этот модуль к ардуине? какие ноги куда? Извините, вот только получил и никак не въеду)
http://arduino.cc/playground/InterfacingWithHardware/Nrf24L01 вот тут подключение
Pins:
Configurable:
http://i49.tinypic.com/1x1d0.png
а еще имеет смысл вывод IRQ подключить ко 2 цифровому входу ардуины, тогда можно задействовать спящий режим для экономии энергии и "будить" ардуино по прерыванию
И не забудьте, что для питания модулю нужно 3.3В и если подключить 5В - большой риск спалить. Но с другой стороны никакого согласования по уровню сигналов не требуется - модуль "толерантен" к 5В-сигналам.
http://arduino.cc/playground/InterfacingWithHardware/Nrf24L01 вот тут подключение
Pins:
Configurable:
http://i49.tinypic.com/1x1d0.png
Спасибо большое)
А к компьютеру можно как-нибудь подключить эту штуковину?)
А то пока второй платы нету...вот не знаю как проверить)
Теоретически можно подключить к LPT порту и написать ПО. Но задание явно не для новичка так что практически никак, но кто знает ,может кто озадачивался таким вопросом, погуглите.
Здравствуйте, пока не очень разбираюсь в ардуино, помогите советом)
Вот я допустим хочу сделать дистанционно включаемую лампу, мне нужно реле, два таких модуля и ардуино,
можно ли подключить данный радиомодуль напрямую к реле, или же надо ставить два ардуино???
Сам модуль ничего не умеет.
Поэтому минимум нужно две ардуины, два радиомодуля, реле (и еще транзистор, чтобы не спалить ардуину, подключив к ней реле напрямую).
Лампой можно и через ик управлять любым пультом. Либо купить готовое устройство.
ИК? Но ведь и в этом случае мне нужно две ардуины?
Корче, если я хочу умный дом, то мне нужно дофига ардуин?
ардуину ставить в законченное устройство - имхо, неправильно.
ардуина удобна именно как модуль, к которому удобно что-то быстро подключить, проверить, отладить.
а по "умному дому" раскидать уже самих микроконтроллеров с минимально необходимой обвязкой для работы (включая всякие ИК, RF, реле и т.п.)
Вот я допустим хочу сделать дистанционно включаемую лампу
http://uploads.ru/nuFIp.jpg вот готвые реле для Ваших нужд, цена от 8 до *** долларов с доставкой в Россию из Китая. Поищите в интернет магазинах (ебей или иных) по "Wireless RF Relay"
ардуину ставить в законченное устройство - имхо, неправильно.
ардуина удобна именно как модуль, к которому удобно что-то быстро подключить, проверить, отладить.
плюс ардуино в законченном устройстве это зачастую ещё и дорого и по габаритам не всегда вписывается в готовое устройство.
Если габариты жмут, можно поставить микру или нану. Хотя сам проц в жуковатом корпусе, конечно, меньше, но не все любят его паять. А в ДИПе он не намного меньше места скушает, чем та же МИКРА даже
ИК? Но ведь и в этом случае мне нужно две ардуины?
Корче, если я хочу умный дом, то мне нужно дофига ардуин?
Для ик нужно одну ардуину, ик приемник и релюшки с обвеской. Пульт любой, что под руку попадется.
Ик хуже тем, что меньше дальность и прямая видимость.
Что бы долго не разбираться...
Вывод IRQ не подключаю и не использую. Это заливаете в дуину, которая подключена к компу:
запускаете сериал монитор и что нибудь отправляете.
А этот заливаете в дуину которая будет автономна:
Суть теста - первый код получив данные из сериал, отправляет в радиоэфир пакет, второй код принимает пакет и отправляет обратно, первый принимает пакет и передает обратно в сериал. Сам не проверял на работоспособность но вроде как должен работать - то есть что написали в сериал, то и должно вернуться обратно.
Прошу помощи. Прямая ссылка сдохла, с github нечто скачал, впихнул в скетч и получаю тонны ошибок.
Полный список:
Такое ощущение, что проблемно заданы ссылки на включаемые файлы. Делал по-всякому, сейчас так, с полными путями:
Но ошибки одни и те же.
Грешу на то, что сами файлы криво скачались, но визуально с ними все нормально. Может кто-либо приложить архив с нужными файлами, у кого этот самый код работает. А еще лучше и полный скетч.
Спасибо
Качались файлы от туда же и ссылка работает, переименуйте папку NRF в RF24,
у меня все работает в версии ArduinoIDE 1.0.
Нашел в инете решение, если кто-то еще столкнулся с этой проблемой:
Чтобы среда Arduino IDE (1.0.2 у меня) не давала таких косяков, нужно все include из библиотек вставить в файл скетча. В частности, RF24.h подключает RF24_config.h. я добавил второй include в файл скетча, и оно скомпилировалось.
Но заработало не сразу) Успел даже написать пост, но понял в чем косяк.
Так что, господа, если что-то не работает, проверье, что включили это в розетку (я забыл у автономной ардуино включить серийный порт и ждал диагностических выводов на ноутбуке)
За помощь спасибо, а отдельное спасибо тому, кто сможет мне объяснить, почему у всех все заработало без дополнительных include.
Слегка напрягает тот факт, что только здесь я нашел режим программного переключения прием/передача, во всех остальных случаях (в том числе в доках github, на который дана ссылка) режим переключается посредством "управляющего выхода" (земля - прием, +5 - передача)
А вы думаете здесь по другому? так же вывод СЕ при приеме на земле, а при передаче на +5, или может я не правильно вас понимаю и вы говорите, о том что заведомо на схемах этот вывод на земле или на +5в. На ноутбук у вас ничего не выводит по той причине, что вы забыли проинициализировать UART (забыли добавить в setup() строку Serial.begin(9600);).
почему у всех все заработало без дополнительных include.
Видать в 1.0.2 не подключаются хэдэры, подключенные в других хэдэрах, так как в 1.0 вроде все хорошо работает. То есть в файле RF24.h объявленны и RF24_config.h и nRF24L01.h, и по какой то причине в 1.0.2 они не подключаются.
А вы думаете здесь по другому? так же вывод СЕ при приеме на земле, а при передаче на +5, или может я не правильно вас понимаю и вы говорите, о том что заведомо на схемах этот вывод на земле или на +5в. На ноутбук у вас ничего не выводит по той причине, что вы забыли проинициализировать UART (забыли добавить в setup() строку Serial.begin(9600);).
Да, про ноутбук я уже понял) А про переключение, во всех прочих местах я находил код, который для переключения режима модуль перезагружает. И прямо в setup() прописано, в какой режим эта штука перейдет.
Здесь же удалось реализовать режим вопрос-ответ, что мне было очень нужно. Кстати спящий реализовался без проблем.
Здравствуйте все
Хочу arduino + nrf24l01 модуль подключить к LiPo 1 чельному акумуляторуб, там 3,7в. Несгорит ли nrf24l01 поскольку в datasheet-е Umax 3,6в. Ставить LM1117 3,3 не хотелось бы, так как там падение 1,2в. Может на питание модуля хватит резистор повесить. Спосибо за ответы.
Аккамулятор не факт что 3,7 выдавать будет, померьте. но и от 0,1 вольта сверх не сгорит (да же если 3, 7). На форумах ишут и от 5 вольт не сгорает но это на свой страх и риск
Напряжение на Li-Po в полностью заряженном состоянии составляет 4.0 - 4.2 вольта.
Имел как-то неосторожность запитать nrf24l01+ от 5 вольт, работал он в таком режиме (пока я это не заметил) около минуты, работал нормально и даже не сгорел, потом подлючил 3.3 вольта все хорошо работает по сей день. Но как говорится раз на раз не приходится... Поэтому если не жалко вам спалить для теста один модуль, попробуйте подключить напрямую к аккумулятору. Если у вас не какой-нибудь "энергозависимый датчик", у которого каждый микроампер на счету, а например, робот, у которого двигатели кушают амперы, то не бойтесь ставить LM-ку, те пара-тройка миллиампер никак не повлияют на общую картину. Если важно сохранять каждый миллиампер, то покупайте DC-DC преобразователь с высоким КПД.
Да втом то и дело что важно сохранять каждый миллиампер + малые габариты, долгое время жизни. Вот в нете нащёл саит http://maniacbug.wordpress.com а конкретно статью http://maniacbug.wordpress.com/2011/10/19/sensor-node/ (Low-power wirelesssensor node). Там автор говорит что изпользует 2 батарейки АА типа или 1 CR2450, и пашет его устройство с 2хАА 1,5 года с CR2450 около 5 месяцев, но lipo мне всётаки ближе к душе.... А если просто диод последовотельно питанию поставить, устройство в пике жрёт около 14 мА, а подение напряжения на диоде 0,2-0,5в.
народ, поскажите на каких пинах цеплять этот радиомодуль на Arduino Mega ?
перерыл кучу инфы, но везде описано только подключение к стандартной дуине
народ, поскажите на каких пинах цеплять этот радиомодуль на Arduino Mega ?
перерыл кучу инфы, но везде описано только подключение к стандартной дуине
Общая идея подключение чего-то к меге, когда знаем "как к обычной" - такая. В первую очередь нужно понять "по какому интерфейсу оно работает". Если используется не програмная, а железная реализация - значит велика вероятносто что в меге оно будет на других пинах (признаком этого, как правило является то, что в библиотеке-примере жесткого говорится к каким пинам подключать и их нельзя поменять програмно при объявлении объекта).
Это как раз "ваш случай". В документации видим что
Pins:
Теперь идем в описание платы, скажем Arduino Uno | Аппаратная платформа Arduino
И ищем похожие абревеатуры (и смотрим что у нее именно на этих пинах).
Видим что:
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Посредством данных выводов осуществляется связь SPI, для чего используется библиотека SPI.
Вывод - модуль работает по интефейсу SPI. Значит осталось найти на каких ногах он у меги.
Идем в описание меги:
Mega
Нахом что у нее про SPI говорится:
SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS).
В докуменации на наш модуль говорится что "MISO -> 12". Точно у уно 12 это MISO. У меги MISO это 50-тый пин. Вот мы и нашли первую "поправку". Значит MISO выход модуля нужно в 50-ты пин меги подключать.
Аналогично и для других пинов.
P.S. Только будте внимательны, в описаниях плат пины перечислены в разных порядках. Смотрите именно на имена пинов, а не "в каком порядке идут".
с SPI контактами я разобрался и сам, меня больше интересуют оставшиеся CE и CSN (без учета контакта IRQ который посоветовали не юзать)
пробовал их цеплять на ноги которые оговорены в начале скетча строчкой
RF24 radio(9, 10);
но результата не получил (юзаю пример от maksim из поста 21 этой ветки)
IRQ который посоветовали не юзать
но результата не получил (юзаю пример от maksim из поста 21 этой ветки)
ну судя по коду, я все таки должен получать в консоль то, что отправляю
но в итоге, при включении монитора порта, в него сразу начинает сыпаться иероглифы без остановки
хотя в консоль я ничего при этом не отправляю
по поводу не использования порта IRQ цитирую ваш же пост: Вывод IRQ не подключаю и не использую.
прошу помочь разобраться... интересуют выходы IRQ, CE и SCN
что из них подразумевает строка RF24 radio(9, 10); ?