Общее подключение nRF24L01 и sd card по SPI ,возникла проблема

Cat-Programmer
Offline
Зарегистрирован: 29.03.2018

Делаю метеостацию с загрузкой температуры на sd карту и отправкой данных по nRF24L01 на другое арлуино.Но я остановился на серьезной проблеме , эти два модуля не хотят работать вместе.Как настроить скетч чтоб они работали ?

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

Поменять местами строки 16 и 21.

Cat-Programmer
Offline
Зарегистрирован: 29.03.2018
//dht22
#include "DHT.h"                               // Подключаем библиотеку DHT 
#define DHTPIN 2                               // Пин к которому подключен датчик
#define DHTTYPE DHT22                          // Используемый датчик DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);                      // Инициализируем датчик
//bmp280
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bme;
//rtc
#include <iarduino_RTC.h>    
iarduino_RTC time(RTC_DS3231);
//nrf24 
#include <SPI.h>          // библиотека для работы с шиной SPI
#include "nRF24L01.h"     // библиотека радиомодуля
#include "RF24.h"
RF24 radio(9, 10);
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
byte counter;
//SD
#include <SPI.h>
#include <SD.h>
File myFile;
//датчик дождя
#define PIN_ANALOG_RAIN_SENSOR A0  // Аналоговый вход для сигнала датчика протечки и дождя










   



void setup() 
{
  delay(1000);
  Serial.begin(9600);                          // Задаем скорость передачи данных
  Serial.println("тест!");
  //стар SD
  SD.begin(4);
  //стар термометра
  dht.begin();
  //стар времени
  time.begin();
  //стар давления
  bme.begin();
  //стар радиомодуля
  radio.begin(); //активировать модуль
  radio.setAutoAck(1);         //режим подтверждения приёма, 1 вкл 0 выкл
  radio.setRetries(0, 15);    //(время между попыткой достучаться, число попыток)
  radio.enableAckPayload();    //разрешить отсылку данных в ответ на входящий сигнал
  radio.setPayloadSize(32);     //размер пакета, в байтах

  radio.openWritingPipe(address[0]);   //мы - труба 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() 
{
   

 
//массив для радиомодуля
  float data[4];
//каждую секунду
  if(millis()%5000==0){


    float sensorValue = analogRead(PIN_ANALOG_RAIN_SENSOR); // Считываем данные с аналогового порта

    float t = dht.readTemperature();

    float h = dht.readHumidity();

    float p = bme.readPressure();


    myFile = SD.open("data.txt", FILE_WRITE);
   
    myFile.print(time.gettime("d-m-Y, H:i:s, D"));
    myFile.print("   ");
    myFile.print(t);
    myFile.print("   ");
    myFile.print(h);
    myFile.print("   ");
    myFile.print(p);
    myFile.print("   ");
    myFile.print(sensorValue);
    myFile.println(" ");
     
    myFile.close();


   

    data[0] = t;
    data[1] = h;
    data[2] = p;
    data[3] = sensorValue;
    
    
    radio.write(&data, sizeof(data));

    Serial.println(t);
    Serial.println(h);
    Serial.println(p);
    Serial.println(sensorValue);
    


    
    
    


   }
     
  

 }

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Некоторые китайские модули SD не отпускают линию MISO, даже когда их CS в высоком уровне. Убедитесь, что у вас не такой проблемный модуль. Если такой - то самый простой вариант, если модуль дорабатывать не хочется - это взять 74HC125 и все линии MISO всех модулей на SPI пустить через неё.

Cat-Programmer
Offline
Зарегистрирован: 29.03.2018

А 74HC125 это сдвиговый регистр?

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

Еще можно в линию MISO проблемного модуля включить последовательно резистор 1-2 кОма.

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

Cat-Programmer пишет:

Делаю метеостацию с загрузкой температуры на sd карту и отправкой данных по nRF24L01 на другое арлуино.Но я остановился на серьезной проблеме , эти два модуля не хотят работать вместе.Как настроить скетч чтоб они работали ?

Ну во-первых, зачем модуль карты располагать на передатчике, ведь передатчик находится в метео-будке на улице. Я модуль карты расположил в приемной части, которая с дисплеем и прочими делами находится дома. При необходимости карту можно вытащить, вставить в комп и получать красивые диаграммы всех измерений.

Чтобы совместить карту, модуль nRF24L01, дисплей, клаву пришлось на приемной стороне использовать ардуино мега и библиотеку soft-spi, поменяв некоторые выводы, так что это все вместе работает

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Cat-Programmer пишет:

А 74HC125 это сдвиговый регистр?

Нет. Это 3-state buffer.

Cat-Programmer
Offline
Зарегистрирован: 29.03.2018

Я возращаюсь к этой теме.Итак,метод с резисторами не сработал.Я заметил что проблемный модуль это nrf24l01 .

Когда я подсоеденяю sd модуль к SPI,то nrf24l01 отлючается,даже если я использую скечт только для nrf24l01.Есть ещё какие-то методы кроме трёх канального буфера?И да мне надо именно сохранять данные в блоке который будет на улице.Потому что я хочу по желанию отключать сам приемник,допустим на ночь

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Cat-Programmer пишет:

 кроме трёх канального буфера?

74HC125 - четырёхканальный буфер. Каждый канал которого - 3-state, т.е. имеет три состояния.

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

Cat-Programmer пишет:

Я возращаюсь к этой теме.Итак,метод с резисторами не сработал.Я заметил что проблемный модуль это nrf24l01 .

Когда я подсоеденяю sd модуль к SPI,то nrf24l01 отлючается,даже если я использую скечт только для nrf24l01.

Странно.

При таких симптомах, я бы решил, что проблемный модуль как раз SD. 

Вы резистор то куда подключали: к MISO карты или к MISO nrf?

Cat-Programmer
Offline
Зарегистрирован: 29.03.2018

хм к самому nrf24l01 - этот модуль как раз и не работал,а надо было к sd ?Сейчас подключу к sd

Cat-Programmer
Offline
Зарегистрирован: 29.03.2018

Спасибо!!!Неужели заработало