Одновременная работа nRF24L01 и HR911105A
- Войдите на сайт для отправки комментариев
Добрый день, участники форума. Недавно начал свой проект на ардуино и столкнулся с такой проблемой, что у меня одновременно не могут работать 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();
}
Распиновка
HR911105A - это 8P8C розетка на плату RJ45 10/100Мб
У разных SPI устройств входы CS должны быть связаны с разными выходами Arduino.
Разнесите на разные пины.