Проблема с 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: Я обычно добавляю строку "в то время как (!Последовательный);" после последовательного.начинайте удерживать выход до тех пор, пока не будет установлен монитор.
- Проблемы nRF24l01+. Данные принимаются как 0
- nRF24L01 +pa +lna link не связывается
- Код правильный? Nrf24l01
- Какие контакты можно использовать для выбора микросхемы (CS, CC) на Arduino Nano Every?
- Пустое значение не игнорируется, как должно быть.
- Более 4 MCP23S17 на 1 шине SPI
- RaspberryPi Pico SPI и nrf24l01
- NRF24L01+ (библиотека TMRH20): Получатель получает пустые данные
Конденсатор не используется для регулирования напряжения, например, он используется для того, чтобы убедиться, что подаваемое напряжение "чистое", когда радио передает, что оно очень быстро потребляет "много" тока, и если регулятор не может справиться с этим скачком, напряжение падает. Я обнаружил, что использование конденсатора в этих радиоприемниках устраняет некоторые проблемы., @Chad G