Камрады, столкнулся с такой проблемой. Изучаю работу 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(); // начинаем слушать эфир, мы приёмный модуль }
да, забыл указать - у меня ардуино нано. версия Arduino IDE 1.8.19. Ядро - 1.8.3. Библиотека RF24 - 1.4.6 от TMRh20
Победил я этого зверя))) но что именно не так - так д конца и не разобрался((( Проблема была в названии адресов 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()
С nrf24 можно работать безо всяких библиотек. Как правильно выставлять адреса сказано в даташите на nrf24.