NRF24L01+: где то тут спрятан косяк...

Тема в разделе "Arduino & Shields", создана пользователем cody_c++, 6 фев 2017.

?

Стоит ли переходить на NRF?

Голосование закрыто 7 фев 2017.
  1. Да, но только если руки прямые

    50,0%
  2. Обязательно, с ними просто работать

    0 голосов
    0,0%
  3. Нет, стоит остаться на LC12S

    50,0%
  1. cody_c++

    cody_c++ Нерд

    Доброго времени суток! Заранее хочу предупредить, что модули NRF я не выношу из-за крайней привередливости к использованию и питанию, их требованию к библиотеке и абсолютно дурацкого правила "когда шевельнул модуль в процессе работы, включай все заново, ведь он тут же дает сбой". Я лично всегда пользовался модулями LC12S или HC-12, и остался ими доволен. Они работают через serial, и крайне просты в использовании. Но в итоге мне пришлось работать с большими расстояниями, на которые способны только NRF с усилителями. Все как положено: схема спаяна, модуль в переходной плате, с напаянным конденсатором, кодЫ простЫЕ и успешно компилирующиеся, но столкнулся с очень интересной проблемой: два модуля NRF установили связь, передатчик сообщает об успешной отправке пакета, и приемник подтверждает получение. Но здесь спрятан косяк: данные по приходу превращаются в 0. Я пробовал менять плату управления, менять сами модули, пробовал разные примеры из библиотеки и менял каналы, проверял подключение и менял источник питания - НИ-ЧЕ-ГО. Всегда до приемника доходил 0. Я спрашивал у многих знакомых: все разводят руками. Еще один интересный номер: один раз пакеты стали успешно отправляться, до первой перезагрузки. Кроме кнопки reset ничего не трогали. КОД ПЕРЕДАТЧИКА
    Код (C++):
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>

    const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"
    RF24 radio(9, 10); // CE, CSN

    void setup(){
      Serial.begin(9600);

      radio.begin();
      delay(2);
      radio.setChannel(9);
     
       приемника.
      radio.setDataRate(RF24_1MBPS);
     
       RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
      radio.setPALevel(RF24_PA_HIGH);

      radio.openWritingPipe(pipe); // открываем трубу на передачу.
    }


    void loop()
    {

      int data = analogRead(0); // читаем значение

      radio.write(&data, sizeof(data)); // отправляем данные и указываем сколько байт пакет

      Serial.print("data: ");
      Serial.println(data);
    }
     
    КОД ПРИЕМНИКА
    Код (C++):
     #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>

    const uint64_t pipe = 0xF0F1F2F3F4LL;

    RF24 radio(9, 10); // CE, CSN

    void setup(){
      Serial.begin(9600);

      radio.begin();
      delay(2);
      radio.setChannel(9); // канал (0-127)

      radio.setDataRate(RF24_1MBPS);  

          // мощьность передатчика RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
      radio.setPALevel(RF24_PA_HIGH);
     
      radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe"
      radio.startListening(); // включаем приемник, начинаем слушать трубу
    }


    void loop()
    {
      int data;

      if (radio.available()){ // проверяем не пришло ли чего в буфер.
        radio.read(&data, sizeof(data)); // читаем данные, указываем сколько байт читать
     
        Serial.print("data: ");
        Serial.println(data);
      }
    }
     
     
    Последнее редактирование: 6 фев 2017
  2. cody_c++

    cody_c++ Нерд

    Забыл упомянуть: МОДУЛИ РАБОЧИЕ, пример из библиотеки "SCANNER" исправно работает.
     
  3. AlexBklnv

    AlexBklnv Нерд

    У меня при "аналогичном" коде все работает.
    Посмотрите, что вы отправляете.
    Или проверьте канал(не занят ли он кем).
     
  4. cody_c++

    cody_c++ Нерд

    Если прочитать внимательно мой код, то видно, что отправляемый пакет он также кидает в serial. И еще я упомянул, что менял каналы много раз(
     
  5. AlexBklnv

    AlexBklnv Нерд

    Прошу прощения, лагнуло окно и не увидел.
     
  6. sslobodyan

    sslobodyan Гик

    Здесь уже есть ОГРОМНАЯ тема по этим модулям. Я уже просто не знаю, что у вас может быть такого, что еще не описано в той теме. Прям какие-то мистические модули. А все потому, что никто не разбирается как они должны работать, а все тупо перебирают готовые библиотеки, пока не заработает :( Ну нет там чудес, если с электроникой все в норме (питание, контакты, антенны, конденсаторы). Не получается связь - выводите в порт состояние всех регистров и анализируйте, ищите причину. У меня в моей библиотеке даже настоящие модульки коннектятся с китайскими "каплями".
     
    ИгорьК и cody_c++ нравится это.