Вопросы по NRF24L01

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Скорость обязательно, мощность пофиг на самом деле.

На 1-ый взгляд затыков быть не должно..

Вот что попробуй, у тебя 100мс задержки идет. Поставь пол секунды, посмотри что будет. Кажется что то в этом у меня было.
 
  • Лойс +1
Реакции: Matadon

Matadon

✩✩✩✩✩✩✩
6 Окт 2019
25
0
Скорость обязательно, мощность пофиг на самом деле.

На 1-ый взгляд затыков быть не должно..

Вот что попробуй, у тебя 100мс задержки идет. Поставь пол секунды, посмотри что будет. Кажется что то в этом у меня было.
Сейчас попробую
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Я когда тестировал пульт проверял ответы, т.е. есть минимальное время, когда оно успевает отправить. но 50 раз в секунду точно работает. Так что не во времени дело. НО есть одно но. Есть тайм-аут отправки. Там время может быть больше чем задержка и тогда коллизия случается.
Функция write возвращает значение ИСТИНА если отправка удачна и ЛОЖЬ если нет. Надо проанализировать значение и скажем если фигня вывести в порт что нибудь. Или если нет порта, то зажечь светодиод. Так же на приемнике можно в случае если нет данных выводить что нибудь, только без задержек по времени. Можно будет понять что косячит.
 
  • Лойс +1
Реакции: Matadon

Matadon

✩✩✩✩✩✩✩
6 Окт 2019
25
0
Я когда тестировал пульт проверял ответы, т.е. есть минимальное время, когда оно успевает отправить. но 50 раз в секунду точно работает. Так что не во времени дело. НО есть одно но. Есть тайм-аут отправки. Там время может быть больше чем задержка и тогда коллизия случается.
Функция write возвращает значение ИСТИНА если отправка удачна и ЛОЖЬ если нет. Надо проанализировать значение и скажем если фигня вывести в порт что нибудь. Или если нет порта, то зажечь светодиод. Так же на приемнике можно в случае если нет данных выводить что нибудь, только без задержек по времени. Можно будет понять что косячит.
Хмм... подумаю, как это реализовать, попробую
Спасибо) Отпишусь о результатах)
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Я тут сверился с описанием и вроде как write будет работать корректно если стоит подтверждение приема.. но я что то сейчас засомневался. Но в любом случае лучше проверить результат - ЛОЖЬ может быть и когда буфер забит или еще какая ошибка передачи.
Вот неплохое руководство с описанием по NRF https://wiki.iarduino.ru/page/NRF24L01-trema/
 
  • Лойс +1
Реакции: Matadon

Matadon

✩✩✩✩✩✩✩
6 Окт 2019
25
0
Я тут сверился с описанием и вроде как write будет работать корректно если стоит подтверждение приема.. но я что то сейчас засомневался. Но в любом случае лучше проверить результат - ЛОЖЬ может быть и когда буфер забит или еще какая ошибка передачи.
Вот неплохое руководство с описанием по NRF https://wiki.iarduino.ru/page/NRF24L01-trema/
Статья очень классная и подробная, спасибо
Но затык со скоростью 250Кбит/с я так и не решил, не знаю в чём ещё может быть проблема
Единственное, что могу допустить - это шумы
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Вот тут в 1-ом сообщении я писал про выбор канала. Тестирует весь диапазон, можно проверить текущий эфир и выбрать канал
 
  • Лойс +1
Реакции: Matadon

Matadon

✩✩✩✩✩✩✩
6 Окт 2019
25
0
Вот тут в 1-ом сообщении я писал про выбор канала. Тестирует весь диапазон, можно проверить текущий эфир и выбрать канал
1600636994861.png1600637591302.png

Я так понимаю, если эти строки бегут и это всё на 250Кбит/с, значит у меня в коде ошибка изначально была?
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Не факт, строки бегут показываю работу. Но то, что количество передачи и приемов не совпадает говорит об отсутствии связи.
Там надо хитро нажимать на ресет так. что бы Start с номером канала совпадало в обоих каналах. Сейчас уже не вспомню, что надо стартовать раньше, в каком то коде есть начальная задержка.
 

