Не получаем данные от NRF24L01
Я пытаюсь отправить данные с одной платы Arduino на другую, используя NRF24L01, подключаясь к двум концам двух плат Arduino. Tx мигает на передающей стороне (плата Arduino 1), но принимающая сторона (плата Arduino 2) не получает от него никакой информации. Вот мой код.
Передающая сторона (плата Arduino 1)
#include <SPI.h>
#include "RF24.h"
RF24 myRadio(0, 1);
byte addresses[][6] = {"0"};
struct package
{
int id = 1;
float longitude = 0.0;
float latitude = 0.0;
char text[100] = "Geographic coordinates";
};
typedef struct package Package;
Package data;
void setup()
{
Serial.begin(115200);
delay(1000);
myRadio.begin();
myRadio.setChannel(115);
myRadio.setPALevel(RF24_PA_MAX);
myRadio.setDataRate(RF24_250KBPS);
myRadio.openWritingPipe(addresses[0]);
delay(1000);
}
void loop()
{
myRadio.write(&data, sizeof(data));
Serial.print("\nPackage:");
Serial.print(data.id);
Serial.print("\n");
Serial.println(data.longitude);
Serial.println(data.latitude);
Serial.println(data.text);
data.id = data.id + 1;
data.longitude = data.longitude + 0.1;
data.latitude = data.latitude + 0.1;
delay(1000);
}
Принимающая сторона (плата Arduino 2)
#include <SPI.h>
#include "RF24.h"
RF24 myRadio(7, 8);
struct package
{
int id = 0;
float longitude = 0.0;
float latitude = 0.0;
char text[100] = "empty";
};
byte addresses[][6] = {"0"};
typedef struct package Package;
Package data;
void setup()
{
Serial.begin(115200);
delay(1000);
myRadio.begin();
myRadio.setChannel(115);
myRadio.setPALevel(RF24_PA_MAX);
myRadio.setDataRate(RF24_250KBPS);
myRadio.openReadingPipe(1, addresses[0]);
myRadio.startListening();
delay(1000);
}
void loop()
{
if (myRadio.available())
{
while (myRadio.available())
{
myRadio.read(&data, sizeof(data));
}
Serial.print("\nPackage:");
Serial.print(data.id);
Serial.print("\n");
Serial.println(data.longitude);
Serial.println(data.latitude);
Serial.println(data.text);
}
}
Вот как я соединил Arduino и NRF24L01.
Есть ли причина, по которой я не получаю данные с передающей стороны?
@TRomesh, 👍0
Обсуждение1 ответ
Проверьте адреса каналов чтения и записи.
Во-первых, значением по умолчанию является 0xE7E7E7E7E7
для канала 0 (RX_ADDR_P0) и 0xC2C2C2C2C2
для канала 1 (RX_ADDR_P1), см. технические данные. Убедитесь, что адрес передатчика (TX) совпадает с адресом приемника.
(RX) адрес канала.
Во-вторых, не следует устанавливать адрес канала 0x0
, даже если он является общим для TX и RX. Это примечание взято из таблицы данных:
Адреса, уровень которых меняется только один раз (т. е. 000FFFFFFF), часто можно обнаружить в шум и может дать ложное обнаружение, что может привести к увеличению частоты ошибок пакетов. Адреса как продолжение преамбулы (переключение высокого-низкого уровня) также увеличивает частоту ошибок пакетов
На самом деле адрес канала равен «0», который представляет собой строку с неявным нулевым ограничителем, что соответствует 30 00, что все равно плохо. Также я не знаю, как библиотека заполняет недостающие 3 байта адреса. В любом случае незнание настоящего адреса может оказаться хлопотным. Лучше попробуйте что-нибудь вроде «Link1» или что-нибудь из 5 символов., @Kwasmich
- вопрос по трубке nRF24L01
- Использование функции уровня сигнала модуля nRF24L01
- Как автоматически сбросить nrf24l01+ с кодом?
- Как отправить данные датчика с Arduino через NRF24L01 на Raspberry Pi
- Модуль nRF24L01 с использованием библиотеки Mirf работал, а затем остановился
- Модуль Bluetooth против беспроводного модуля Arduino
- nRF24L01 + потеря пакетов, вызванная считыванием Arduino и связью с датчиками
- Ошибка записи NRF24L01
попробуйте
myRadio.readBytes(&data, sizeof(data));
Какую библиотеку nRF24 вы используете?, @Juraj@Юрай RF24.h от TMRh20, @TRomesh
он не реализует Stream, поэтому у него нет readBytes, @Juraj
@Юрай, ты имеешь в виду myRadio.available() >= sizeof(data) ?, @TRomesh
он не будет работать. Я удалил комментарий. структура больше буфера приема, @Juraj
он может передавать только 32 байта полезной нагрузки. отправлять и получать данные частями по 32 байта, @Juraj
Так стоит ли мне изменить структуру? Это работало несколько недель назад, а сейчас нет. Я купил новый модуль Arduino и NRF24, но все равно безуспешно :(, @TRomesh
с той же библиотекой и этой структурой? возможно, это сработало, но не передал весь массив символов, @Juraj
измените
while (myRadio.available())
наif (myRadio.available())
, @Juraj