nrf24l01+mega+nano
- Войдите на сайт для отправки комментариев
Пт, 01/03/2013 - 01:17
В наличии одна мега, одна нано и 4 радиомодуля nrf24l01. Был небольшой тестовый проект - на ардуину нано собирались данные с датчиков
#include <duino.h> #include <SPI.h> #include <Mirf.h> #include <nRF24L01.h> #include <MirfHardwareSpiDriver.h> #include <DHT.h> DHT dht(3, DHT22); //Создаем датчик DHT11 на 3 пине void setup(){ Serial.begin(9600); Mirf.cePin = 8; Mirf.csnPin = 10; dht.begin(); //Инициализируем датчик DHT Mirf.spi = &MirfHardwareSpi; Mirf.init(); Mirf.setRADDR((byte *)"nano"); Mirf.payload = 8; Mirf.config(); Serial.println("Beginning ... "); } void loop(){ float t1 = 0; float t = dht.readTemperature(); float h = dht.readHumidity(); unsigned long time = millis(); Serial.print("Local_temp="); Serial.println(t); Serial.println(h); duino2_ temphum = {t,h}; // передаём температуру Serial.println(temphum.Y); Serial.println(temphum.Z); Mirf.setTADDR((byte *)"mega"); Mirf.send((byte *)&temphum); while(Mirf.isSending()){ } Serial.println("Finished sending"); delay(1000); }
И потом пересылались на мегу где выводились на lcd с включаемой по движению подсветкой
#include <duino.h> #include <SPI.h> #include <Mirf.h> #include <nRF24L01.h> #include <MirfHardwareSpiDriver.h> #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); int backLight = 13; const int analogInPin = A0; int sensorValue = 0; void setup(){ Serial.begin(9600); pinMode(backLight, OUTPUT); Mirf.csnPin = 53; Mirf.spi = &MirfHardwareSpi; Mirf.init(); Mirf.payload = 8; Mirf.config(); Serial.println("Listening..."); } void loop(){ //byte data[Mirf.payload]; float t = 0; float h = 0; duino2_ temphum = {t,h}; if(!Mirf.isSending() && Mirf.dataReady()) { Mirf.getData((byte *)&temphum); Serial.println(temphum.Y); Serial.println(temphum.Z); lcd.begin(16,2); lcd.clear(); lcd.setCursor(0,0); lcd.print("Temperatyra: "); lcd.print(temphum.Y); lcd.setCursor(0,1); lcd.print("Vlajnost: "); lcd.print(temphum.Z); lcd.print("%"); delay(500); sensorValue = analogRead(analogInPin); if (sensorValue >=500){ digitalWrite(backLight, HIGH); } else digitalWrite(backLight, LOW); } //Serial.println(data); //Serial.println(sensorValue); }
Все до поры до времени работало, потом после какой то сборки-переборки и других проектов, было все снова собрано, подключено и перепроверено по нескольку раз, но так ничего и не заработало. В ходе экспериментов было выявлено, что если мега выступает в качестве передатчика то нано нормально принимает данные, а если наоборот то мега ничего не может принять, в чем может быть проблема? Все пины при подключении вызванивались несколько раз, подключено все верно :(
А куда со стороны Меги у вас подключен вывод модуля СЕ ?
А куда со стороны Меги у вас подключен вывод модуля СЕ ?
По дефолту на 8й и вручную используя Mirf.cePin на другие переключал толку ноль
Так и где он у вас проинициализирован в коде?
Ну как я понял из описания библиотеки он 8й пин использует по умолчанию, можно переназначить на другой если надо, но даже когда менял в коде и менял подключение например на 9й и дописывал Mirf.cePin = 9 толку небыло
Да есть такое, а со стороны меги адреса не должны быть прописаны?
хотя бы адрес приема?
Да есть такое в этой версии забыл дописать, но с ним ничего не изменилось (
Да и просто там с библиотекой есть скетчи примеры пинг_серв и пинг_клиент и с ними тоже нифига теперь не работает, самое интересное что думал мол проблема в модулях, сегодня приехали новые и такая же ситуация, а на старых если на питания модуля подать вместо 3.3в подать 5в, то начинает хоть как то работать
5В подавать не стоит - спалите модули
Кстати, дома больше нет других, работающих модулей nrf24?
У меня была проблема, что два "модуля" работали между собой прекрасно. А вот когда в систему стал добавлять третий - были большие затыки и ничего толком не работало. Решение описал тут: http://arduino.ru/forum/proekty/peredacha-temperatury-s-datchikov-dht11-ds18b20-cherez-nrf24l01#comment-9619
5В подавать не стоит - спалите модули
Кстати, дома больше нет других, работающих модулей nrf24?
У меня была проблема, что два "модуля" работали между собой прекрасно. А вот когда в систему стал добавлять третий - были большие затыки и ничего толком не работало. Решение описал тут: http://arduino.ru/forum/proekty/peredacha-temperatury-s-datchikov-dht11-ds18b20-cherez-nrf24l01#comment-9619
Да я знаю что 5в не стоит, просто решил проверить и каким то чудом заработало :) Модулей всего 4 передавать только между двумя пробовал, но тасовал их по разному эффект тот же. Мог на меге заглючить один из выводов SPI? MISO например и теперь не передает данные к мастеру, и как его проверить можно? Желательно без осцилографа)
Самое интересное что в первоначальном варианте все работало, данные передавались-принимались и отлично выводились
Если вдруг кто столкнется с такой же проблемой, то решение было найдено на другом форуме:
The power supply on the megas can mess up this module. Try adding a large capacitor (>1uf) across 3.3v and ground
И правда установка конденсатора помогла решить проблему.
угу.. "блокировочные конденсаторы" - их вообще полезно ставить
Добрый день.
Почти такаяже ситуация. Есть 3 дуины: UNO (приемник), Mega256 (передатчик) и Pro Mini (передатчик).
у Mega и Pro Mini код один и тотже:
У приемника такой:
Только Mega работает нормально, а Pro Mini ничего абсолютно не передает в эфир. Вот схема для последней:

