Одновременная работа nRF24L01 и HR911105A

Aresei
Aresei аватар
Offline
Зарегистрирован: 02.02.2022

Добрый день, участники форума. Недавно начал свой проект на ардуино и столкнулся с такой проблемой, что у меня одновременно не могут работать nRF24L01 и HR911105A(mini enc28j60). Я делаю свою метеостанцию с двумя блоками. Первый блок - уличный. Он измеряет температуру, влажность и отправляет эти данные на второй блок. Второй блок - домашний. Он принимает данные с первого блока, измеряет давление и должен отправлять данные через enc28J60 на сайт. Но, когда я одновременно использую nRF24L01 и HR911105A, то у меня ни то, ни другое не работает. Уважаемые, подскажите, пожалуйста, как заставить работать вместе nRF24L01 и HR911105A? Куда, что воткнуть, куда, что написать, и что стоит почитать для решения этой проблемы? Ниже прикреплю свой скетч и всю распиновку.

P.s. у меня там в домашнем блоке еще подключено BMP180 и LCD2004.

P.s.s. ниже я оставил ссылки на детали и я знаю, что датчик nRF24L01 китайский и на него надо припаять конденсатор. Я это уже сделал.

P.s.s.s по отдельности nRF24L01 и HR911105A отлично работают
 

Скетч домашнего блока

// IP 192.168.31.200
#include <LiquidCrystal_I2C.h>//Библиотека для дисплея

#include <nRF24L01.h>//Библиотека для радиомодуля
#include <RF24.h>//Библиотека для радиомодуля
#include <SPI.h>

#include <Wire.h> // библиотека для управления устройствами по I2C 

#include "SFE_BMP180.h"//Библиотека для bmp180
#define ALTITUDE 1600.0
//
//#include <EtherCard.h>
#include "ETHER_28J60.h"
#include "etherShield.h"
ETHER_28J60 e;
static uint8_t mac[6] = {0x74,0x69,0x69,0x2D,0x30,0x31};
static uint8_t ip[4] = {192,168,31,200};
static uint16_t port = 80;

LiquidCrystal_I2C LCD(0x27, 20, 4); // присваиваем имя LCD для дисплея
RF24 radio(9, 53); // Создаем объект для RF24, указываем номера выводов модуля

SFE_BMP180 pressure;//Создаем объект



void setup() {
  bool trigger = true;
  digitalWrite(SS, HIGH);
  SPI.begin();

  e.setup(mac,ip,port);//!!!
  
  LCD.init();//Инициализируем экран
  LCD.backlight();//Включаем подсветку экрана

  LCD.setCursor(0, 0);
  LCD.print("Display - work");

  //pressure.begin();//Запускаем bmp180
  if (pressure.begin())
  {
    LCD.setCursor(0, 1);
    LCD.print("BMP180 - work");
  }
  else
  {
    LCD.setCursor(0, 1);
    LCD.print("BMP180 - not work");
    trigger = false;
  }

  //radio.begin();//Включаем радиопередатчик
  if (radio.begin())
  {
    LCD.setCursor(-4, 2);
    LCD.print("nRF24L01 - work");
  }
  else
  {
    LCD.setCursor(-4, 2);
    LCD.print("nRF24L01 - not work");
    trigger = false;
  }
  radio.setChannel(0);//Указываем канал передачи данных(0-127)
  radio.setDataRate(RF24_1MBPS);//Указываем скорость передачи данных. Скорость должна быть одинаковой
  radio.setPALevel(RF24_PA_HIGH);//Указываем мощность передатчика
  radio.openReadingPipe(1, 0x1234567890LL);//Открываем 1 трубу с адресом 1 передатчика 0x0123456789LL
  radio.startListening(); //Включаем и слушаем

  Serial.begin(9600);//Инициируем передачу данных по шине UART в монитор последовательного порта
  delay(5000);
  LCD.clear();
}

