День добрый. У кого получилось подключить эти модули следующим образом: Один сервер, который будет принимать данные с разных устройств по запросу или по времени. И два, три клиента с дачиками. У меня не очень получается разобраться с ними. Если кто сможет подробно объясеить и помочь буду благодарен. Пишите в аську или на почту, что бы тут не захломлять ветку. miiobuhov (сабака)mail точка ru. аська 611659742
День добрый. У кого получилось подключить эти модули следующим образом: Один сервер, который будет принимать данные с разных устройств по запросу или по времени. И два, три клиента с дачиками. У меня не очень получается разобраться с ними. Если кто сможет подробно объясеить и помочь буду благодарен. Пишите в аську или на почту, что бы тут не захломлять ветку. miiobuhov (сабака)mail точка ru. аська 611659742
Так вам вон выше Максим уже ответил :) ветку перечитайте и все поймете...
Суть теста - первый код получив данные из сериал, отправляет в радиоэфир пакет, второй код принимает пакет и отправляет обратно, первый принимает пакет и передает обратно в сериал. Сам не проверял на работоспособность но вроде как должен работать - то есть что написали в сериал, то и должно вернуться обратно.
Пробовал этот код, в эфире тишина(( Сначала сыпались эроглифы, потом поменял местами СN и CSN ироглифы ушли но в эфире по прежнему тишина... И в примере библиотеки mirf где пинг сервера и клиента там надо что то изменять в коде или залил как есть и все должно заработать? Пинг и на клиенте и на сервере должен отображаться в мониторинге, да?
Пробовал этот код, в эфире тишина(( Сначала сыпались эроглифы, потом поменял местами СN и CSN ироглифы ушли но в эфире по прежнему тишина... И в примере библиотеки mirf где пинг сервера и клиента там надо что то изменять в коде или залил как есть и все должно заработать? Пинг и на клиенте и на сервере должен отображаться в мониторинге, да?
иероглифы - надо смотреть на соответствие скорости порта в скетче и сериал-мониторе.
Соединил две Nano и NRF24, скачал библиотеку mirf и записал на дуины скетчи ping_client и ping_server.
Т.к. второго компа нет, запустил на компе один IDE, запустил виртуальную машину и на ней запустил вторую IDE и подключил дуины к разным USB. Вот что вышло:
было выясненно, что когда отправляешь сообщения с уно, на мегу все доходит. Наоборот отправляешь, доходит очень мало сообщений. Когда я запитал передачики с противоположных ардуин, то ситуация поменялась. Отправляешь с меги все доходит, а с уны нет. Что бы не набирать текст залил скетчи пинг клиент и сервер. Теряется каждое 3,4 сообщение, но когда я запитал оба передачика от меги с помощью макетной платы, то пинг стал идеальным!! Как так?? Если на меги говорят проседает питание и из за этого сбои, а тут два передачика запитаны на одной меги и все нормально работает! И как правильно запитать передачики с внешнего питания? Я подцеплял батарейку от телефона, там напряжение показывало 3,7 в. Но передачик не работал((
Просто LCD и nrf24l01 работают по SPI, получается что у них miso, mosi, csk, будут общими, а ss(ce) разные, они и будут задавать какое устройство будет работать, да? И подскажите пожалуйста как правильно работать с библиотекой Mirf. Как правильно записывать данные в буфер и их отправлять. Пытаюсь сделать счетчик и что бы он отправлял значения счетчика с интервалом с 1с. При таком коде
вовсе не обязательно LCD работает ао SPI - зависит от LCD
в случае с SPI все верно - MOSI/MISO/SCK ко всем устройствам SPI подключаются паралелльно, а выводы CE (chip enable) долджны подключаться к каждому устройству индивидуально
но есть нюансы, некоторые SPI устройства не переходсят в высокоипедансное состояние при отсутствии активирующего сигнала на CE - тогда такое устройство будет мешать другим. Если не заработает - надо смотреть нет ли такой проблемы с контроллером, который стоит на SPI устройстве
У интерфейса SPI нет линии CE, а есть линия SS (Slave Select) или CS (Chip Select).
И вроде бы можно было бы сказать "да это одно и тоже", "придираетесь", НО вот только у nRF24L01 есть вывод CE и он отвечает за режим передачи/приема. А CS (SS) это вывод CSN. Так что если вы вместо CSN подключите CE, то у вас ничего не заработает.
maxim и axill, я извеняюсь за оффтоп, нотут я поднял тему, которую Вы затронули. Не могли бы Вы помочь мне с моей проблемой?
Спасибо!
если вы напряжетесь и прочитаете данную тему, то мы тут уже обсуждали проблему конкретно данного модуля и изернет шильда.. как они конфликтовали и что нужно делать... но в вашей теме другой радио модуль с другими библиотеками...
у кого проблемы с модулем или затык в обще с его работой купите или сами соберите переходник
STC15F204+NRF24L01
заработает через TX/RX (название нпрогоните через тот же ебей, там модуль плюс переходник 180) р стоит
у кого проблемы с получением результата от микроконтроллеров лучше купить смапт ТВ и управлять им с помощью голоса и жестов ( из свежей рекламы ))))))
нормально модуль работает по SPI, STC15F204 другой МК, как-то криво решать проблему одного МК путем встраивания посредником другого
тема посвящена этому модулю, на мой взгляд моё сообщение с указанием инфы о девайсе, который позволяет использовать UART (эекономя ножки МК и оставляя свободным SPI) вместо SPI вполне относится к теме. К чему Ваши умствования не совсем понятно. Ах да возвысится над якобы над нубами, высмеять чужую безграмотность и подчеркнуть свою осведомлённость, и это на форуме посвященному ардуино - самим то не смешно? )))) да и криво не криво - не вам решать, предложите своё прямое решение общения данного модуля по UART без помощи другого МК ибо это глупо с Ваших слов, а пока не предложите - вы нуб))
не принимайте близко к сердцу - ничего личного, сам над собой смеюсь)) у меня с модулем пока тоже не очень получается (со стабильностью передачи), но это только укрепляет веру в то, что SPI это правильный выбор))
использовать ваш вариант для смены SPI на UART - идея вполне хорошая наверно для каких-то задач, но вы это предложили не как альтернативу SPI, а как решение проблем. Вот с последним собственно я и не согласился. Все нормально работает по SPI, нужно только правильно подключить провода и правильно использовать библиотеки. Если что-то не так - не повод переключаться на UART.
Какой вам мануал нужен? Перечитайте ветку с начала - уже все обмусолили до некуда. Как перечитаете, подключите, все заработает не пропадайте, а напишите/нарисуйте мануал и выложите сюда.
сделал свой шил (шилдик) для установки модуля на мегу + встроил туда же часики ds1307 с батарейкой. немного накосячил при разводке, но это решилось не сложно. Шилд сделал для установки позади ethernet шилда, чтобы не вести отдельные провода к пину 3.3в для питания модуля - поставил отдельную микросхему 1117-3.3. К модулю подключен железный SPI (пины 50-MISO, 51-MOSI, 52-SCK), CE - 48, CS - 49, IRQ - 53 (он же INT0 чтобы если что использовать работу по прерываниям)
Интересненько. я пошел несколько по другому пути, платка вышла в 4 слоя.. но идея почти такая же, закрепить все что бы не болталось... сегодня вроде бы первые 10 плат вышли с печати... ждемс запчасти... Правда в моем случае это первый опыт и фиг его знает что там вышло вообще и запустится ли оно после того как я все запаяю.. да и некоторых запчастей нужно ждать до 6 сентября :(
получил вот сегодня чипы в коробке с огромной надписью ВСТРЫВАТЬ ТОЛЬКО В ПОМЕЩЕНИИ ЗАЩИЩЕНОМ ОТ СТАТИКИ! ( долго чесал лысину).... жду когда платы приедут....
RF24 radio(40,53);
// Radio pipe addresses for the 2 nodes to communicate.
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };// адреса каналов приема и передачи
//создаём структуру для передачи значений---------------------------------------------------------
typedef struct{
int identifier;
int Rele_1_duine2; //Команда на переключение реле duine2
int Rele_2_duine2;
int Rele_3_duine2;
int Rele_4_duine2;
}
A_t;
typedef struct{
int identifier;// этот номер передатчика для идентификации в принятом пакете данных
int light_Sensor;//Датчик BH1750
float temperature_Sensor;// передаём температуру )
int Analog_sensor_A0;//еще датчик
int Analog_sensor_A1;//еще датчик
int Analog_sensor_A2;//еще датчик
int Analog_sensor_A3;//еще датчик
int Digital_sensor_D3;
int Digital_sensor_D4;
boolean Rele_1;
boolean Rele_2;
boolean Rele_3;
boolean Rele_4;
int Error_Message;
long count;
}
B_t;
A_t duino1_Mega;
B_t duino2;
int count; //переменная для счётчика циклов
void setup ()
{
count = 0;
radio.begin();
// Скорость передачи
radio.setDataRate(RF24_250KBPS);
radio.setRetries(15,15);
radio.setPALevel(RF24_PA_MAX);
radio.setChannel(76);
radio.setCRCLength(RF24_CRC_16);
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1,pipes[0]);
radio.startListening();
}
void loop(){
duino1_Mega.identifier = 250;
duino1_Mega.Rele_1_duine2 = OFF;
duino1_Mega.Rele_2_duine2 = ON;
duino1_Mega.Rele_3_duine2 = OFF;
duino1_Mega.Rele_4_duine2 = ON;
// radio stuff
if ( radio.available() )
{
bool done = false;
while (!done)
{
done = radio.read( &duino2, sizeof(duino2) );
}
delay(20);
radio.stopListening();
radio.write( &duino1_Mega, sizeof(duino1_Mega) );
radio.startListening();
}
}
код для uno
RF24 radio(9,10);
// Radio pipe addresses for the 2 nodes to communicate.
const uint64_t pipes[2] = { 0xF0F0F0F0F1LL, 0xF0F0F0F0D2LL }; // адреса каналов приема и передачи
typedef struct{
int identifier;
int Rele_1_duine2; //Команда на переключение реле duine2
int Rele_2_duine2;
int Rele_3_duine2;
int Rele_4_duine2;
long count_Mega;
}
A_t;
typedef struct{
int identifier;// этот номер передатчика для идентификации в принятом пакете данных
int light_Sensor;//Датчик BH1750
float temperature_Sensor;// передаём температуру )
int Analog_sensor_A0;//еще датчик
int Analog_sensor_A1;//еще датчик
int Analog_sensor_A2;//еще датчик
int Analog_sensor_A3;//еще датчик
int Digital_sensor_D3;
int Digital_sensor_D4;
boolean Rele_1;
boolean Rele_2;
boolean Rele_3;
boolean Rele_4;
int Error_Message;
long count;// счетчик передач используется для контроля качества канала
}
B_t;
A_t duino1_Mega;
B_t duino2;
int count; //переменная для счётчика циклов
void setup()
{
}
void loop()
{
radio.begin();
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.setChannel(76);
radio.setCRCLength(RF24_CRC_16);
radio.setRetries(15,15);
radio.openWritingPipe(pipes[1]); // Открываем канал передачи
radio.openReadingPipe(1,pipes[0]); // Открываем один из 6-ти каналов приема
// Заполнение структуры данными
duino2.identifier = 11;// этот номер передатчика для идентификации в принятом пакете данных
duino2.light_Sensor = val;//Датчик BH1750
duino2.temperature_Sensor = Get_18B20_Data(); //DS18B20
duino2.Analog_sensor_A0 = analogRead(A0)/102.3;
duino2.Analog_sensor_A1 = analogRead(A1)/102.3;
duino2.Analog_sensor_A2 = analogRead(A2);
duino2.Analog_sensor_A3 = analogRead(A3);
duino2.Digital_sensor_D3 = digitalRead(3);
duino2.Digital_sensor_D4 = pirState;
duino2.Rele_1 = digitalRead(RELE_1);
duino2.Rele_2 = digitalRead(RELE_2);
duino2.Rele_3 = digitalRead(RELE_3);
duino2.Rele_4 = digitalRead(RELE_4);
if (duino2.count <= 2147483646) duino2.count++; // счетчик передач используется для контроля качества канала
else
duino2.count = 0;
// Заполнение структуры данными
// radio stuff
radio.stopListening();
bool ok = radio.write( &duino2, sizeof(duino2) );
if (ok)
printf("ok...");
else
printf("failed.\n\r");
radio.startListening();
unsigned long started_waiting_at = millis();
bool timeout = false;
while ( ! radio.available() && ! timeout )
if (millis() - started_waiting_at > 250 )
timeout = true;
if ( timeout )
{
Serial.println("Failed, response timed out.");
duino2.Error_Message++;
}
else
{
radio.read( &duino1_Mega, sizeof(duino1_Mega) );
}
}
так вот в чем вопрос, наверное заметили странность в "трубах" канала
radio.openWritingPipe(pipes[1]); // Открываем канал передачи
radio.openReadingPipe(1,pipes[0]); // Открываем один из 6-ти каналов приема
они одинаковые! и что самое странное в таком состоянии все работает обе структуры наполняются и видятся на обоих устройствах.
исторически это самая старая библиотека для модуля и как я понял ее никто уже очень давно не доводил до ума
А как правильно заносить значение переменной в буфер(data), для ее передачи?
буфер - любые данные размером до 32 байт. размер должен совпадать с payloadsize - это размер пакета для обмена данными
// CE - 48, CSN - 49
RF24 radio(48, 49);
void setup(void) {
Serial.begin(57600);
Serial.println("started");
radio.begin();
// размер пакета для обмена
radio.setPayloadSize(32);
// адрес этого устройства
radio.openReadingPipe(1, 0x1111111111);
}
Организовал передачу данных, а точнее пока что просто счетчик с интервалом в 1с. Una посылает данные, mega принимает. Использовал библиотеку rf24. Решил это дело вывести на дисплей, стандартный 16х2.
/* Подключаем библиотеку для работы с LCD */
#include <LiquidCrystal.h>
/* Создаём объект LCD-дисплея, используя конструктор класса LiquidCrystal
* с 6ю аргументами. Библиотека по количеству аргументов сама определит,
* что нужно использовать 4-битный интерфейс.
* Указываем, к каким пинам Arduino подключены выводы дисплея:
* RS(MISO), E(MOSI), DB4, DB5, DB6, DB7
*/
LiquidCrystal lcd(50, 51, 5, 4, 3, 2);
#include <SPI.h>
#include "RF24.h"
RF24 radio(8, 7);
const uint64_t pipes[2] = {0xF0F0F0F000LL, 0xF0F0F0F0FFLL}; // адреса каналов приема и передачи
void setup(){
Serial.begin(9600);
/* Инициализируем дисплей: 2 строки по 16 символов */
lcd.begin(16, 2);
/* Выводим на дисплей фразу */
lcd.print("Temperatura!");
radio.begin();
radio.setPayloadSize(32);
radio.setDataRate(RF24_250KBPS); // Скорость передачи
radio.setChannel(10); // Номер канала от 0 до 127
//radio.setRetries(15,15); // Кол-во попыток и время между попытками
radio.openWritingPipe(pipes[1]); // Открываем канал передачи
radio.openReadingPipe(1, pipes[0]); // Открываем один из 6-ти каналов приема
radio.startListening(); // Начинаем слушать эфир
}
void loop(){
int data=0;
if(radio.available()){
//char data[32] = "";
radio.read(&data, 32);
Serial.println(data);
}
/* Устанавливаем курсор в 1 столбец 2й строки. Нумерация идёт с нуля,
* первым аргументом идёт номер столбца.
*/
lcd.setCursor(0, 1);
lcd.print(data);
}
И как результат ничего не работает. Вторая строка вообще не выводится, хоть стандартную надпись, хоть данные которые приходят. Первая строчка искажается в хаотичном порядке при запуске скетча, и со временем все стирается от туда. В мониторинге все хорошо, все приходит. Выводы Miso и Mosi я объеденил. Остальное не трогал. Такое начинается когда вставляешь код настроики радио в setup
А это выводится если инициализацию диспле прописать после настроек радио, т.е. в конце setup-а
Вторая строка вообще не выводится, хоть стандартную надпись, хоть данные которые приходят. Первая строчка искажается в хаотичном порядке при запуске скетча, и со временем все стирается от туда. В мониторинге все хорошо, все приходит.
Кто что подскажет?
если все приходит в "мониторинге" - значит в lcd проблема. попробуйте использовать lcd.clear()/ В скетче где lcd.print("Temperatura!") перед этим то же необходимо установить курсор lcd.setCursor
/* Подключаем библиотеку для работы с LCD */
#include <LiquidCrystal.h>
/* Создаём объект LCD-дисплея, используя конструктор класса LiquidCrystal
* с 6ю аргументами. Библиотека по количеству аргументов сама определит,
* что нужно использовать 4-битный интерфейс.
* Указываем, к каким пинам Arduino подключены выводы дисплея:
* RS(MISO), E(MOSI), DB4, DB5, DB6, DB7
*/
LiquidCrystal lcd(50, 51, 5, 4, 3, 2);
#include <SPI.h>
#include "RF24.h"
RF24 radio(8, 7);
const uint64_t pipes[2] = {0xF0F0F0F000LL, 0xF0F0F0F0FFLL}; // адреса каналов приема и передачи
void setup(){
Serial.begin(9600);
/* Инициализируем дисплей: 2 строки по 16 символов */
lcd.begin(16, 2);
/* Выводим на дисплей фразу */
lcd.setCursor(1, 1);
lcd.print("Temperatura!");
radio.begin();
radio.setPayloadSize(32);
radio.setDataRate(RF24_250KBPS); // Скорость передачи
radio.setChannel(10); // Номер канала от 0 до 127
//radio.setRetries(15,15); // Кол-во попыток и время между попытками
radio.openWritingPipe(pipes[1]); // Открываем канал передачи
radio.openReadingPipe(1, pipes[0]); // Открываем один из 6-ти каналов приема
radio.startListening(); // Начинаем слушать эфир
}
void loop(){
int data=0;
if(radio.available()){
//char data[32] = "";
radio.read(&data, 32);
Serial.println(data);
}
/* Устанавливаем курсор в 1 столбец 2й строки. Нумерация идёт с нуля,
* первым аргументом идёт номер столбца.
*/
lcd.setCursor(0, 1);
lcd.print(data);
delay (1000); // - может и не нужно
}
объясните пожалуйста не понимющему, а зачем при передачи пытаться все запихнуть в массив? когда мне кажется проще передавать структурой, да и рабоать со структурой поудобней т.к. можно хранить данные с разных датчиков и в разных форматах( int, float и т.д.) в отличии от массива?
объясните пожалуйста не понимющему, а зачем при передачи пытаться все запихнуть в массив? когда мне кажется проще передавать структурой, да и рабоать со структурой поудобней т.к. можно хранить данные с разных датчиков и в разных форматах( int, float и т.д.) в отличии от массива?
вы правы - структурой удобнее и понятней, но не принципиально, все равно фактическая передача идет байтами от 1 до 32.
объясните пожалуйста не понимющему, а зачем при передачи пытаться все запихнуть в массив? когда мне кажется проще передавать структурой, да и рабоать со структурой поудобней т.к. можно хранить данные с разных датчиков и в разных форматах( int, float и т.д.) в отличии от массива?
вы правы - структурой удобнее и понятней, но не принципиально, все равно фактическая передача идет байтами от 1 до 32.
а я уже было испугался что делаю не по феншую )
тогда значит мой пример очень даре рабочий ( только заменить нужноconst uint64_t pipes[2] = { 0xF0F0F0F0F1LL, 0xF0F0F0F0D2LL }; чтоб одинаковые адреса были)
внесу разнообразие в обсуждение )
и еще заметил странность, скорее даже не странность, а нужно похоже переходить на прерывания т.к. с сетевым шилдом, когда по веб интерфейсу лазищь, пакеты теряются (
Модет кто подскажет как нормально реализовать прием и в тоже время нормальную работу ethernet шилда? А то пакеты теряются зараза. Прерывания использовать для nf думаю будет не лучшее решение. Как думаете?
Ветку перечитайте с начала и найдете ответ на свой вопрос.
День добрый. У кого получилось подключить эти модули следующим образом: Один сервер, который будет принимать данные с разных устройств по запросу или по времени. И два, три клиента с дачиками. У меня не очень получается разобраться с ними. Если кто сможет подробно объясеить и помочь буду благодарен. Пишите в аську или на почту, что бы тут не захломлять ветку. miiobuhov (сабака)mail точка ru. аська 611659742
День добрый. У кого получилось подключить эти модули следующим образом: Один сервер, который будет принимать данные с разных устройств по запросу или по времени. И два, три клиента с дачиками. У меня не очень получается разобраться с ними. Если кто сможет подробно объясеить и помочь буду благодарен. Пишите в аську или на почту, что бы тут не захломлять ветку. miiobuhov (сабака)mail точка ru. аська 611659742
Так вам вон выше Максим уже ответил :) ветку перечитайте и все поймете...
Перечитывал, но вопросы всеравно куча!
Что бы долго не разбираться...
Вывод IRQ не подключаю и не использую. Это заливаете в дуину, которая подключена к компу:
запускаете сериал монитор и что нибудь отправляете.
А этот заливаете в дуину которая будет автономна:
Суть теста - первый код получив данные из сериал, отправляет в радиоэфир пакет, второй код принимает пакет и отправляет обратно, первый принимает пакет и передает обратно в сериал. Сам не проверял на работоспособность но вроде как должен работать - то есть что написали в сериал, то и должно вернуться обратно.
Пробовал этот код, в эфире тишина(( Сначала сыпались эроглифы, потом поменял местами СN и CSN ироглифы ушли но в эфире по прежнему тишина... И в примере библиотеки mirf где пинг сервера и клиента там надо что то изменять в коде или залил как есть и все должно заработать? Пинг и на клиенте и на сервере должен отображаться в мониторинге, да?
Что-то не так делаете. И при чем тут mirf ?
Пробовал этот код, в эфире тишина(( Сначала сыпались эроглифы, потом поменял местами СN и CSN ироглифы ушли но в эфире по прежнему тишина... И в примере библиотеки mirf где пинг сервера и клиента там надо что то изменять в коде или залил как есть и все должно заработать? Пинг и на клиенте и на сервере должен отображаться в мониторинге, да?
иероглифы - надо смотреть на соответствие скорости порта в скетче и сериал-мониторе.
Cn и CSn с какой целью местами меняли?
Соединил две Nano и NRF24, скачал библиотеку mirf и записал на дуины скетчи ping_client и ping_server.
Т.к. второго компа нет, запустил на компе один IDE, запустил виртуальную машину и на ней запустил вторую IDE и подключил дуины к разным USB. Вот что вышло:
Правильно ли это работает?
З.Ы.Прошу сильно не пинать...
Да все правильно. У меня такая проблема. Имеется плата мега и уно(спаяна самостоятельно). Используя этот скетч
Нормально всё работает.
Подключил к двум Ардуино нано на 328 меге два модуля Nrf24l01+.
Питание 3,3 вольта. SPI напрямую.
Код привожу ниже - соеденял свой комп с ноутбуком - все передаётся нормально и без ошибок.
Естественно код должен быть различным для приёмопередатчиков.
Просто в одном поставьте Mirf.setRADDR((byte *)"app1");
во втором Mirf.setRADDR((byte *)"app2");
и соответсвенно в первом Mirf.setTADDR((byte *)"app2");
во втором Mirf.setTADDR((byte *)"app1");
вот код.
было выясненно, что когда отправляешь сообщения с уно, на мегу все доходит. Наоборот отправляешь, доходит очень мало сообщений. Когда я запитал передачики с противоположных ардуин, то ситуация поменялась. Отправляешь с меги все доходит, а с уны нет. Что бы не набирать текст залил скетчи пинг клиент и сервер. Теряется каждое 3,4 сообщение, но когда я запитал оба передачика от меги с помощью макетной платы, то пинг стал идеальным!! Как так?? Если на меги говорят проседает питание и из за этого сбои, а тут два передачика запитаны на одной меги и все нормально работает! И как правильно запитать передачики с внешнего питания? Я подцеплял батарейку от телефона, там напряжение показывало 3,7 в. Но передачик не работал((
многим помогает припайка электролитического конденсатора к пинам питания непосредственно на модуль nrf24
Пробовал, не помогает. Припаивал 10мкф 25в, 47мкф35в, 47мкф 16в, ничего не помогает...
а в идеале что должно выводиться? как работают эти скетчи?
Библиотеку с примерами скачал с англоязычного сайта, а я на нем не балакаю.
з.Ы. просба сильно не пинать все еще актуальна...
Как правильно подключить LCD и nrf24l01 вместе?
Как правильно подключить LCD и nrf24l01 вместе?
ну попробуйте подключить проводами!
предлагаете пойти заварить кофе и по кофейной гуще догадыватся какой LCD и какая дуинка? и каким образом вы все это пытаетесь соединять?
Просто LCD и nrf24l01 работают по SPI, получается что у них miso, mosi, csk, будут общими, а ss(ce) разные, они и будут задавать какое устройство будет работать, да? И подскажите пожалуйста как правильно работать с библиотекой Mirf. Как правильно записывать данные в буфер и их отправлять. Пытаюсь сделать счетчик и что бы он отправлял значения счетчика с интервалом с 1с. При таком коде
Он выводит таблицу аски как я понял)) Буквы, цифры, знаки по порядку.
Просто LCD и nrf24l01 работают по SPI
вовсе не обязательно LCD работает ао SPI - зависит от LCD
в случае с SPI все верно - MOSI/MISO/SCK ко всем устройствам SPI подключаются паралелльно, а выводы CE (chip enable) долджны подключаться к каждому устройству индивидуально
но есть нюансы, некоторые SPI устройства не переходсят в высокоипедансное состояние при отсутствии активирующего сигнала на CE - тогда такое устройство будет мешать другим. Если не заработает - надо смотреть нет ли такой проблемы с контроллером, который стоит на SPI устройстве
У интерфейса SPI нет линии CE, а есть линия SS (Slave Select) или CS (Chip Select).
И вроде бы можно было бы сказать "да это одно и тоже", "придираетесь", НО вот только у nRF24L01 есть вывод CE и он отвечает за режим передачи/приема. А CS (SS) это вывод CSN. Так что если вы вместо CSN подключите CE, то у вас ничего не заработает.
У интерфейса SPI нет линии CE, а есть линия SS (Slave Select) или CS (Chip Select).
спасибо за корректировку )) у меня все еще путаница с этими абревиатурами
Спасибо! А по поводу работы с библиотекой Mirf, может кто то помочь?
maxim и axill, я извеняюсь за оффтоп, но тут я поднял тему, которую Вы затронули. Не могли бы Вы помочь мне с моей проблемой?
Спасибо!
maxim и axill, я извеняюсь за оффтоп, но тут я поднял тему, которую Вы затронули. Не могли бы Вы помочь мне с моей проблемой?
Спасибо!
если вы напряжетесь и прочитаете данную тему, то мы тут уже обсуждали проблему конкретно данного модуля и изернет шильда.. как они конфликтовали и что нужно делать... но в вашей теме другой радио модуль с другими библиотеками...
у кого проблемы с модулем или затык в обще с его работой купите или сами соберите переходник
STC15F204+NRF24L01
заработает через TX/RX (название нпрогоните через тот же ебей, там модуль плюс переходник 180) р стоит
Спасибо! А по поводу работы с библиотекой Mirf, может кто то помочь?
лучше используйте http://maniacbug.github.io/RF24/index.html вместо mirf
исторически это самая старая библиотека для модуля и как я понял ее никто уже очень давно не доводил до ума
у кого проблемы с модулем или затык в обще с его работой купите или сами соберите переходник
STC15F204+NRF24L01
заработает через TX/RX (название нпрогоните через тот же ебей, там модуль плюс переходник 180) р стоит
у кого проблемы с получением результата от микроконтроллеров лучше купить смапт ТВ и управлять им с помощью голоса и жестов ( из свежей рекламы ))))))
нормально модуль работает по SPI, STC15F204 другой МК, как-то криво решать проблему одного МК путем встраивания посредником другого
у кого проблемы с модулем или затык в обще с его работой купите или сами соберите переходник
STC15F204+NRF24L01
заработает через TX/RX (название нпрогоните через тот же ебей, там модуль плюс переходник 180) р стоит
у кого проблемы с получением результата от микроконтроллеров лучше купить смапт ТВ и управлять им с помощью голоса и жестов ( из свежей рекламы ))))))
нормально модуль работает по SPI, STC15F204 другой МК, как-то криво решать проблему одного МК путем встраивания посредником другого
тема посвящена этому модулю, на мой взгляд моё сообщение с указанием инфы о девайсе, который позволяет использовать UART (эекономя ножки МК и оставляя свободным SPI) вместо SPI вполне относится к теме. К чему Ваши умствования не совсем понятно. Ах да возвысится над якобы над нубами, высмеять чужую безграмотность и подчеркнуть свою осведомлённость, и это на форуме посвященному ардуино - самим то не смешно? )))) да и криво не криво - не вам решать, предложите своё прямое решение общения данного модуля по UART без помощи другого МК ибо это глупо с Ваших слов, а пока не предложите - вы нуб))
не принимайте близко к сердцу - ничего личного, сам над собой смеюсь)) у меня с модулем пока тоже не очень получается (со стабильностью передачи), но это только укрепляет веру в то, что SPI это правильный выбор))
использовать ваш вариант для смены SPI на UART - идея вполне хорошая наверно для каких-то задач, но вы это предложили не как альтернативу SPI, а как решение проблем. Вот с последним собственно я и не согласился. Все нормально работает по SPI, нужно только правильно подключить провода и правильно использовать библиотеки. Если что-то не так - не повод переключаться на UART.
А кто то может создать хороший мануал по библиотеке RF24 на русском с примерами, было бы очень здорово и многим пригодится.
Какой вам мануал нужен? Перечитайте ветку с начала - уже все обмусолили до некуда. Как перечитаете, подключите, все заработает не пропадайте, а напишите/нарисуйте мануал и выложите сюда.
сделал свой шил (шилдик) для установки модуля на мегу + встроил туда же часики ds1307 с батарейкой. немного накосячил при разводке, но это решилось не сложно. Шилд сделал для установки позади ethernet шилда, чтобы не вести отдельные провода к пину 3.3в для питания модуля - поставил отдельную микросхему 1117-3.3. К модулю подключен железный SPI (пины 50-MISO, 51-MOSI, 52-SCK), CE - 48, CS - 49, IRQ - 53 (он же INT0 чтобы если что использовать работу по прерываниям)
Интересненько. я пошел несколько по другому пути, платка вышла в 4 слоя.. но идея почти такая же, закрепить все что бы не болталось... сегодня вроде бы первые 10 плат вышли с печати... ждемс запчасти... Правда в моем случае это первый опыт и фиг его знает что там вышло вообще и запустится ли оно после того как я все запаяю.. да и некоторых запчастей нужно ждать до 6 сентября :(
получил вот сегодня чипы в коробке с огромной надписью ВСТРЫВАТЬ ТОЛЬКО В ПОМЕЩЕНИИ ЗАЩИЩЕНОМ ОТ СТАТИКИ! ( долго чесал лысину).... жду когда платы приедут....
ВАС справшивали?! Все уже видели чего умного Вы мне насоветовали.
лучше используйте http://maniacbug.github.io/RF24/index.html вместо mirf
исторически это самая старая библиотека для модуля и как я понял ее никто уже очень давно не доводил до ума
А как правильно заносить значение переменной в буфер(data), для ее передачи?
Может и мне поможете )
собрал два девайса один мега с кодом
код для uno
так вот в чем вопрос, наверное заметили странность в "трубах" канала
radio.openWritingPipe(pipes[1]); // Открываем канал передачи
radio.openReadingPipe(1,pipes[0]); // Открываем один из 6-ти каналов приема
они одинаковые! и что самое странное в таком состоянии все работает обе структуры наполняются и видятся на обоих устройствах.
как только ставишь нормально:
мега:
radio.openWritingPipe(pipes[0]);
radio.openReadingPipe(1,pipes[1]);
uno:
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1,pipes[0]);
то все заглот... полная тишина. использую бибилотеку от manyaca
может кто сталкивался с таким? подскажите где закралась ошибка
лучше используйте http://maniacbug.github.io/RF24/index.html вместо mirf
исторически это самая старая библиотека для модуля и как я понял ее никто уже очень давно не доводил до ума
А как правильно заносить значение переменной в буфер(data), для ее передачи?
буфер - любые данные размером до 32 байт. размер должен совпадать с payloadsize - это размер пакета для обмена данными
У меня глупый вопрос наверно.. а почему вы просто не возмете библиотеку в которой уже все доведено до ума?
берем например RF24Network
и завязываем возится с трубами и изобретать лисапед
ну например я вынес в отдельную функцию передачу
все разобрался, ошибка закралась подлая, ошибся в одной букве канала передачи.
только я и так пользуюсь бибилотекой доведенной до ума )
у меня обмен пока происходит постоянно. без header.
а например как сделать двухсторонний обмен в этой бибилотеке RF24Network?
с возможностью расширения колличества нод ), буду признателен если подскажете куда копать
STC15F204+NRF24L01
учитывая что STC15F204 это 8051 чип, лучше тогда сразу использовать NRF24LE.
Скорее бы приехали, уже полтора месяца жду.
STC15F204+NRF24L01
учитывая что STC15F204 это 8051 чип, лучше тогда сразу использовать NRF24LE.
Скорее бы приехали, уже полтора месяца жду.
ко мне приехали, правда руки не доходят
Организовал передачу данных, а точнее пока что просто счетчик с интервалом в 1с. Una посылает данные, mega принимает. Использовал библиотеку rf24. Решил это дело вывести на дисплей, стандартный 16х2.
И как результат ничего не работает. Вторая строка вообще не выводится, хоть стандартную надпись, хоть данные которые приходят. Первая строчка искажается в хаотичном порядке при запуске скетча, и со временем все стирается от туда. В мониторинге все хорошо, все приходит. Выводы Miso и Mosi я объеденил. Остальное не трогал. Такое начинается когда вставляешь код настроики радио в setup
А это выводится если инициализацию диспле прописать после настроек радио, т.е. в конце setup-а
Кто что подскажет?
Вторая строка вообще не выводится, хоть стандартную надпись, хоть данные которые приходят. Первая строчка искажается в хаотичном порядке при запуске скетча, и со временем все стирается от туда. В мониторинге все хорошо, все приходит.
Кто что подскажет?
если все приходит в "мониторинге" - значит в lcd проблема. попробуйте использовать lcd.clear()/ В скетче где
lcd.print(
"Temperatura!"
)
перед этим то же необходимо установить курсорlcd.setCursor
объясните пожалуйста не понимющему, а зачем при передачи пытаться все запихнуть в массив? когда мне кажется проще передавать структурой, да и рабоать со структурой поудобней т.к. можно хранить данные с разных датчиков и в разных форматах( int, float и т.д.) в отличии от массива?
объясните пожалуйста не понимющему, а зачем при передачи пытаться все запихнуть в массив? когда мне кажется проще передавать структурой, да и рабоать со структурой поудобней т.к. можно хранить данные с разных датчиков и в разных форматах( int, float и т.д.) в отличии от массива?
вы правы - структурой удобнее и понятней, но не принципиально, все равно фактическая передача идет байтами от 1 до 32.
И как результат ничего не работает.
SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS).
И кстати, а где мануал?
объясните пожалуйста не понимющему, а зачем при передачи пытаться все запихнуть в массив? когда мне кажется проще передавать структурой, да и рабоать со структурой поудобней т.к. можно хранить данные с разных датчиков и в разных форматах( int, float и т.д.) в отличии от массива?
вы правы - структурой удобнее и понятней, но не принципиально, все равно фактическая передача идет байтами от 1 до 32.
а я уже было испугался что делаю не по феншую )
тогда значит мой пример очень даре рабочий ( только заменить нужноconst uint64_t pipes[2] = { 0xF0F0F0F0F1LL, 0xF0F0F0F0D2LL }; чтоб одинаковые адреса были)
внесу разнообразие в обсуждение )
и еще заметил странность, скорее даже не странность, а нужно похоже переходить на прерывания т.к. с сетевым шилдом, когда по веб интерфейсу лазищь, пакеты теряются (
я так понял что дисплей тоже на SPI
не можно ничего пихнуть в дисплей. потому что SPI занята прослушиванием эфира :)
там выше в теме уже обсуждалось. почему rf24 и Ethernet ловят глюки и не инициализуются...
вы должны закончить с одним прибором на SPI и переключится на другой... вы не можете в процессе прыгать туда сюда...
и очень сложно слушать эфир и тут же пытатся чего то пихать на дисплей :)
про ноды, смотрите мой пример... задаеш ноду куда шлеш все и отсылаеш :)
Проблемма решилась путем изменения пинов miso и mosi у LCD на любые другие, в моем случае на 43, 44. И все заработало))
Модет кто подскажет как нормально реализовать прием и в тоже время нормальную работу ethernet шилда? А то пакеты теряются зараза. Прерывания использовать для nf думаю будет не лучшее решение. Как думаете?
это все тут уже обсуждалось в этой ветке...
какая у вас клева SPI раз и на другие пины переназначил... вот бы мне где такую найти...
это все тут уже обсуждалось в этой ветке...
какая у вас клева SPI раз и на другие пины переназначил... вот бы мне где такую найти...
Факт в том что работает. Может в библиотеке как-то програмно заменяется... И если не переназначать, то как можно реализовать правильно?