В этой схеме менял Pro Mini на Mega - все работает. Возвращаю обратно - опять тишина.
Пробовал запитывать схему через модуль питания мекетки MB102, такой: http://www.ebay.com/itm/170886733144 на дуину подавал +5В, на NRF24L01 +3.3В с общей землей - все равно не работает.
Куда копать уже мысли кончились.
Оказывается напутал всетаки с питанием.
Та что выше схема, скорее всего будет работать только с Arduino Pro Mini 3.3V 8M (как приедет буду проверять).
Для Arduino Pro Mini 5V 16M необходимо добавить стабилизатор AMS1117-3.3 или LM1117-3.3. Вот с такой схемой работает все нормально:
В наличии одна мега, одна нано и 4 радиомодуля nrf24l01. Был небольшой тестовый проект - на ардуину нано собирались данные с датчиков
Доброго времени суток! Начинаю осваивать библиотеки для дуино и появились вопросы. Помогите пожалуйста разобраться с библиотекой SPI применительно к NRF2L01
http://arduino.ru/forum/programmirovanie/rabota-s-spi
я собрался собрался использовать NRF24L01 на 5В от Mega2560б , или так не надо делать? (еще мне будут доступны Mini Micro и UNO, но все они пятивольтовые); прочел в обзоре, что модули NRF24L01 лояльны к входным сигналам 5В:
http://avrproject.ru/publ/kak_podkljuchit/radiomoduli_nrf24l01/2-1-0-92
Почти такаяже ситуация. Есть 3 дуины: UNO (приемник), Mega256 (передатчик) и Pro Mini (передатчик).
у Mega и Pro Mini код один и тотже:
У приемника такой:
Подскажите у вас получилось передавать данные с двух передатчиков и принимать их.
У меня 1 UNO в качестве сервера на ней кроме nrf24l01 еще DS1302 и Ethernet shield с SD картой.
В качестве передатчиков 2 NANO с nrf24l01 и HT11-HT22.
Пробовал ваш скетч. Немного переделав под себя.
Все модули работают корректно и выдают в СОМ порт то, что задумано.
Все нормально работает только когда один передатчик в эфире.
Когда включаю второй. данные идут в разнобой. правильная комбинация иногда совпадает, но редко, примерно 1 раз в 26 сек, иногда реже.
Имена всех переменных иддивидуальны, имена контроллеров доже разные.
может быть есть полность рабочий комплект скетчей на два передатчика и один приемник.
В идеале планируется добиться получения с 4-х клиентов информацию с нескольких подключенных к ним датчиков (разных-температуры, растояния, газа, света) на центральный блок. с него отдавать инфу на WEB морду, записывать лог с датчиков на SD с привязкой ко времени. И обратная связь: т.е. возможность управлять 2-3 реле на каждом клиенте.
По отдельности уже все опробовано, осталось увязать все в комплекс и тут возникла описанная выше проблема.
Буду признателен за помощь и подсказки, ссылки по теме.
помогите пожалуйста
на меге подключаю sd card и nrf24l01 по шине spi начинает конфликтовать nrf24l01 а отдельно все работает
что надо при этом сделать
Вангую, что пин Chip Select (CS) для обоих устройств задан один и тот же. Он для каждого устройства должен быть свой.
нет для обоих разный
для одного 53
для другого 47
передатчик
передатчик
мега в передатчике в loop после joy(); есть
if (SaveTemperature != dht.readTemperature())
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
Не стал создавать тему отдельную, мжет тут кт тветит)
Хчу сделать авторизацию "свей" метки 2.4ггц, как на современных автосигнализациях. Аппаратно для этого что потребуется? или проще купить метки от сигнализации и их уже женить с например NRF24L01?