Подключение 2 передатчиков к 1 приемнику nRF24L01

Juzzo
Offline
Зарегистрирован: 06.03.2018

Нужно сделать так, чтобы данные температуры и влажности передавались с двух ардуино на третью.

Подскажите как это сделать, весь интернет перерыл, но ничего не смог найти.

Вот код для передачи с одной ардуино на другую.

Передатчик

#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);
  }
}



 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Не понятно, что Вы пытались делать, и в чем именно состояит проблема.

Juzzo
Offline
Зарегистрирован: 06.03.2018

Нужно сделать так:

1-ардуино снимает показания с датчика температу и отправляет данные на 3-ардуино

2-ардуино снимает показания с датчика температу и отправляет данные на 3-ардуино

3-ардуино принимает данные с 1-ардуино и 2-ардуино.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/*Так вы в пакете потеряли адрес от кого отправлено*/
1 - ардуино снимает показания с датчика температу и отправляет данные на 3 - ардуино
/*пакет-от ардуино 1 температура такая*/
2 - ардуино снимает показания с датчика температу и отправляет данные на 3 - ардуино
/*пакет-от ардуино 2 температура такая*/
3 - ардуино принимает данные с 1 - ардуино и 2 - ардуино.
/*если пакет от ардуины1 то температуру записать сюда
  если пакет от ардуины2 то температуру записать туда
*/

 

Juzzo
Offline
Зарегистрирован: 06.03.2018

Первый передатчик отправляет и данные принимаются и их видно в сериал-порте, а данные со второго датчика не приходят, в чем может быть проблема?

Приемник

#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();
}

 

 

a5021
Offline
Зарегистрирован: 07.07.2013

С этими NRF24L01 наблюдал такой эффект: настраиваем приемник и передатчик, чтобы они нормально друг друга видели, т.е. обменивались данными. Период обмена 1 минута. Разносим их друг от друга и убеждаемся, что данные передаются. Затем, размещаем близ приемника третий передатчик с периодом отправки данных 15 сек. Все, с этого момента приемник перестает видеть "дальний" передатчик. Совсем. Если "ближний" выключить, то через некоторое время начинаются приниматься данные от дальнего. Такой вот феномен.

b707
Offline
Зарегистрирован: 26.05.2017

Juzzo - попробуйте передавать данные с обоих передатчиков на одну и ту же трубу