nrf24l01 не работает, надежды нет

freekode
Offline
Зарегистрирован: 20.05.2013

Имееются у меня модули 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 (обычная ошибка для либы).

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

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

double1
Offline
Зарегистрирован: 04.07.2016

а на библиотеке MIRF пробовал?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013
freekode
Offline
Зарегистрирован: 20.05.2013

не пробовал, сейча затестим

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

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

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Номера каналов пробовали подбирать?

freekode
Offline
Зарегистрирован: 20.05.2013

перебирать не пробовал, какието выставлял из туториалов чужих, но не подбирал, попробую.

меня волнует почему он при write() возвращает false, при том что никаких проблем с подключением и пр. нет

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Номера каналов надо подбирать - используемые могут быть забиты наглухо. Плюс - инициализировать все настройки, играться с setAutoAsk и пр.

freekode
Offline
Зарегистрирован: 20.05.2013

по перебирал каналы, ну в общем все так же, пишет failed и на другом конце глухо

freekode
Offline
Зарегистрирован: 20.05.2013

ок попробую setAutoAck не трогал

double1
Offline
Зарегистрирован: 04.07.2016

перепроверь подключение по пинам. я часто попадал сам, вроде в коде проблем нет, а оказывается пины не так подключаю, левый ряд с правым путал, или верх-низ. посмотри, чтоб на этих пинах другого ничего не висело. питание 3.3 или 5?

freekode
Offline
Зарегистрирован: 20.05.2013

перепроверял, все ок (ну или я с ума сошел), проверял модули с чистыми ардуино и rpi (то есть без чего либо еще подключенного), почему я уверен что все подключено хорошо, потому что адрес и все параметры выставляются верно и отображаются верно. питание 3.3

double1
Offline
Зарегистрирован: 04.07.2016

тадой модули говно. я недавно намучался с nrf так же. плюнул и построил все на si4432.

a5021
Offline
Зарегистрирован: 07.07.2013

freekode пишет:
На rpi при отправке вместо failed пишет hardware error (обычная ошибка для либы).

Вот это и есть причина. Rpi не может полноценно общаться с модулем и не в либе тут дело. Проверяйте подключение, смотрите настройки SPI. Чудес не бывает. Модули обязаны работать.

double1 пишет:
тадой модули говно. я недавно намучался с nrf так же. плюнул и построил все на si4432

А я не плюнул, а довольно подробно разобрался и ответственно заявляю, что NRF24L01+ чудо, как хороши. Но нужно уметь их готовить.

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Для тестирования двусторонней передачи написал такой скетч.

Замечания:

1. У меня идентичные модули и потому частичная инициализация.

2. Пришлось припаять конденсатор 220Мф, а то без него UNO не хотел работать на прием.

3. Две линии перенес на А0 и А1.

Слушать через COM порт



Этот скетч надо залить без изменений на две Ардуинки.

#include<SPI.h>
#include<nRF24L01.h>
#include<RF24.h>
const uint64_t pipe= {0xF0F0F0F0E1LL};
RF24 radio(A0,A1); //Обратите внимание тут другое подключение
byte message = 1;
byte red;
unsigned long CTime01;
unsigned long LTime01;
void setup()
{
  Serial.begin(9600);
  radio.begin();
  delay(100);
  radio.enableDynamicPayloads();
  radio.openReadingPipe(1,pipe);
  radio.openWritingPipe(pipe); //Открывем трубу для отправки
  radio.startListening();

}
void loop()
{
  if ( radio.available() ) {
       radio.read( &red,sizeof(red) );
       Serial.println(String(red));
      };

    CTime01 = millis();
    if (CTime01 >= (LTime01 +100)) //Периодичность отправки пакетов
    {
       Serial.println("----------write------------");
       radio.stopListening();  //Перестаем слушать
       radio.write(&message, sizeof(message)); // Отправляем ответ
       radio.startListening();
       LTime01 = CTime01;
       message++;
    }
}

 

freekode
Offline
Зарегистрирован: 20.05.2013

a5021 пишет:

freekode пишет:
На rpi при отправке вместо failed пишет hardware error (обычная ошибка для либы).

Вот это и есть причина. Rpi не может полноценно общаться с модулем и не в либе тут дело. Проверяйте подключение, смотрите настройки SPI. Чудес не бывает. Модули обязаны работать.

double1 пишет:
тадой модули говно. я недавно намучался с nrf так же. плюнул и построил все на si4432

А я не плюнул, а довольно подробно разобрался и ответственно заявляю, что NRF24L01+ чудо, как хороши. Но нужно уметь их готовить.

а по-подрбней? не просто же решили проблему что подключение поправили.

подключение у меня верное, я пробовал делать неверное, просто не выставляется адрес и printDetails() пишет нули, если неверно указываю ce, csn пины в конструкторе RF24() то он пишет что принял сигнал (хотя второй модуль в тот момент не включен) или просто висит после вызова write().

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

написал же инструкцию. и коды для приемника передатчика дал чтобы проверить связь. чего придумывать

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

freekode пишет:
подключение у меня верное, я пробовал делать неверное

Вы не правильно локализируете ошибку.

Надо выбросить все, что может быть причиной ошибки. Лучше всего создать новый проект. 

Я дал вам работающий код для двух Ардуин. Только передатчики должны быть с одной партии, иначе инициация должна быть полной.

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

И никогда не будьте уверенны, что вы все сделали без ошибок.

a5021
Offline
Зарегистрирован: 07.07.2013

freekode пишет:
а по-подрбней?

Вы сами-то не хотите быть по-подробней? По вашему лаконичному описанию можно сделать только вывод, что малинка не видит модуля. Какую связь при этом вы ожидаете установить? Ментальную?

freekode
Offline
Зарегистрирован: 20.05.2013

на rpi такой же вывод как и на ардуине (естественно tx\rx адреса поменяны). и ардуина и rpi все видят модуль нормально

a5021
Offline
Зарегистрирован: 07.07.2013

В тексте gettingstarted.cpp (rpi) нет "hardware error".

freekode
Offline
Зарегистрирован: 20.05.2013

a5021 пишет:

В тексте gettingstarted.cpp (rpi) нет "hardware error".

да, извиняюсь текст ошибки другой)

но это ошибка от самой либы, в RF24.cpp прописана тут

a5021
Offline
Зарегистрирован: 07.07.2013

Мало того, что вы изначально запускаете возможную помощь по ложному следу, так теперь мне предлагаете поискать, откуда идет вызов этой void RF24::errNotify(). Не хотите сделать это сами?

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

freekode пишет:
 на rpi такой же вывод как и на ардуине (естественно tx\rx адреса поменяны). и ардуина и rpi все видят модуль нормально 

Вы пробовали просто две ардуинки между собой соединить?

a5021
Offline
Зарегистрирован: 07.07.2013

Вобщем, наиболее вероятной причиной является, что пин CE модуля NRF24L01 у вас подключен не туда, либо не подключен вовсе.

Ошибка "RF24 HARDWARE FAIL: Radio not responding" возникает, когда после установки в высокое состояние CE (включить радио), по прошествии  отведенного на передачу времени, буфера передачи остаются заполненными. Т.е. передача и не начиналась.