Не могу заставить работать nRF24L01
Я уже несколько дней пытаюсь заставить работать мою беспроводную модель nRF24L01. Для этого я следую инструкции по следующей ссылке.
http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
Я точно следовал ссылке, ничего не менял, разве что не добавил блокировочный конденсатор, так как, по их словам, он улучшит производительность и уменьшит нагрев. Однако мой блок вообще не работает.
Вот фотографии моего оборудования,


Что касается кода, я не стал ничего менять в руководстве, но передам его, чтобы упростить отслеживание кода передачи.
/* YourDuinoStarter Example: nRF24L01 Transmit Joystick values
- WHAT IT DOES: Reads Analog values on A0, A1 and transmits
them over a nRF24L01 Radio Link to another transceiver.
- SEE the comments after "//» в каждой строке ниже
- CONNECTIONS: nRF24L01 Modules See:
http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
1 - GND
2 - VCC 3.3V !!! NOT 5V
3 - CE to Arduino pin 9
4 - CSN to Arduino pin 10
5 - SCK to Arduino pin 13
6 - MOSI to Arduino pin 11
7 - MISO to Arduino pin 12
8 - UNUSED
-
Analog Joystick or two 10K potentiometers:
GND to Arduino GND
VCC to Arduino +5V
X Pot to Arduino A0
Y Pot to Arduino A1
- V1.00 11/26/13
Based on examples at http://www.bajdi.com/
Questions: terry@yourduino.com */
/*-----( Import needed libraries )-----*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
/*-----( Declare Constants and Pin Numbers )-----*/
#define CE_PIN 9
#define CSN_PIN 10
#define JOYSTICK_X A0
#define JOYSTICK_Y A1
// ПРИМЕЧАНИЕ: «LL» в конце константы означает тип «LongLong»
const uint64_t pipe = 0xE8E8F0F0E1LL; // Определяем канал передачи
/*-----( Declare objects )-----*/
RF24 radio(CE_PIN, CSN_PIN); // Создать радио
/*-----( Declare Variables )-----*/
int joystick[2]; // Массив из 2 элементов, содержащий показания джойстика
void setup() /****** SETUP: RUNS ONCE ******/
{
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(pipe);
}//--(конец настройки)---
void loop() /****** LOOP: RUNS CONSTANTLY ******/
{
joystick[0] = analogRead(JOYSTICK_X);
joystick[1] = analogRead(JOYSTICK_Y);
radio.write( joystick, sizeof(joystick) );
}//--(конец основного цикла)---
/*-----( Declare User-written Functions )-----*/
//НИКТО
//*********( КОНЕЦ )***********
Код получения:
/* YourDuinoStarter Example: nRF24L01 Receive Joystick values
- WHAT IT DOES: Receives data from another transceiver with
2 Analog values from a Joystick or 2 Potentiometers
Displays received values on Serial Monitor
- SEE the comments after "//» в каждой строке ниже
- CONNECTIONS: nRF24L01 Modules See:
http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
1 - GND
2 - VCC 3.3V !!! NOT 5V
3 - CE to Arduino pin 9
4 - CSN to Arduino pin 10
5 - SCK to Arduino pin 13
6 - MOSI to Arduino pin 11
7 - MISO to Arduino pin 12
8 - UNUSED
- V1.00 11/26/13
Based on examples at http://www.bajdi.com/
Questions: terry@yourduino.com */
/*-----( Import needed libraries )-----*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
/*-----( Declare Constants and Pin Numbers )-----*/
#define CE_PIN 9
#define CSN_PIN 10
// ПРИМЕЧАНИЕ: «LL» в конце константы означает тип «LongLong»
const uint64_t pipe = 0xE8E8F0F0E1LL; // Определяем канал передачи
/*-----( Declare objects )-----*/
RF24 radio(CE_PIN, CSN_PIN); // Создать радио
/*-----( Declare Variables )-----*/
int joystick[2]; // Массив из 2 элементов, содержащий показания джойстика
void setup() /****** SETUP: RUNS ONCE ******/
{
Serial.begin(9600);
delay(1000);
Serial.println("Nrf24L01 Receiver Starting");
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();;
}//--(конец настройки)---
void loop() /****** LOOP: RUNS CONSTANTLY ******/
{
if ( radio.available() )
{
// Читаем полезную нагрузку данных, пока не получим все
bool done = false;
while (!done)
{
// Извлечь полезные данные
done = radio.read( joystick, sizeof(joystick) );
Serial.print("X = ");
Serial.print(joystick[0]);
Serial.print(" Y = ");
Serial.println(joystick[1]);
}
}
else
{
Serial.println("No radio available");
}
}//--(конец основного цикла)---
/*-----( Declare User-written Functions )-----*/
//НИКТО
//*********( КОНЕЦ )***********
Результат вывода на последовательный порт: Радио недоступно.
Кто-нибудь знает, куда мне двигаться дальше? Или как можно решить такую проблему? Я даже не знаю, в ком проблема: в отправителе, в получателе или в них обоих.
@Akkilah, 👍3
Обсуждение0
- вопрос по трубке nRF24L01
- Как подключить NodeMCU к NRF24L01
- Переключение каналов NRF24l01
- Arduino Nano nRF24L01+ DFPlayer Mini SPI Проблема
- Использование функции уровня сигнала модуля nRF24L01
- Как автоматически сбросить nrf24l01+ с кодом?
- NRF24L01+ PA не работает с Arduino Mega (работает с Nano)
- Пустое значение не игнорируется, как должно быть.
Если вам удастся избавиться от этого куска шлейфа, это может помочь — шлейф действительно не способствует работе SPI. Также можно попробовать снизить тактовую частоту SPI, чтобы компенсировать влияние шлейфа., @Majenko
«Нет радио» означает, что возникла проблема с проводкой., @Gerben
@Majenko: Я попытался замедлить SPI, как вы видите в коде ниже.
void setup() /****** НАСТРОЙКА: ЗАПУСКАЕТСЯ ОДИН РАЗ ******/ { Serial.begin(9600); Serial.println("Nrf24L01 Передача начинается"); радио.begin(); SPI.setClockDivider(SPI_CLOCK_DIV8); радио.openWritingPipe(канал); }//--(конец настройки)---Однако, чтобы вынуть ленточный кабель, мне понадобится несколько дней, так как мне нужно будет пойти и купить кабель :(, @Akkilah@Gerben: а если передатчика нет, как должен выглядеть вывод приемника в последовательном мониторе?, @Akkilah
Виноват. Это не та функция для проверки соединения. Попробуйте так:
if( !radio.isPVariant() ) Serial.println("Нет соединения SPI");, @Gerben@Gerben: Я проверяю свое SPI-соединение с помощью функции, которую вы мне дали, и никакой надежды. :(, @Akkilah
@Majenko: я поменял провод на обычный, но результат тот же, @Akkilah
@Majenko это сработало, это был конденсатор, после того как я его добавил, все заработало. Я сейчас плачу, @Akkilah
@Gerben :) все заработало после того, как я добавил конденсатор :), @Akkilah