nRF24L01+ : побеждаем модуль.

Тема в разделе "Проводная и беспроводная связь", создана пользователем ИгорьК, 19 июн 2014.

  1. Plant

    Plant Нерд

    прошивка "написана" в среде Algorithm Builder- так сказать графический ассемблер. Вряд-ли она кого-то взбодрит на форуме, где ардуино форева.
     
  2. b707

    b707 Гуру

    тем более не интересно. Это вообще не программирование...
     
  3. Plant

    Plant Нерд

    А например, японский - это не язык. Ибо я его не знаю...
     
  4. bardar

    bardar Нуб

    парни подскажите какой мне надо купить модуль для беспроводного подключения Bluetooth к программе программирования регуляторов скорости
    1. BLE-Nano-Board
    2.Nano V3.0 с NRF24l01 +
     
  5. parovoZZ

    parovoZZ Гуру

    NRF24l01 - это не блютуз, хотя видел попытки его реализации на этой микре.
     
  6. EDS

    EDS Нуб

    Добрый день всем!
    Разобрался с данным модулем благодаря данному посту, спасибо автору поста и всем участникам.
    На текущий момент сделал пару: один приемник и один передатчик.
    Пошел дальше: один передатчик и два приемника.
    Честно отплясал с бубном, пока настраивал и монтировал, НО,
    по отдельности пары передатчик - приемник работают, когда включаешь второй приемник, работает в основном один приемник, либо поработают оба и перестают.
    Кто-то делал решение в конфигурации один передатчик и несколько приемников?
     
  7. Un_ka

    Un_ka Гуру

    Вот это должно помочь.
     
  8. EDS

    EDS Нуб

    Un_ka, спасибо за ответ, проверил, скейтчи, ошибок не нашел, вопрос заключался в том, делал, кто-то конфигурацию один приемник и два передатчика. Если выложу скейтчи, сможете посмотреть?
     
  9. Un_ka

    Un_ka Гуру

    Выкладывайте только под спойлером , и оформляя как код.
    Код (C++):
    //код
     
  10. EDS

    EDS Нуб

    // Мега - передатчик
    //======================
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <Keypad.h>
    //++++++++++++++++++++++++

    #include <SPI.h> // библиотека для работы с шиной SPI
    #include "nRF24L01.h" // библиотека радиомодуля
    #include "RF24.h" // ещё библиотека радиомодуля

    //==========================

    int LED = 13; // Подключаем светодиод на 13 пин arduino
    const byte ROWS = 4; // 4 строки
    const byte COLS = 4; // 3 столбца

    //Массив символов
    char hexaKeys[ROWS][COLS] = {
    {'1','2','3', 'A'},
    {'4','5','6', 'B'},
    {'7','8','9', 'C'},
    {'*','0','#', 'D'}
    };

    byte rowPins[ROWS] = {2, 4, 6, 8}; //Подключение пинов строк
    byte colPins[COLS] = {10, 12, 14, 16}; // Подключение пинов столбцов

    //Создание класса для клавиатуры
    Keypad Keypres = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

    LiquidCrystal_I2C lcd(0x27,20,4); /* Задаем адрес и размерность дисплея.
    При использовании LCD I2C модуля с дисплеем 20х04 ничего в коде изменять не требуется, cледует только задать правильную размерность */

    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    RF24 radio(48,53); // для Меги
    const uint64_t pipe = 0xE8E8F0F0E1LL;

    byte counter;
    byte x = 2;

    const int ledPin = 13; // номер выхода светодиода

    // переменные
    int buttonState1 = 0; // переменная для хранения состояния кнопки
    int buttonState2 = 0;

    //const int x=0;
    int val=0;
    int kkey=0;
    char a;


    void setup() {
    Serial.begin(9600); //открываем порт для связи с ПК

    //===============================================================
    lcd.init(); // Инициализация lcd
    lcd.backlight(); // Включаем подсветку
    // Курсор находится в начале 1 строки
    lcd.print("Hello, world!"); // Выводим текст
    lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
    lcd.backlight();
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    radio.begin(); //активировать модуль

    delay(500); // И посмотрим на это пять секунд.

    radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл
    radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток)
    radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал
    radio.setPayloadSize(32); //размер пакета, в байтах

    radio.openWritingPipe(pipe);
    radio.setChannel(0x60); //выбираем канал (в котором нет шумов!)

    radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
    radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
    radio.powerUp(); //начать работу
    radio.stopListening(); //не слушаем радиоэфир, мы передатчик
    pinMode(22, INPUT);
    pinMode(24, INPUT);

    }
    void loop() {

    //=================================================

    // Записываем в переменную Key значение нажатой кнопки
    char Key = Keypres.getKey();

    // Передаем в порт данные о том какая нажата кнопка
    if (Key){
    // Serial.println(Key);
    a = Key;
    //Serial.println("a = ");
    //Serial.println(a);
    Serial.print(a);
    }
    if (Key){
    lcd.clear(); // очистка дисплея
    lcd.setCursor(0,0);
    lcd.print(Key);
    }

    radio.write(&a,sizeof(a));
    }
     
    Последнее редактирование: 2 апр 2020
  11. EDS

    EDS Нуб

    Код передатчика.
     
  12. EDS

    EDS Нуб

    // Nano - приемник

    #include <SPI.h>
    #include "nRF24L01.h"
    #include "RF24.h"

    RF24 radio(9,10); // "создать" модуль на пинах 9 и 10 Для Уно
    //RF24 radio(9,53); // для Меги
    const uint64_t pipe = 0xE8E8F0F0E1LL;

    byte key;
    char s;
    void setup(){
    Serial.begin(9600); //открываем порт для связи с ПК
    radio.begin(); //активировать модуль
    radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл
    radio.setRetries(15,15); //(время между попыткой достучаться, число попыток)
    radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал
    radio.setPayloadSize(32); //размер пакета, в байтах

    // radio.openReadingPipe(1,address[0]); //хотим слушать трубу 0
    radio.openReadingPipe(1,pipe); // Открываем трубу и
    radio.setChannel(0x60); //выбираем канал (в котором нет шумов!)

    radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
    radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
    //должна быть одинакова на приёмнике и передатчике!
    //при самой низкой скорости имеем самую высокую чувствительность и дальность!!
    radio.powerUp(); //начать работу
    radio.startListening(); //начинаем слушать эфир, мы приёмный модуль
    pinMode(7, OUTPUT);
    digitalWrite(7, HIGH);
    pinMode(8, OUTPUT);
    digitalWrite(8, HIGH);


    }

    void loop() {
    byte pipeNo, gotByte;

    radio.read( &gotByte, sizeof(gotByte) ); // чиатем входящий сигнал

    Serial.print("D7=");
    Serial.print(digitalRead(7));
    Serial.print(" D8=");
    Serial.println(digitalRead(8));

    while( radio.available(&pipeNo)){ // слушаем эфир со всех труб

    radio.read( &gotByte, sizeof(gotByte) ); // чиатем входящий сигнал

    if (gotByte - 48 == 3){digitalWrite(7, HIGH);
    digitalWrite(8, HIGH);

    Serial.print("D7=");
    Serial.print(digitalRead(7));
    Serial.print(" D8=");
    Serial.println(digitalRead(8));}

    if (gotByte - 48 == 4){digitalWrite(7, LOW);
    digitalWrite(8, LOW);

    Serial.print("D7=");
    Serial.print(digitalRead(7));
    Serial.print(" D8=");
    Serial.println(digitalRead(8));}

    }

    }
     
    Последнее редактирование: 2 апр 2020
  13. EDS

    EDS Нуб

    код приемника, заранее извиняюсь, отправляю через спойлер первый раз
     
  14. Un_ka

    Un_ka Гуру

    Во-первых:
    IMG_20200402_130352.jpg
    Во-вторых:
    Нужно заменить
    Код (C++):
    radio.write(&a,sizeof(a));
    на
    Код (C++):
    radio.write(&a,sizeof(a),1);
     
  15. EDS

    EDS Нуб

    Un_ka, спасибо, пробую - меняю))))
     
  16. EDS

    EDS Нуб

    поменял в передатчике на
    radio.write(&a,sizeof(a),1);
    работает также, в приемнике нужно менять
    radio.read( &gotByte, sizeof(gotByte) );
    ?
     
    Последнее редактирование: 2 апр 2020
  17. Un_ka

    Un_ka Гуру

    менять не надо
     
  18. EDS

    EDS Нуб

    Un_ka, в какую сторону рыть, что еще проверить?
     
  19. Alexey_nl

    Alexey_nl Нуб

    Ребят, у кого проблемы с подключением данных модулей, рекоммендую попробовать либу https://github.com/nRF24/RF24.
    До того, как нашел ее, пользовался этой - https://github.com/maniacbug/RF24, но сней была целая куча проблем:
    • Пришлось обернуть антену фольгой, чтобы уходил сигнал от передатчика.
    • Использовал powerUp() в loop, чтобы не было задержки передачи сигнала.
    • Бывало, что сигналы приходили в неправильном порядке, из за чего ломалась логика программы.
    • Нестабильная работа в целом.
    С либой https://github.com/nRF24/RF24 все проблемы, что описал выше исчезли + все работает без кондеров, подтяжек и отдельных элементов питания. Сами модули - дешевый китай.
     
  20. Un_ka

    Un_ka Гуру

    Если помехи по питанию будут эта библиотека вам не поможет. Последний релиз 3 мес. назад. Это, конечно, хорошо. Полностью ли она соответствует оригинальной библиотеке по наличию функций? Описание,к я понимаю здесь.