nrf24l01 не работает, надежды нет
- Войдите на сайт для отправки комментариев
Пт, 19/08/2016 - 12:55
Имееются у меня модули nrf24l01+. Подключаю к raspberry pi (model b) и к arduino nano.
Использую библиотеку rf24 (пробовал и релиз и самую последнуюю версию библиотеки из гита ).
Напаял конденсаторы на модули. Запускаю gettingstarted примеры (без изменений) и на rpi, и на ардуине. Никто не может ни отправить сигнал, ни принять.
<!--break-->
Вывод на ардуине:
STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0 RX_ADDR_P0-1 = 0x65646f4e31 0x65646f4e32 RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6 TX_ADDR = 0x65646f4e31 RX_PW_P0-6 = 0x20 0x20 0x00 0x00 0x00 0x00 EN_AA = 0x3f EN_RXADDR = 0x02 RF_CH = 0x4c RF_SETUP = 0x03 CONFIG = 0x0f DYNPD/FEATURE = 0x00 0x00 Data Rate = 1MBPS Model = nRF24L01+ CRC Length = 16 bits PA Power = PA_LOW Now sending failed Failed, response timed out.
На rpi при отправке вместо failed пишет hardware error (обычная ошибка для либы).
Адреса, параметры выставляются верно, все соединения верно подключены. Включал дебаг режим, ничего интересного не показал.
Уже в течении полугода, несколько дней, каждый месяц я пытаюсь решить проблему. Без успеха. Что может быть не так?
а на библиотеке MIRF пробовал?
может поможет
не пробовал, сейча затестим
Если надежды нет, то забейте и копайте могилу для модуля. Без надежды и веры в успех хрен чего получится.
Номера каналов пробовали подбирать?
перебирать не пробовал, какието выставлял из туториалов чужих, но не подбирал, попробую.
меня волнует почему он при write() возвращает false, при том что никаких проблем с подключением и пр. нет
Номера каналов надо подбирать - используемые могут быть забиты наглухо. Плюс - инициализировать все настройки, играться с setAutoAsk и пр.
по перебирал каналы, ну в общем все так же, пишет failed и на другом конце глухо
ок попробую setAutoAck не трогал
перепроверь подключение по пинам. я часто попадал сам, вроде в коде проблем нет, а оказывается пины не так подключаю, левый ряд с правым путал, или верх-низ. посмотри, чтоб на этих пинах другого ничего не висело. питание 3.3 или 5?
перепроверял, все ок (ну или я с ума сошел), проверял модули с чистыми ардуино и rpi (то есть без чего либо еще подключенного), почему я уверен что все подключено хорошо, потому что адрес и все параметры выставляются верно и отображаются верно. питание 3.3
тадой модули говно. я недавно намучался с nrf так же. плюнул и построил все на si4432.
Вот это и есть причина. Rpi не может полноценно общаться с модулем и не в либе тут дело. Проверяйте подключение, смотрите настройки SPI. Чудес не бывает. Модули обязаны работать.
А я не плюнул, а довольно подробно разобрался и ответственно заявляю, что NRF24L01+ чудо, как хороши. Но нужно уметь их готовить.
Для тестирования двусторонней передачи написал такой скетч.
Замечания:
1. У меня идентичные модули и потому частичная инициализация.
2. Пришлось припаять конденсатор 220Мф, а то без него UNO не хотел работать на прием.
3. Две линии перенес на А0 и А1.
Слушать через COM порт
Этот скетч надо залить без изменений на две Ардуинки.
Вот это и есть причина. Rpi не может полноценно общаться с модулем и не в либе тут дело. Проверяйте подключение, смотрите настройки SPI. Чудес не бывает. Модули обязаны работать.
А я не плюнул, а довольно подробно разобрался и ответственно заявляю, что NRF24L01+ чудо, как хороши. Но нужно уметь их готовить.
а по-подрбней? не просто же решили проблему что подключение поправили.
подключение у меня верное, я пробовал делать неверное, просто не выставляется адрес и printDetails() пишет нули, если неверно указываю ce, csn пины в конструкторе RF24() то он пишет что принял сигнал (хотя второй модуль в тот момент не включен) или просто висит после вызова write().
написал же инструкцию. и коды для приемника передатчика дал чтобы проверить связь. чего придумывать
Вы не правильно локализируете ошибку.
Надо выбросить все, что может быть причиной ошибки. Лучше всего создать новый проект.
Я дал вам работающий код для двух Ардуин. Только передатчики должны быть с одной партии, иначе инициация должна быть полной.
Если две Ардуины связались между собой, значит на стороне Ардуин все работает отлично. Тогда переходим к второму этапу - перенос одной части на Расбери.
И никогда не будьте уверенны, что вы все сделали без ошибок.
Вы сами-то не хотите быть по-подробней? По вашему лаконичному описанию можно сделать только вывод, что малинка не видит модуля. Какую связь при этом вы ожидаете установить? Ментальную?
на rpi такой же вывод как и на ардуине (естественно tx\rx адреса поменяны). и ардуина и rpi все видят модуль нормально
В тексте gettingstarted.cpp (rpi) нет "hardware error".
В тексте gettingstarted.cpp (rpi) нет "hardware error".
да, извиняюсь текст ошибки другой)
но это ошибка от самой либы, в RF24.cpp прописана тут
Мало того, что вы изначально запускаете возможную помощь по ложному следу, так теперь мне предлагаете поискать, откуда идет вызов этой void RF24::errNotify(). Не хотите сделать это сами?
Вы пробовали просто две ардуинки между собой соединить?
Вобщем, наиболее вероятной причиной является, что пин CE модуля NRF24L01 у вас подключен не туда, либо не подключен вовсе.
Ошибка "RF24 HARDWARE FAIL: Radio not responding" возникает, когда после установки в высокое состояние CE (включить радио), по прошествии отведенного на передачу времени, буфера передачи остаются заполненными. Т.е. передача и не начиналась.