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