NRF24 перестал работать.

MsFedkin
Offline
Зарегистрирован: 12.12.2017

Всем доброго времени суток! Имею многострадальный радио модуль NRF24, проблемы с питанием у меня нет так-как есть модуль питания для NRF. Определенное время модули (у меня их 3) работали, без проблем как на Ардуино так и на Малинке. В один момент модули перестали работать (все 3). Какой бы я скетч не  загружал модули не работают. 

Этот скетч у меня работал, и на нем модуль перестал работать:

#include <SPI.h>                                          // Подключаем библиотеку  для работы с шиной SPI
#include <nRF24L01.h>                                     // Подключаем файл настроек из библиотеки RF24
#include <RF24.h>                                         // Подключаем библиотеку  для работы с nRF24L01+                                     

#define WITH_ARDUINO 

#define GREEN 6
#define RED 7
RF24  radio(9, 10);                              // Создаём объект radio   для работы с библиотекой RF24, указывая номера выводов nRF24L01+ (CE, CSN)
uint8_t  RPi [2];
const uint8_t leds[]  = {GREEN,RED};

void setup(){
    Serial.begin(9600);                      
    radio.begin();                                        // Инициируем работу nRF24L01+
    radio.setChannel(0x76);                               // Указываем канал приёма данных (от 0 до 127)
    radio.setDataRate     (RF24_1MBPS);                   // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Мбит/сек
    radio.setPALevel      (RF24_PA_HIGH);                 // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
    radio.enableDynamicPayloads();
    #ifdef WITH_ARDUINO
      radio.openReadingPipe (0,0xF0F0F0F0E1LL);            // Открываем i трубу с идентификатором F0F0F0F0E1LL для приема данных (на ожном канале может быть открыто до 6 разных труб, которые должны отличаться только последним байтом идентификатора)
      Serial.println(0);
    #else
      radio.openReadingPipe (6,0xF0F0F0F0E1LL); 
      Serial.println(6);
    #endif
    radio.startListening();                             // Включаем приемник, начинаем прослушивать открытую трубу
    for (size_t i = 0; i < sizeof(leds);i++)
    {
      pinMode(OUTPUT,leds[i]);
    }
}

void loop(){
    if(radio.available()){                                // Если в буфере имеются принятые данные        
       radio.read(&RPi,sizeof(RPi));
       
           for(size_t i = 0; i < sizeof(RPi);i++)
           {
             Serial.print(RPi[i]);
             Serial.print(' ');
             digitalWrite(leds[i],RPi[i]);  
           }  
           Serial.println();          
    }
}

 

b707
Offline
Зарегистрирован: 26.05.2017

это скетч приемника, передачи данных в нем нет. Если два таких скетча залить в две ардуины - связи не будет

MsFedkin
Offline
Зарегистрирован: 12.12.2017

Скетч передатчика для Ардуино: 


#include <SPI.h>                                          // Подключаем библиотеку для работы с шиной SPI
#include <nRF24L01.h>                                     // Подключаем файл настроек из библиотеки RF24
#include <RF24.h>                                         // Подключаем библиотеку для работы с nRF24L01+
#define BUTTON1 6
#define BUTTON2 7
RF24           radio(9, 10);                              // Создаём объект radio для работы с библиотекой RF24, указывая номера выводов nRF24L01+ (CE, CSN)
uint8_t            data[2];                                   // Создаём массив для передачи данных

void setup(){
    Serial.begin(9600);
    radio.begin();                                        // Инициируем работу nRF24L01+
    radio.setChannel(0x76);                                  // Указываем канал передачи данных (от 0 до 127), 5 - значит передача данных осуществляется на частоте 2,405 ГГц (на одном канале может быть только 1 приёмник и до 6 передатчиков)
    radio.setDataRate     (RF24_1MBPS);                   // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Мбит/сек
    radio.setPALevel      (RF24_PA_HIGH);                 // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
    radio.openWritingPipe (0xF0F0F0F0E1LL);               // Открываем трубу с идентификатором 0x1234567890 для передачи данных (на ожном канале может быть открыто до 6 разных труб, которые должны отличаться только последним байтом идентификатора)
    pinMode(BUTTON1,INPUT);
    pinMode(BUTTON2,INPUT);  
}

void loop(){
    data[0] = digitalRead(BUTTON1);
    data[1] = digitalRead(BUTTON2);
    Serial.println(data[0]+data[1]);
    
    radio.write(&data, sizeof(data));                     // отправляем данные из массива data указывая сколько байт массива мы хотим отправить
    
}

Скрипт для Малинки :

# это Python 3
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
from lib_nrf24 import NRF24
import time
import spidev


#Объявление кнопак
button1 = 17
button2 = 27
GPIO.setup(button1, GPIO.IN)
GPIO.setup(button2, GPIO.IN)

pipes = [[0xF0, 0xF0, 0xF0, 0xF0, 0xE1], [0xf0, 0xf0, 0xf0, 0xf0, 0xe1]]

radio = NRF24(GPIO, spidev.SpiDev())
radio.begin(0,21)
radio.setRetries(15,15)
radio.setPayloadSize(32)
radio.setChannel(0x76)

radio.setDataRate(NRF24.BR_1MBPS)
radio.setPALevel(NRF24.PA_MIN)
radio.setAutoAck(True)
radio.enableDynamicPayloads()
radio.enableAckPayload()

radio.openWritingPipe(pipes[1])
radio.openReadingPipe(0, pipes[0])
radio.printDetails()

while True:  
    subBuf1 = int(GPIO.input(button1))
    subBuf2 = int(GPIO.input(button2))
    buf = [subBuf1,subBuf2]

    # send a packet to receiver
    radio.write(buf)
    print ("Sent:")
    print (buf)