Нужна помощь с NRF24l01

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем vankenshtein, 24 сен 2014.

  1. vankenshtein

    vankenshtein Нерд

    Данные передаются только при включении передатчика. И потом тишина. Т.е. дал питание данные передались один раз и все, хотелось бы что б постоянно шли
    В сериале выдает:

    Listening
    Humidity : 36
    Temperature :25

    Всего один раз, а должно быть циклично

    Передатчик:
    Код (Text):
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    #define CE_PIN  9
    #define CSN_PIN 10
    #include "DHT.h"
    #define DHTTYPE DHT11
    #define DHTPIN 2
    DHT dht(DHTPIN, DHTTYPE);
    const uint64_t pipe = 0xE8E8F0F0E1LL;
    RF24 radio(CE_PIN, CSN_PIN);
    int dannye[3];

    void setup()
    {
      Serial.begin(9600);
      dht.begin();
      radio.begin();
      radio.openWritingPipe(pipe);
    }

    void loop()
    {
      dannye[0]=dht.readHumidity();
      dannye[1]=dht.readTemperature();
      radio.write(dannye, sizeof(dannye) );
        //Serial.print("Humidity :");
        //Serial.println(dannye[0]);
        // Serial.print("Temperature :");
        // Serial.println(dannye[1]);
    }
    Приемник:

    Код (Text):
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    #define CE_PIN  9
    #define CSN_PIN 10
    const uint64_t pipe = 0xE8E8F0F0E1LL;
    RF24 radio(CE_PIN, CSN_PIN);
    int dannye[3];

    void setup()
    {
    Serial.begin(9600);
      radio.begin();
      radio.openReadingPipe(1,pipe);
      radio.startListening();
      Serial.print("Listening");
    }


    void loop()
    {
      if ( radio.available() )
      {
        bool done = false;
        while (!done)
        {
          done = radio.read( dannye, sizeof(dannye) );
          Serial.print("Humidity :");
          Serial.println(dannye[0]);
          Serial.print("Temperature :");
          Serial.println(dannye[1]);
       
         
    }
      }
      }
     
  2. rozhkovets

    rozhkovets Нерд

    Могу ошибаться, попробуй добавить done = false; после всех Serial.print.
     
  3. vankenshtein

    vankenshtein Нерд

    спасибо большое за совет, попробую отпишусь
     
  4. vankenshtein

    vankenshtein Нерд

    Попробовал, заработало, вот только вместо показаний нули
     
  5. rozhkovets

    rozhkovets Нерд

    я делаю проект, в котором передаются данные с dht22 c arduino nano v3 на mega 2560 посредством nrf24l01+. пока все еще в начальной стадии

    использую вот эти библиотеки от maniacbug
    https://github.com/maniacbug/RF24
    https://github.com/maniacbug/RF24Network

    мой тестовый код приемника
    Код (Text):

    #include <SPI.h> // библиотека для SPI интерфейса
    #include <RF24.h>// библиотека для беспроводного передатчика nRF24L01+
    #include <RF24Network.h>


    //////Подключение nRF24L01+/////////////
    /*
    Передатчик    |    arduino nano v3
    1  Gnd        |  Gnd (минус)
    2  Vcc        |  + 3.3 В (только 3.3!!!!)
    3  CE        |  D9
    4  CSN        |  D10
    5  SCK        |  D13
    6  MOSI      |  D11
    7  MISO      |  D12
    8  IRQ        |  в данной программе не используется
    */
    #define CE 9
    #define CSN 10
    //////Инициализация и первичная настройка nRF24L01+//////
    RF24 radio(9, 10);
    // Network uses that radio
    RF24Network network(radio);

    // Address of our node
    const uint16_t this_node = 0;

    // Address of the other node
    const uint16_t other_node = 1;

    //float humidity = 9999;        // влажность
    //float temperature = 9999;    // температура (в градусах цельсия)
    //int serial_command = 0;

    // Structure of our payload
    struct payload_t
    {
      float a;
      float b;
    };

    void setup(){
      Serial.begin(9600);
      SPI.begin();
      radio.begin();
      network.begin(/*channel*/ 90, /*node address*/ this_node);
    }

    void loop(){
      // Pump the network regularly
      network.update();
      // Is there anything ready for us?
      while ( network.available() )
      {
        // If so, grab it and print it out
        RF24NetworkHeader header;
        payload_t payload;
        network.read(header,&payload,sizeof(payload));
        Serial.print("Received ....");
        Serial.print(" \t");
        Serial.print(payload.a);
        Serial.print(" \t");
        Serial.println(payload.b);
      }
    }
    передатчика
    Код (Text):
    #include <SPI.h> // библиотека для SPI интерфейса
    #include <RF24.h>// библиотека для беспроводного передатчика nRF24L01+
    #include <RF24Network.h>
    #include "DHT.h" // библиотека для работы с датчиком температуры и влажности DHT

    DHT dht;        // инициализация датчика DHT22
    #define dnt_pin 4
    float humidity;        // влажность
    float temperature;    // температура (в градусах цельсия)

    //////Подключение nRF24L01+/////////////
    /*
    Передатчик    |    arduino nano v3
    1  Gnd        |  Gnd (минус)
    2  Vcc        |  + 3.3 В (только 3.3!!!!)
    3  CE        |  D9
    4  CSN        |  D10
    5  SCK        |  D13
    6  MOSI      |  D11
    7  MISO      |  D12
    8  IRQ        |  в данной программе не используется
    */
    #define CE 9
    #define CSN 10
    //////Инициализация и первичная настройка nRF24L01+//////
    RF24 radio(9, 10);
    RF24Network network(radio);
    const uint16_t this_node = 1; // Address of our node
    const uint16_t other_node = 0; // Address of the other node

    boolean query = false; // статус запроса на измерение температуры и влажности и передачу данных
    int serial_command;    // команда, принятая через serial порт

    struct payload_t
    {
      float a;
      float b;
    };

    void setup()
    {
      Serial.begin(9600);
      dht.setup(dnt_pin);      // data pin 4 // вход для датчика DHT22
      SPI.begin();
      radio.begin();          //настройка nRF24L01+
      network.begin(/*channel*/ 90, /*node address*/ this_node);
    }

    void read_sensor(){        //выполняем измерение температуры и влажности
      delay(dht.getMinimumSamplingPeriod());
      temperature = dht.getTemperature();
      humidity = dht.getHumidity();
      Serial.println("read seansor");
      Serial.print(temperature, 1);    // 1 - количество знаков после запятой
      Serial.print(" \t");            // табуляция, отступ
      Serial.println(humidity, 1);
    }

    void loop()
    {

      read_sensor();
      // Pump the network regularly
      network.update();
      payload_t payload = {temperature, humidity};
      RF24NetworkHeader header(/*to node*/ other_node);
        bool ok = network.write(header,&payload,sizeof(payload));
        if (ok)
          Serial.println("ok.");
        else
          Serial.println("failed.");
    }
     
  6. vankenshtein

    vankenshtein Нерд

    А какую библиотеку для DHT используете?
     
  7. vankenshtein

    vankenshtein Нерд

    Код (Text):
    DHT dht;        // инициализация датчика DHT22
    #define dnt_pin 4
    float humidity;        // влажность
    float temperature;    // температура (в градусах цельсия)
    Мне кажется тут ошибка у Вас #define dnt_pin 4
     
  8. rozhkovets

    rozhkovets Нерд

    библиотеку брал тут https://github.com/markruys/arduino-DHT
    автоопределение используемого датчика, требуется только указать пин

    а что имеено Вас смутило?
     
  9. vankenshtein

    vankenshtein Нерд

    #define dnt_pin 4#define dnt_pin 4#define dnt_pin 4#define dnt_pin 4#define dnt_pin 4#define dnt_pin 4
    Там не должно быть #define dht_pin 4 может и нет, я только начинаю осваивать.
    Спасибо за ответы
     
  10. vankenshtein

    vankenshtein Нерд

    заработало!!!!!! Огромное вам спасибо за помощь. Насколько я понял можно несколько передатчиков в сеть включить?
     
  11. rozhkovets

    rozhkovets Нерд

    Пожалйста, да, скорее всего можно, нужно документацию к библиотеке почитать
     
  12. код приёмника не компилируется. Как же это может работать. Что-то done не нравится
    void value not ignored as it ought to be