NRF24L01+ Ошибка подтверждения начала работы
Я следовал многочисленным руководствам и учебным пособиям, чтобы модули NRF24L01+ работали с Arduino Uno. Я заменил на настоящую Arduino и попробовал 4 разных модуля NRF. Все без везения.
Я пытаюсь заставить работать самый простой пример из Простая демонстрация трансивера nRF24L01+ 2,4 ГГц.
Подключение оборудования:
Простой тестовый код TX:
// SimpleTx - мастер или передатчик
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN 9
#define CSN_PIN 10
const byte slaveAddress[5] = {'R','x','A','A','A'};
RF24 radio(CE_PIN, CSN_PIN); // Создаем радио
char dataToSend[10] = "Message 0";
char txNum = '0';
unsigned long currentMillis;
unsigned long prevMillis;
unsigned long txIntervalMillis = 1000; // отправляем раз в секунду
void setup() {
Serial.begin(9600);
Serial.println("SimpleTx Starting");
radio.begin();
radio.setDataRate( RF24_250KBPS );
radio.setRetries(3,5); // задержка, счет
radio.openWritingPipe(slaveAddress);
}
//=====================
void loop() {
currentMillis = millis();
if (currentMillis - prevMillis >= txIntervalMillis) {
send();
prevMillis = millis();
}
}
//=====================
void send() {
bool rslt;
radio.stopListening();
rslt = radio.write( &dataToSend, sizeof(dataToSend) );
// Всегда используйте sizeof(), так как он дает размер как количество байтов.
// Например, если бы dataToSend был int, sizeof() правильно возвращал бы 2
Serial.print("Data Sent ");
Serial.print(dataToSend);
if (rslt) {
Serial.println(" Acknowledge received");
updateMessage();
}
else {
Serial.println(" Tx failed");
}
}
//================
void updateMessage() {
// чтобы вы могли видеть, что отправляются новые данные
txNum += 1;
if (txNum > '9') {
txNum = '0';
}
dataToSend[8] = txNum;
}
Последовательный монитор:
Использование radio.printDetails();
возвращает:
Пожалуйста, дайте мне знать, что мне не хватает.
@Jak, 👍0
Обсуждение1 ответ
Arduino 3V3 не обеспечивает достаточного тока. Чтобы устранить это как источник вашей проблемы, вы можете использовать керамический конденсатор емкостью 100 мкФ между контактами VCC и GND модуля nRF24L01+ или купить Понижающий преобразователь 5V в 3V3, специально разработанный для nRF24L01.
- вопрос по трубке nRF24L01
- Использование функции уровня сигнала модуля nRF24L01
- Как автоматически сбросить nrf24l01+ с кодом?
- Не получаем данные от NRF24L01
- Как отправить данные датчика с Arduino через NRF24L01 на Raspberry Pi
- Модуль nRF24L01 с использованием библиотеки Mirf работал, а затем остановился
- Модуль Bluetooth против беспроводного модуля Arduino
- nRF24L01 + потеря пакетов, вызванная считыванием Arduino и связью с датчиками
Не могли бы вы загрузить немодифицированный пример PingPair и посмотреть, работает ли он?, @Avamander
Где код принимающей стороны? Если получателя нет, отправитель не получит обратно пакет ACK, и вы получите сообщение об ошибке «TX failed»., @Gerben
Что это:
uint8_t slaveAddress[5] = {0xF0F0F0F0A1LL, 0XF0F0F0F0B1LL, 0XF0F0F0F0C1LL, 0XF0F0F0F0D1LL, 0XF0F0F0F0E1LL};
? Как вы ожидаете, что такие большие значения поместятся вuint8_t
??? Компилятор интерпретирует это какuint8_t slaveAddress[5] = {0xA1, 0xB1, 0xC1, 0xD1, 0xE1};
. Это то, что вы хотели? Думаю, нет. Также посмотрите здесь https:///github.com/nRF24/RF24/blob/master/RF24.h#L246 как должен формироваться адрес., @AnT@AnT Я пытался сделать то же самое, что и один из ответов здесь: https://arduinoprosto.ru/q/65249/nrf24l01-tmrh20-library-receiver-gets-blank-data, прежде чем вы также прокомментировали это. Спасибо, обновили вопрос и код., @Jak
Большое спасибо всем вам. Не уверен, почему я ожидал, что функция radio.write вернет True без принимающей стороны. Работает., @Jak
Как вы получили
RF_CH=0x76
? Это не радиоканал по умолчанию при включении питания, поэтому вы не показываете полную версию кода?, @MichaelT