Подключение 2 передатчиков к 1 приемнику nRF24L01
- Войдите на сайт для отправки комментариев
Вс, 05/08/2018 - 16:31
Нужно сделать так, чтобы данные температуры и влажности передавались с двух ардуино на третью.
Подскажите как это сделать, весь интернет перерыл, но ничего не смог найти.
Вот код для передачи с одной ардуино на другую.
Передатчик
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "DHT.h"
#define DHTPIN 8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
float tem = 0.0;
float hum = 0.0;
RF24 radio(9, 10);
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
struct package
{
float temperature ;
float humidity ;
};
typedef struct package Package;
Package data;
void setup() {
Serial.begin(9600);
dht.begin();
radio.begin();
radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток)
radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал
radio.setPayloadSize(32); //размер пакета, в байтах
radio.openWritingPipe(address[0]);
radio.setChannel(0x60);
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()
{
hum = dht.readHumidity();
tem = dht.readTemperature();
Serial.print("--- Wireless Weather Station ---\n");
Serial.print("Temperature = ");
Serial.print(tem);
Serial.println(" ºC");
Serial.print("Humidity = ");
Serial.print(hum);
Serial.println(" %");
Serial.print("--------------------------------\n\n");
delay(2000);
readSensor();
radio.write(&data, sizeof(data));
}
void readSensor()
{
data.temperature = dht.readTemperature();
data.humidity = dht.readHumidity();
}
Приемник
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
float remoteHumidity = 0.0;
float remoteTemperature = 0.0;
struct package
{
float temperature;
float humidity;
};
typedef struct package Package;
Package data;
RF24 radio(9, 10);
//RF24 radio(9,53); // для Меги
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};
void setup() {
Serial.begin(9600);
radio.begin();
radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток)
radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал
radio.setPayloadSize(32); //размер пакета, в байтах
radio.openReadingPipe(1, address[0]);
radio.openReadingPipe(2, address[1]);
radio.setChannel(0x60);
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();
}
void loop(void)
{
checkForWirelessData();
}
void checkForWirelessData()
{
if ( radio.available())
{
while (radio.available())
{
radio.read(&data, sizeof(data));
remoteTemperature = data.temperature;
remoteHumidity = data.humidity;
}
Serial.print("\nPackage:");
Serial.print("\n");
Serial.println(data.temperature);
Serial.println(data.humidity);
}
}
Не понятно, что Вы пытались делать, и в чем именно состояит проблема.
Нужно сделать так:
1-ардуино снимает показания с датчика температу и отправляет данные на 3-ардуино
2-ардуино снимает показания с датчика температу и отправляет данные на 3-ардуино
3-ардуино принимает данные с 1-ардуино и 2-ардуино.
Первый передатчик отправляет и данные принимаются и их видно в сериал-порте, а данные со второго датчика не приходят, в чем может быть проблема?
Приемник
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" float remoteHumidity1 = 0; float remoteTemperature1 = 0; float remoteHumidity2 = 0; float remoteTemperature2 = 0; struct package { float temperature; float humidity; }; typedef struct package Package; Package data; RF24 radio(9, 10); //RF24 radio(9,53); // для Меги byte pipe; void setup() { Serial.begin(9600); radio.begin(); radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток) radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал radio.openReadingPipe(1, 0xAABBCCDD11LL); radio.openReadingPipe(2, 0xAABBCCDD22LL); radio.setChannel(0x60); 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(); } void loop(void) { delay(1000); checkForWirelessData(); } void checkForWirelessData() { if (radio.available(&pipe)) { radio.read(&data, sizeof(data)); if (pipe == 1) { remoteTemperature1 = data.temperature; remoteHumidity1 = data.humidity; } if (pipe == 2) { remoteTemperature2 = data.temperature; remoteHumidity2 = data.humidity; } } Serial.print("\nPackage:"); Serial.print("\n"); Serial.println(remoteTemperature1); Serial.println(remoteHumidity1); Serial.print("\nPackage:"); Serial.print("\n"); Serial.println(remoteTemperature2); Serial.println(remoteHumidity2); }#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" #include "DHT.h" #define DHTPIN 8 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); float tem = 0.0; float hum = 0.0; RF24 radio(9, 10); byte pipe; struct package { float temperature ; float humidity ; }; typedef struct package Package; Package data; void setup() { Serial.begin(9600); dht.begin(); radio.begin(); radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток) radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал radio.openWritingPipe(0xAABBCCDD22LL); radio.setChannel(0x60); 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() { hum = dht.readHumidity(); tem = dht.readTemperature(); Serial.print("--- Wireless Weather Station ---\n"); Serial.print("Temperature = "); Serial.print(tem); Serial.println(" ºC"); Serial.print("Humidity = "); Serial.print(hum); Serial.println(" %"); Serial.print("--------------------------------\n\n"); delay(2000); readSensor(); radio.write(&data, sizeof(data)); } void readSensor() { data.temperature = dht.readTemperature(); data.humidity = dht.readHumidity(); }С этими NRF24L01 наблюдал такой эффект: настраиваем приемник и передатчик, чтобы они нормально друг друга видели, т.е. обменивались данными. Период обмена 1 минута. Разносим их друг от друга и убеждаемся, что данные передаются. Затем, размещаем близ приемника третий передатчик с периодом отправки данных 15 сек. Все, с этого момента приемник перестает видеть "дальний" передатчик. Совсем. Если "ближний" выключить, то через некоторое время начинаются приниматься данные от дальнего. Такой вот феномен.
Juzzo - попробуйте передавать данные с обоих передатчиков на одну и ту же трубу