NRF24 перестал работать.
- Войдите на сайт для отправки комментариев
Чт, 14/11/2019 - 12:57
Всем доброго времени суток! Имею многострадальный радио модуль 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();
}
}
это скетч приемника, передачи данных в нем нет. Если два таких скетча залить в две ардуины - связи не будет
Скетч передатчика для Ардуино:
#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)