void loop() {
  char status;
  double T, P, p0, a;

  int data[2] = {};

  status = pressure.startTemperature();
  if (status != 0)
  {
    delay(status);

    status = pressure.getTemperature(T);//Записываем температуру в T
    if (status != 0)
    {
      LCD.setCursor(-4, 2);
      LCD.print("T:");
      LCD.print(T);
      LCD.print(" C");

      status = pressure.startPressure(3);//Записываем давление
      if (status != 0)
      {
        delay(status);

        status = pressure.getPressure(P, T);
        if (status != 0)
        {
          p0 = pressure.sealevel(P, ALTITUDE);

          LCD.setCursor(-4, 3);
          LCD.print("P: ");
          LCD.print(P * 0.7500637554192);
          LCD.print(" mmHg");
        }
        else Serial.println("error retrieving pressure measurement\n");
      }
      else Serial.println("error starting pressure measurement\n");
    }
    else Serial.println("error retrieving temperature measurement\n");
  }
  else Serial.println("error starting temperature measurement\n");

  if (radio.available())
  {
    radio.read(&data, sizeof(data));
    //Serial.print("data[0]: ");
    //Serial.print(data[0]);
    LCD.setCursor(0, 0);
    LCD.print("T: ");
    LCD.print(data[0]);
    LCD.print(" C");

    //Serial.print(" data[1]: ");
    //Serial.println(data[1]);
    LCD.setCursor(0, 1);
    LCD.print("Hum: ");
    LCD.print(data[1]);
    LCD.print(" %");
  }
  
  e.print("<H3>Данные</H3><br>");
  e.print("Температура от BMP180: ");
  e.print(T);
  e.print(" C<br>");
  e.print("Давление от BMP180: ");
  e.print(P * 0.7500637554192);
  e.print(" mmHg<br>");
  e.print("Температура от DS18B20: ");
  e.print(data[0]);
  e.print(" C<br>");
  e.print("Влажность от SI7021: ");
  e.print(data[1]);
  e.print(" %<br>");
  
  delay(5000);
  LCD.clear();
  
}

Распиновка

nRF24L01 - Arduino MEGA 2560
 
GND - GND
VCC - 3V
CE - 9
CSN - 53
SCK - 52
MOSI - 51
MISO - 50
 
LCD 2004 - Arduino MEGA 2560
 
GND - GND
VCC - 5V 
SDA - SDA
SCL - SCL
 
BMP180 - Arduino MEGA 2560
 
GND - GND
VIN - 5v
SCL - 21(SCL)
SDA - 20(SDA)
 
ENG60j28 - Arduino MEGA 2560
 
VCC - 5v
GND - GND
CS - 53
SI - 51
SO - 50
SCK - 52
 
Так же прикладываю магазины откуда купил все комплектующие, вдруг поможет в решении проблемы:
1) https://aliexpress.ru/item/1005001972473161.html?_1ld=3120413_1&_randl_currency=RUB&_randl_shipto=RU&acnt=4173237791&aff_platform=jvru&aff_short_key=brxT3bLh&albad=481188168148&albag=110288398221&albagn=mbag&albch=dspl&albcp=11664845271&albkwd=pla-872184315538&campaignName=JVRU_CM_ALI_WEBall_RU_UA_sTRADE_ROAS_TOPSALEDIRECT_0_Perform&cn=11664845271&dp=CjwKCAjw4qCKBhAVEiwAkTYsPKoNtoqHSoltfY_hYZhWwAooNEt9kurSSjBOaOQA8wvtc6Z0APKqBxoCtQQQAvD_BwE&feed_id=20&gclid=CjwKCAjw4qCKBhAVEiwAkTYsPKoNtoqHSoltfY_hYZhWwAooNEt9kurSSjBOaOQA8wvtc6Z0APKqBxoCtQQQAvD_BwE&isdl=y&item_id=1005001972473161&netw=u&sellermenu_hide=true&sku_id=12000018275636415&src=googleweb&tracelog=googleweb_jvru_mbag_11664845271&utm_campaign=JVRU_CM_ALI_WEBall_RU_UA_sTRADE_ROAS_TOPSALEDIRECT_0_Perform&utm_medium=mbag_cpc&utm_source=google
 
 
 
 
 
sadman41
Offline
Зарегистрирован: 19.10.2016

HR911105A - это 8P8C розетка на плату RJ45 10/100Мб

У разных SPI устройств входы CS должны быть связаны с разными выходами Arduino.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Aresei пишет:

nRF24L01 - Arduino MEGA 2560
GND - GND
VCC - 3V
CE - 9
CSN - 53
SCK - 52
MOSI - 51
MISO - 50
 
ENG60j28 - Arduino MEGA 2560
VCC - 5v
GND - GND
CS - 53
SI - 51
SO - 50
SCK - 52

Разнесите на разные пины.