Одновременная работа 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.
Разнесите на разные пины.