Arduino и библиотека RF24: связь прекращается через короткий промежуток времени
Я использую два Arduino Unos, приемопередатчики NRF24L01+ и несколько компонентов согласно этому сайту, на котором я следую второму руководству на этой странице: Учебное пособие по беспроводной связи Arduino — NRF24L01.
Я также использую точный код со страницы и настроил все в соответствии со схемами, однако через короткое время все перестает работать. Обычно между 15 и 30 секундами все остается включенным, но кажется, что приемопередатчики перестают обмениваться данными. Сброс платы Передачи (той, что с потенциометром) устранит проблему, пока она снова не остановится через 15 или 30 секунд.
Есть идеи, что может происходить?
@shanearthur, 👍0
Обсуждение4 ответа
Ваш вопрос не дает достаточно информации для продолжения. Настройка, как указано в руководстве, является хорошим началом, но не гарантирует отсутствие проблем. Это все еще может быть проблема из-за аппаратного обеспечения или прошивки.
Проблемы прошивки:
- Через некоторое время радиоданные могут быть повреждены, что проявляется как сбой радиотранзакции.
- Вы непреднамеренно изменили настройки регистрации радио.
Проблемы с оборудованием:
- На используемом вами радиоканале присутствуют шумовые помехи из-за городской среды (Wi-Fi и т. д.). Система работает лучше на другом канале?
- Радиостанция потребляет слишком много энергии и выключается, а затем возвращается к настройкам по умолчанию на микросхеме, а не к тем, которые установлены в скетче Arduino.
Есть несколько возможных причин:
Во-первых: Если вы впаяли конденсатор, его емкость может оказаться слишком большой, тогда, если появится пропадание напряжения, радиомодуль не восстановится от него из-за вашего большого размера конденсатора.
Во-вторых: это может быть неправильный конфиг. используйте RF24_PA_LOW, RF24_PA_HIGH и RF24_PA_MAX, но не MIN, поскольку он не поддерживается всеми модулями RF24.
В-третьих: это может быть пониженное напряжение, которое вызывает отказ платы arduino (а не радиомодуля). Тогда используйте альтернативный источник питания для радиомодуля. Но не забудьте оставить кабель заземления радиомодуля подключенным к ардуино (для данных).
У меня была такая же проблема, и до сих пор я не смог найти причину, почему это происходит.
В любом случае, мое временное решение состояло в том, чтобы заставить Arduino засыпать и просыпаться. В тот момент, когда плата переходит в спящий режим и перезагружается, все снова работает отлично.
Выполняйте этот код время от времени
#include <avr/wdt.h>
....
// включить сторожевой таймер. Это разбудит плату через 120 мс.
wdt_enable(WDTO_120MS);
// переходим в глубокий сон
if (true)
{
SMCR |= (1 << 2); // режим отключения питания
SMCR |= 1; // включить сон;
__asm__ __volatile__("sleep");
}
Я знаю, что это не решение, но это лучше, чем ничего, как в моем случае.
Изменить (решение, которое сработало для меня)
По какой-то причине, если я удаляю функцию millis(), код продолжает работать.
unsigned int end = millis() + 2500;
for(int i=0; i<2000; i++) // Новый код
// while (millis() < end) // Старый код перестает работать через 2 минуты ....
{
Я выполняю задачу в течение 2,5 секунд, поэтому я использовал функцию миллис...
У меня была похожая проблема. Мой NRF24L01+ проработал целый день, но потом он внезапно сломался, и я не смог его починить. Судя по моим онлайн-исследованиям, у NRF24L01+ много проблем с надежностью. В конце концов, я реализовал свой план Z: переключил NRF24L01+ на модуль bluetooth HC-05 (что очень просто!!), проверьте: https://www.instructables.com/How -to-Connect-HC-05-to-Windows-1011-Mac-Apple-Com/ Если вы продолжаете беспокоится, я предлагаю просто использовать HC-05, что сэкономит вам много головной боли и времени.
Однако UART на HC-05 передает данные намного медленнее, чем SPI на NRF24L01, но скорость мне была не нужна, поэтому коммутатор был для меня отличным решением.
- вопрос по трубке nRF24L01
- Как подключить NodeMCU к NRF24L01
- Переключение каналов NRF24l01
- Использование функции уровня сигнала модуля nRF24L01
- Как автоматически сбросить nrf24l01+ с кодом?
- NRF24L01+ PA не работает с Arduino Mega (работает с Nano)
- Пустое значение не игнорируется, как должно быть.
- Не получаем данные от NRF24L01
Я могу сказать, что многих проблем с этими модулями можно избежать путем серьезной развязки питания, подаваемого на модули. Поэтому не могли бы вы припаять электролитический конденсатор емкостью 5000-10000 мкФ и меньший керамический конденсатор непосредственно к GND и VCC модуля. Также было бы полезно узнать, какие у вас есть nRF, точные фотографии, если можно., @Avamander