NRF24L01+ меняет конфигурацию после startListening

Я пытался заставить два Arduino UNO общаться друг с другом через NRF24L01 с библиотекой TMRH20 NRF24. Я пробовал много руководств и примеров, и ни один из них не работал. Большинство из них выводят сообщения об ошибках, связанные с тем, что radio.write возвращает false.

После устранения неполадок я увидел кое-что странное. Я настроил конфигурацию (например, скорость передачи данных), и когда я вызываю startListening, она, похоже, возвращается обратно.

Этот код:

void setup() {

    Serial.begin(9600);
    printf_begin();

    Serial.println("SimpleRx Starting");
    radio.begin();
    radio.setDataRate( RF24_250KBPS );
    radio.openReadingPipe(1, thisSlaveAddress);
    radio.printDetails();
    Serial.println();

    radio.startListening();
    radio.printDetails();
}

Выводы:

STATUS       = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1     = 0xe7e7e7e7e7 0x4141417852
RX_ADDR_P2-5     = 0xc3 0xc4 0xc5 0xc6
TX_ADDR      = 0xe7e7e7e7e7
RX_PW_P0-6   = 0x00 0x20 0x00 0x00 0x00 0x00
EN_AA        = 0x3f
EN_RXADDR    = 0x03
RF_CH        = 0x4c
RF_SETUP     = 0x27
CONFIG       = 0x0e
DYNPD/FEATURE    = 0x00 0x00
Data Rate    = 250KBPS
Model        = nRF24L01+
CRC Length   = 16 bits
PA Power     = PA_MAX

STATUS       = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1     = 0xe7e7e7e7e7 0xc2c2c2c2c2
RX_ADDR_P2-5     = 0xc3 0xc4 0xc5 0xc6
TX_ADDR      = 0xe7e7e7e7e7
RX_PW_P0-6   = 0x00 0x00 0x00 0x00 0x00 0x00
EN_AA        = 0x3f
EN_RXADDR    = 0x03
RF_CH        = 0x02
RF_SETUP     = 0x0f
CONFIG       = 0x08
DYNPD/FEATURE    = 0x00 0x00
Data Rate    = 2MBPS
Model        = nRF24L01+
CRC Length   = 8 bits
PA Power     = PA_MAX

Вы можете видеть, что адрес был настроен правильно до startListening (0x4141417852), но после он вернулся вернуться к тому, что я предполагаю, является значением по умолчанию (0xc2c2c2c2c2). Скорость передачи данных также изменилась.

Это нормально?

У другого Arduino UNO нет startListening или stopListening, но если я распечатаю конфигурацию после openWritingPipe, я увижу правильную конфигурацию.

, 👍1


1 ответ


Лучший ответ:

2

Первое, что приходит мне в голову, это то, что вы питаете nrf24L01 напрямую от контакта 3V3 вашего Arduino Uno. НЕ делайте этого.

Вывод 3V3 не обеспечивает достаточный ток для nrf24L01. Это делает модуль полностью нестабильным. Вы можете:

  • Используйте приличный конденсатор между VCC и GND на модуле. (Но я не рекомендую использовать это решение)
  • Используйте отдельный источник питания 3V3, способный выдерживать скачки тока nrf24L01. Но не забудьте также подключить его заземление к Ardino Uno.
  • Используйте модуль питания, который питает nrf24L01 от шины Arduino Unos 5 В.
,

Спасибо, я попробую это :), @Robert F.

Встроенный регулятор действительно может быть слишком плохим, некоторые люди измеряли шум 100 мВ, который серьезно ухудшил бы работу модуля. Однако решение с конденсатором, вероятно, даст вам хотя бы некоторый уровень удобства использования., @Avamander

Это так неправда. Вы можете полностью запитать nrf24l01 от 3,3 В на Arduino. У меня сеть из них работает так., @PhillyNJ

Я заказал модуль питания, и теперь они прекрасно работают :) спасибо, @Robert F.