Проблема с NRF24L01
Я пробовал и пробовал, чтобы nrf24l01 работал в течение некоторого времени, и, похоже, они никогда не работают. Прямо сейчас я просто пытаюсь включить и выключить светодиод по радио, но он не работает.
Вот код для передатчика
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define button 5
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
boolean buttonState = 0;
void setup() {
pinMode(5, INPUT_PULLUP);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
}
void loop() {
buttonState = digitalRead(button);
radio.write(&buttonState, sizeof(buttonState));
}
А вот код получателя
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
int led = 2;
RF24 radio(7, 8); // CE, CSN
boolean buttonState = 0;
const byte address[6] = "00001";
void setup() {
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MIN);
radio.startListening();
}
void loop() {
radio.startListening();
while (!radio.available());
radio.read(&buttonState, sizeof(buttonState));
if (buttonState == HIGH)
{
digitalWrite(led, HIGH);
}
else
{
digitalWrite(led, LOW);
}
}
У меня есть регулятор напряжения, который выводит arduino 5 В на чип 3,3, поэтому я не думаю, что отсутствие конденсатора (что рекомендовали другие) является проблемой. У меня оба радиочипа подключены к наноустройствам arduino.
Для передатчика и приемника у меня есть CE=7,CSN=8, SCK=13, MO=11 и MI=12
Я также знаю, что мой индикатор работает, и код моей кнопки работает. Есть ли проблема с моим кодом или есть вероятность, что мои чипы сломаны, даже если я использую регулятор напряжения
@Jake Blocker, 👍2
Обсуждение4 ответа
Почти уверен, что ваша проблема в том, что вы не используете конденсатор. Я использовал конденсатор емкостью 10 мкФ, и он отлично работает.
Вы устанавливаете конденсатор на контакты 1 и 2, убедитесь, что заземление находится на выводе 1.
Конденсатор должен обеспечивать достаточную подачу энергии, когда он в ней нуждается. Без конденсатора это приводит к ненадежной связи.
Если у вас есть другие проблемы, это отличное краткое видео об использовании приемопередатчиков NRF24L01+: https://www.youtube.com/watch?v=kDTJULtFPgE
Нелегко найти проблему удаленно. Вот что я бы сделал:
Моей первой проблемой всегда были связи. Я отказался от использования макетов и других разъемов. Вместо этого используйте пайку, чтобы убедиться, что ваша схема правильно подключена.
Добавьте несколько последовательных.println() в оба кода, чтобы увидеть, что именно будет отправлено и что было получено.
В коде отправителя добавьте задержку(100) в цикл. Это дало бы буферам модуля возможность обрабатывать.
Вы можете улучшить его еще больше, проверив значение кнопки, которое вы прочитали, со старым значением, и отправив значение только в том случае, если состояние изменилось.
Сначала проверьте эти вещи:
- Ваш источник питания обеспечивает постоянное напряжение 3,3 В и минимум 0,5 А(500 мА)?
- Вы на правильной скорости передачи последовательных данных?
- Является ли путь от радио до Arduino как можно короче?
- Ваши провода МИСО и МОСИ переплетены друг с другом?
- Попробуйте изменить свой CE на контакт 9, а CSN-на контакт 10.
Если ничего из этого не поможет, пожалуйста, скажите мне, какую библиотеку вы используете. У меня было много проблем с библиотекой RF24, так что, возможно, попробуйте использовать библиотеку NRFLite.
Интересно. У меня также была проблема с nRF24L01, поэтому я попробовал ваш код (измененный для переключения передатчика и печати вывода). Возможно, у вас та же проблема, что и у меня (nRF24L01 непрерывно считывающий закрытый канал), поэтому я изменил ваш код следующим образом:
void loop() {
uint8_t pipeNum;
radio.startListening();
while (!radio.available(&pipeNum));
radio.read(&buttonState, sizeof(buttonState));
if (pipeNum < 2) {
if (buttonState == HIGH)
{
digitalWrite(led, HIGH);
Serial.println("ON");
}
else
{
digitalWrite(led, LOW);
Serial.println("OFF");
}
}
}
и тогда это сработало для меня. PS: Я обычно добавляю строку "в то время как (!Последовательный);" после последовательного.начинайте удерживать выход до тех пор, пока не будет установлен монитор.
- Arduino Nano nRF24L01+ DFPlayer Mini SPI Проблема
- Проблемы nRF24l01+. Данные принимаются как 0
- nRF24L01 +pa +lna link не связывается
- Код правильный? Nrf24l01
- Какие контакты можно использовать для выбора микросхемы (CS, CC) на Arduino Nano Every?
- Пустое значение не игнорируется, как должно быть.
- Более 4 MCP23S17 на 1 шине SPI
- RaspberryPi Pico SPI и nrf24l01
Конденсатор не используется для регулирования напряжения, например, он используется для того, чтобы убедиться, что подаваемое напряжение "чистое", когда радио передает, что оно очень быстро потребляет "много" тока, и если регулятор не может справиться с этим скачком, напряжение падает. Я обнаружил, что использование конденсатора в этих радиоприемниках устраняет некоторые проблемы., @Chad G