Nrf24 не работает с wire.begin()

Тема в разделе "Arduino & Shields", создана пользователем cfif, 15 янв 2023.

  1. cfif

    cfif Нерд

    Камрады, столкнулся с такой проблемой. Изучаю работу NRF24. Написал код передатчика и приемника. Всё работает отлично. Но когда я хочу подключить гироскоп MPU6050 к приемнику, NRF перестает принимать данные. Происходит это в момент вызова Wire.begin(). Если убираю эту строку, то всё работает. В чем может быть засада? они же на разных шинах работают - i2c и spi.

    Код (C++):
    #include <SPI.h>
    #include "nRF24L01.h"
    #include "RF24.h"

    #include "Wire.h" // для работы по i2c
    #include <Servo.h> // для работы esc

    // переменные для работы NRF24
    RF24 radio(9, 10);  // создаем NRF24. порты D9, D10: CSN CE
    byte pipe_address = "transmitter";  // название радиоканала
    byte receive_data[6]; // данные для получения по NRF24

    void setup() {
      Serial.begin(9600);         // открываем порт для связи с ПК

      InitNRF24_Receive(); // инициализация NRF24 на прием
    Wire.begin(); // инициализация i2c
      Serial.println("start: ");
    }

    void loop() {
      // Если есть данные на приеме приемника
      if (radio.available()){
        radio.read(&receive_data, sizeof(receive_data));  // чиатем входящий сигнал
        Serial.println("get data: ");
      }
    }

    void InitNRF24_Receive() {
      radio.begin();              // активировать модуль
      radio.setAutoAck(1);        // режим подтверждения приёма, 1 вкл 0 выкл
      radio.setRetries(0, 15);    // (время между попыткой достучаться, число попыток)
      radio.enableAckPayload();   // разрешить отсылку данных в ответ на входящий сигнал
      radio.setPayloadSize(32);   // размер пакета, в байтах


      radio.openReadingPipe(1, pipe_address);   // открываем канал на прослушивание
      radio.setChannel(0x60);     // выбираем канал (в котором нет шумов!)

      radio.setPALevel (RF24_PA_MIN);   // уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
      radio.setDataRate (RF24_250KBPS); // скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
      //должна быть одинакова на приёмнике и передатчике!
      //при самой низкой скорости имеем самую высокую чувствительность и дальность!!

      radio.powerUp();        // начать работу
      radio.startListening(); // начинаем слушать эфир, мы приёмный модуль
    }
     
  2. cfif

    cfif Нерд

    да, забыл указать - у меня ардуино нано. версия Arduino IDE 1.8.19. Ядро - 1.8.3. Библиотека RF24 - 1.4.6 от TMRh20
     
  3. cfif

    cfif Нерд

    Победил я этого зверя))) но что именно не так - так д конца и не разобрался(((
    Проблема была в названии адресов pipes. Логика следующая: если я называю канал и в передатчике, и в приемнике uint8_t pipe_address = "1Node";
    а в приемнике открываю его так: myRadio.openReadingPipe(0, pipe_address);
    то без вызова Wire.begin() всё работает, а с вызовом - не работает.

    Если я меняю название на такой вид: uint8_t new_addr[][6] = {"1Node", "2Node"};
    а в приемнике открываю его так: myRadio.openReadingPipe(0, new_addr[0]);
    то всё работает и с вызовом, и без вызова Wire.begin()
     
  4. parovoZZ

    parovoZZ Гуру

    С nrf24 можно работать безо всяких библиотек.
    Как правильно выставлять адреса сказано в даташите на nrf24.
     
  5. cfif

    cfif Нерд

    понял) спасибо!