Matadon

✩✩✩✩✩✩✩
6 Окт 2019
25
0
Эврика!
Я нашёл причину) Она оказалась весьма нелепой и простой))
Одна из ардуинок, зараза, которые я использовал была повреждена
Я только потом об этом вспомнил, как-то раз с чем-то там экспериментировал и случайно отпустил проводок, а он, по закону подлости конечно, упал и слегка её коротнул) Я через секунду убрал, но лёгкий, электронный запашочек я учуял) При этом она работала дальше) А теперь, когда у меня возникла такая козня с радиомодулями я решил измерить активное напряжение у неё сейчас и увидел, что не ~4,8v - 5,2v, как положено было быть, а скудненьких 2,73v)
Заказал парочку новых ардуинок, прошил, проверил и бинго))
Для примера взял маааленькую релюшку SDS Relais DS1-M DC5V (классная) и по радио её замыкал и она это сделала))
В общем, мужики, спасибо большое за участие) Так или иначе благодаря вам я и знания подтянул и навыков добавил))
 

Максименко Пётр

✩✩✩✩✩✩✩
24 Ноя 2020
1
0
Добрый вечер. Возник вопрос, хочу сделать гусеничное шасси, движки есть, NRF24L01 тоже и т.д. Как я понял для самих шасси нужны двигатели, конденсаторы, Ардуино, NRF24L01 с антенной А для пульта Ардуино, NRF24L01 с антенной и джостик.
И тут возникло несколько вопросов:
  • Как это всё подключить(если не сложно то можно схему)
  • какой взять пульт
  • как правильно для этого написать код, сколько не пытался, написал бред
Заранее спасибо
 

gfg_gfg

✩✩✩✩✩✩✩
1 Дек 2020
1
0
Приветствую ардуинщики. В теме ардуино я не совсем новичок,но и до среднего уровня врядли дохожу.
Вообщем делаю рюкзак для велосипедиста с поворотниками. Разумеется "беспроводной". Соеденяю две ардуинки с помощью NRF24l01.
Скетч взял и переработал с уроков Alex-а,но никак не могу довести его до ума.На передатчике стоит выключатель, а на приёмнике две адресные матрицы 8x8 соединённые вместе. Вообщем проблема в том,что когда переходишь выключатель в ON матрицы забираются,но вот при переводе его в OFF. Матрицам глубоко пофиг и они продолжают гореть. Как сделать этот выключатель на 1-ной плате я понимаю и даже делаю. Но вот при соединении двух мозга не хватает... Помогите пожалуйста.))

Приёмник:
#include "Adafruit_NeoPixel.h"
#define LED_COUNT 128
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"


RF24 radio(9, 10);
//RF24 radio(9,53);

byte recieved_data[3];
byte LED_PIN = 6;


byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  Serial.begin(9600);
  pinMode(LED_PIN, OUTPUT);
 

  radio.begin();
  radio.setAutoAck(1);         
  radio.setRetries(0, 15);   
  radio.enableAckPayload();   
  radio.setPayloadSize(32);   

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

  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();  //начинаем слушать эфир, мы приёмный модуль
  strip.begin();
}

void loop() {
  byte pipeNo;
  while ( radio.available(&pipeNo)) {  // слушаем эфир со всех труб
    radio.read( &recieved_data, sizeof(recieved_data) );         // чиатем входящий сигнал
    digitalWrite(LED_PIN, recieved_data[0]);
    //то бишь 0 или 1
    for (int i = 0; i < LED_COUNT; i++)
  {
    strip.setPixelColor(i, strip.Color(255, 0, 0)); // Красный цвет.
  }
  // Передаем цвета ленте.
  strip.show();
  // Ждем 500 мс.
  delay(500);
 
 
  }
}
Передатчик:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

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

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб

byte button = 3;  // кнопка на 3 цифровом


