Да, нашёл информацию, что у нас в Украине на частотах с 2510-2545 МГц работает "МТС 4G". За совет спасибо, вздрючить могут По поводу библиотеки, имеешь ввиду nrf24-master или NRF24V?
Хорошо, допустим в библиотеке я поменяю этот канал. Но, чисто теоретически, возможно как-то загнать его в открытый код, на подобии того, что скинул выше или из-за такого глюка это бесполезно? Просто даже для того, если роутер или блютуз будут на этом канале работать, чтоб можно было перескочить на соседний. Может у кого ещё какие идею будут или варианты реализации.
Для изменения канала надо остановить передачу, изменить канал, начать передачу. Делал для себя пульт управления на NRF, я там могу менять все настройки передатчика.
Да это понятно, но у меня только через библиотеку получается менять канал, в файле RF24.CPP. В том то и дело, что у меня есть и энкодер, и TM1637, но у меня через открытый код не меняется. А как передачу остановить то, не отключая питание? Вот это я не шарю, вообще
У меня на пульте реализовано меню, где есть пункт запуска. Когда захожу вызывается старт, по выходу - стоп.
В других пунктах меняю параметры.
Главно , что я уяснил при работе с : NRF, SIM, WIFI , думаю сюда можно bluetush приплести, так то, что нужно хорошее, стабильное питание! С плохим питанием что то может работать криво или от случая к случаю, или не работать вообще. И бывает, что то, что работает на одной частоте отказывается работать на другой.
Главно , что я уяснил при работе с : NRF, SIM, WIFI , думаю сюда можно bluetush приплести, так то, что нужно хорошее, стабильное питание! С плохим питанием что то может работать криво или от случая к случаю, или не работать вообще. И бывает, что то, что работает на одной частоте отказывается работать на другой.
Да питание стабильное, причём в моей системе, куда подключён nrf, каждому модулю "присвоен" свой отдельный стабилизатор. А по поводу каналов - пока не понятно, почему через прошивку они не меняются. Пробовал менять с 76-го в библиотеке на 0-й, 10-й и 80-й - всё тоже самое, даже скорость менял - бесполезно.
В общем и целом есть х2 ардуино нано и х2 nrf24l01+. Джамперы я не особо люблю, тем более при работе с радиомодулями, по этому всё припаял намертво. В правильности подключении и в питании всё отлично, проверял 7 раз как в поговорке. Проверял модули через скетч nrf listen air, модули в норме, ардуинки распознали их. Но на практике загрузил скетчи TX_time и RX_time то нифига. Они не захотели подружится. Используя весь массив своих знаний и умений поискать решение в интэрнэте не увинчалось успехом. Кто уже побывал в этом кругу ада, и может накинуть вариантик я буду очень рад услышать вас.
bort707, ну когда новичёк дорастёт до ИгряК тогда сам и сделает выводы)))))
Игорь и еспехи на луа программирует.... и что , про с++ забыть ?
нрф работает и имеет место жить.
у меня во многих проектах дубасит себе по несколько лет.
захочется связь организовать на других - будем разбираться, ковыряться и запускать))))
тс попросил помощи по нрф - я дал ссылку.
ваши знания и компетентность под сомнение не ставлю.
Всё заработало. Оказалось, дело в библиотеке rf24. Програмировал с телефона(программа arduino droid), и штатная библиотека rf24 не подошла. Заменил, загрузил, заработало.
Здравствуйте!
Хочется внести ясность в вопрос возможности "подружить" модули на базе ESP8266 с приемопередатчиками nRF24L01.
Идея: некий набор датчиков, присоединенных к Nano вне пределов действия WiFi сети, но в зоне досягаемости nRF24L01 посылает данные на ESP8266, который выводит показания на дисплей, а также при получении определенных показателей дополнительно шлет их через "вафлю" на электронную почту, либо включает/выключает что-то в доме.
Прежде чем городить еще больший огород, решил проверить возможность связи, "допилив" немного скетчи Алекса.
C++:
/* БИБЛИОТЕКИ */
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
/* ЖЕЛЕЗО */
RF24 radio(9, 10); // для Уно, Нано
//RF24 radio(2, 15); // для ESP8266
/* ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ И КОНСТАНТЫ */
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};
const uint32_t id = 111;
/* СТАРТОВАЯ НАСТРОЙКА */
void setup()
{
Serial.begin(9600); // открываем порт связи с компьютером на скорости 9600 бод
radioSetup(); // настройка модуля nRF24L01.
}
/* НЕПРЕРЫВНЫЙ ЦИКЛ */
void loop()
{
radio.writeFast(&id, sizeof(id)); // передаем в эфир константу id
delay(5); // перерыв на 5 миллисекунд
}
void radioSetup()
{
radio.begin(); //активировать модуль
radio.setAutoAck(0); //режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(0, 0); //(время между попыткой достучаться, число попыток)
radio.setPayloadSize(32); //размер пакета, в байтах
// radio.openWritingPipe(0xAFCD9FBB01LL); // присваиваем номер и имя трубе
radio.openWritingPipe(address[0]); //мы - труба 0, открываем канал для передачи данных
radio.setChannel(0x70); //выбираем канал (в котором нет шумов!)
radio.setPALevel (RF24_PA_MIN); // Ставим максимальную мощность, либо RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
radio.setDataRate (RF24_1MBPS); // Ставим минимальную скорость передачи данных, либо RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
radio.powerUp(); //начать работу
radio.stopListening(); //не слушаем радиоэфир, мы передатчик
}
и
C++:
/* БИБЛИОТЕКИ */
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <GyverOLED.h>
/* ЖЕЛЕЗО */
//RF24 radio(9, 10); // пины CE и SS для Уно, Нано
RF24 radio(2, 15); // пины CE и SS для ESP8266
GyverOLED<SSD1306_128x32, OLED_BUFFER> oled; // Экран размерностью 128 на 32 пикселя
// с использованием буфера
/* ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ И КОНСТАНТЫ */
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};
uint32_t gotData; // Переменная, куда будет помещать полученные данные приемник
uint32_t id;
/* СТАРТОВАЯ НАСТРОЙКА */
void setup()
{
Serial.begin(9600); // открываем порт связи с компьютером на скорости 9600 бод
radioSetup(); // настройка модуля nRF24L01.
oled.init();
radio.printDetails();
}
/* НЕПРЕРЫВНЫЙ ЦИКЛ */
void loop()
{
uint8_t c = 0; // локальная переменная - счётчик. Обнуляем
uint8_t r = 0;
volatile long timer = millis(); // локальная переменная таймера, т.е. опорной точки
//для расчета периода времени. Присваиваем текущее значение внутреннего счётчика
do
{
radio.read(&gotData, sizeof(gotData)); // читаем данные (если данные есть, то пишем в переменную; данные размером в 4 байта)
id = gotData;
if (id == 111)
{
c++; // увеличиваем переменную счетчика на 1
}
else
{
r++;
}
} while (millis() - timer < 1000); // в течение 1 секунды (1000 миллисекунд)
// по истечении 1 секунды
oled.clear(); // очищаем дисплей
oled.setScale(1); // выставляем размер шрифта
oled.setCursor(0, 0); //указываем начальное положение курсора по ширине и высоте
oled.println("Получено за секунду: "); //Выводим текст и переходим на следующую строку
oled.print(c); // Выводим данные переменной-счётчика
oled.println(" пакетов"); // выводим после цифры
oled.print(r);
oled.print(" мусора");
oled.update(); // передаем на дисплей
Serial.print("Получено пакетов:");
Serial.println(c);
Serial.print("Получено мусора:");
Serial.println(r);
}
void radioSetup()
{
radio.begin(); //активировать модуль
radio.setAutoAck(0); //режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(0, 0); //(время между попыткой достучаться, число попыток)
radio.setPayloadSize(32); //размер пакета, в байтах
// radio.openReadingPipe(1, 0xAFCD9FBB01LL); // присваиваем номер и имя трубе
radio.openReadingPipe(1, address[0]); //хотим слушать трубу 0
radio.setChannel(0x70); //выбираем канал (в котором нет шумов!)
radio.setPALevel (RF24_PA_MIN); // Ставим минимальную мощность, либо RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
radio.setDataRate (RF24_1MBPS); // Ставим минимальную скорость передачи данных, либо RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
radio.powerUp(); //начать работу
radio.startListening(); //начинаем слушать эфир, мы приёмный модуль
}
Оба кода нормально работают на паре Nano+Nano, однако, при подключении ESP8266 в качестве приемника, выводится только "мусор", что подталкивает к мысли о конфликте ESP и nRF в части SPI. Ибо мне кажется, что nRF просто игнорируется, а в качестве приемника включается модуль WiFi, который и фиксирует "мусор" от роутеров и прочих WiFi устройств.
Пробовал подключить библиотеку WiFi, но от команды WiFi.forceSleepBegin() в setup() нет никакого толку.
Пробовал менять пины, но также без видимого эффекта.
Как писал в теме Особенности esp8266 , интернет дает 2 варианта решения:
1. Использовать пины 2 и 15, что у меня не работает;
2. Раскомментировать SOFTSPI в библиотеке RF24 + догрузить библиотеку DigitalIO. Здесь вариант интереснее - код просто не компилируется. Пишет ошибку компиляции для D1 mini (как, в прочем, для Generic ESP8266 и D1 mini Pro)
Параллельно с мытарствами нашел особенность, что, если код в строках 36-48 передатчика заменить на
C++:
while (millis() - timer < 2000) {
while( radio.available(&pipeNo)){ // слушаем эфир со всех труб
radio.read( &gotByte, 1 ); // чиатем входящий сигнал
count++;
}
}
или схожий, то ESP сваливается в постоянный ребут по watchdog. Столкнувшись, набрёл на такую статью
@IamNikolay, в таком сочетании ни к чему не приводит, а именно, эта скотина безрогая IDE выдает ошибку, что невозможно скомпилировать код. Никаких иных строк не показывает, хотя у меня стоит подробный вывод.
Попробую поискать другие библиотеки для программной организации SPI.
Пока делаю связку Nano+NRF+GyverBUS+ESP
Очень не хочется умножать "сущности", но увы и ах.
Проблемы с nRF24L01 SMD - купил уже 3 модуля у разных продавцов. Измерять шум на каналах удаётся без проблем, а когда дело доходит до передачи данных, ничего не работает. При этом обычные модули nRF работают, иногда даже стабильно.
Приветствую. Нужен такой совет, не знаю, сможет ли кто помочь:
Есть LoRa модуль, а также NRF24L01, которые оба подключаются по SPI шине.
Необходимо подключить оба этих модуля на Arduino Nano и заставить их работать одновременно.
Проблема, собственно, такова - предварительно почитал интернет, и народ пишет, что NRF часто конфликтует с другими модулями. Притом также писали, что на Uno-подобных платах нельзя подключать SPI устройства на 10-й пин.
Собственно, может ли кто-то дать совет, в каком направлении идти дальше?
Если кратко, то концепция такова:
LoRa принимает пакет, на основе одной половины данных генерирует ШИМ (это будет радиоуправление), а другую половину пакета передаёт на NRF который шлёт его дальше.
@Эдуард Анисимов,
А код сам будет "определять" в какой момент какое устройство задействовать или же это надо задавать самому как-то?
По логике, модуль LoRa имеет высокий приоритет - его надо опрашивать постоянно, не пришел ли новый пакет, дабы его не пропустить. Но вместе с этим надо успевать как-то принятый пакет обрабатывать и отправлять в NRF24.
В программировании и электронике не силён и ума не приложу, как задать последовательность опроса и приоритет...
На данном сайте используются файлы cookie, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.