byte transmit_data[3]; // массив, хранящий передаваемые данные
byte latest_data[3]; // массив, хранящий последние переданные данные
boolean flag; // флажок отправки данных

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

  pinMode(button, INPUT_PULLUP); // настроить пин кнопки

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

  radio.openWritingPipe(address[0]);   //мы - труба 0, открываем канал для передачи данных
  radio.setChannel(0x65);  //выбираем канал (в котором нет шумов!)

  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();  //не слушаем радиоэфир, мы передатчик
}

void loop() {

  transmit_data[0] = !digitalRead(button); // инвертированный (!) сигнал с кнопки

  for (int i = 0; i < 3; i++) { // в цикле от 0 до числа каналов
    if (transmit_data[i] != latest_data[i]) { // если есть изменения в transmit_data
      flag = 1; // поднять флаг отправки по радио
      latest_data[i] = transmit_data[i]; // запомнить последнее изменение
    }
  }

  if (flag == 1) {
    radio.powerUp(); // включить передатчик
    radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
    flag = 0; //опустить флаг
    radio.powerDown(); // выключить передатчик
  }

}
 
Изменено:

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
там где приёмник между 45 и 46 строкой
выведите в ком порт recieved_data[0], оно хоть изменяется?, led_pin что запитывает, как включен? не через мосфит случайно? если да, то есть ли сопротивление между затвором и стоком? У меня стоит 510 КОм, можно 10, можно хоть сколько, но если его нет, то при выключении питания у меня мосфит не вырубало, но я использовал оптопару, а как у Вас я не знаю, надо схему глядеть и если значение выходит нормальное, надо думать о схемотехники
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Приемник. Что по вашему делает эта строка ?
digitalWrite(LED_PIN, recieved_data[0]);

Для того, что бы погасить ленту, надо все светодиоды "зажечь" абсолютно черным цветом, т.е. RGB(0,0,0) или, как в этой библиотеке, strip.Color(0, 0, 0)
У вас же лента просто загорается и все. Нигде не гаснет.
 
  • Лойс +1
Реакции: DAK

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
Точно, только сейчас увидел, что strip при инициализации юзает этот самый led_pin. Надо просто условие в 46 строке...
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
В наличии есть NRF24L01 с усилителем и антенной. Покупались то ли у Greatwall, то ли Wawgat - не помню.
Смотрел недавно видео по тесту на дальность и пришел к такой мысли -а что, если использовать не родные антенны, а самодельные?
Так называемый "клевер"передающий,а также узконаправленную спиральную антенну на приёмнике - с усилением в районе 8ДБи.
Что думаете по этому поводу?
 

Nikanor

★★✩✩✩✩✩
1 Окт 2020
180
52
уверен, что попытка эксперимента вреда не принесёт, только пользу и новые знания.
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,695
472
@derungebundener, гуглите книгу "Карл Ротхаммель. Антенны". Там есть ответы на такие вопросы, причём понятным языком, без заумностей.
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@Nikanor, Эксперимент уже был с самодельной спиральной антенной для 5.8ГГц видеопередатчика. Ничего не сжег :)
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,695
472
Ничего не сжег
Даже если и сжечь - потеря будет небольшая. Вообще для таких экспериментов нужен бы характериограф, чтобы не тыкаться вслепую. Однако на такую частоту это недешёвое удовольствие.:cry:
 

Pasha_N

✩✩✩✩✩✩✩
27 Сен 2018
9
0
Всем доброго времени суток! Проблема такая: есть NRF24L01 присоединённая к ардуино и то и то рабочее и всё прошивается, НО нужно мне поменять канал с 75, который прошит по умолчанию, если не указывать конкретно в прошивке, на 85, но при изменении канала в прошивке он не меняется. Собирал анализатор спектра и просто заливал nrf listen air в ардуино, чтобы проверить изменение канала. Вопрос такой: как или где может быть косяк? При работе контроллера, после заливки этой прошивки, каких либо глюков не наблюдалось.Снимок.JPG
 

Fleshdeck

★★★✩✩✩✩
19 Янв 2019
349
174
Киев
1. За использование каналов 83+ могут тебя вздрючить
2. Была у меня когда-то такая же проблемка, я поменял дефолтный канал в библиотеке
 
  • Лойс +1
Реакции: Pasha_N