Skocz do zawartości

nrf24l01 wysyłanie kilku danych


Kamar

Pomocna odpowiedź

Witam

Che wysłać kilka danych przez nrf24l01 temperature, ciśnienie i wilgotność. Na początku wysyłałem je wszystkie pojedynczo i arduino odbierało dane lecz w sposób losowy. Teraz pierwszy raz używam tablicy i wysyłając dane obieram tylko temperaturę inne wartości mają wartość 0. Co jest tego przyczyną, czy muszę jakoś na nowo zdefiniować tablice po stronie odbiornika?

Odbiornik


#include <LiquidCrystal_I2C.h>              // wyswietlacz
#include <virtuabotixRTC.h>                 // moduł zegara RTC DS1302
#include <SPI.h>                            // SPI
#include <nRF24L01.h>                       // moduł radiowy
#include <RF24.h>                           // moduł radiowy

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE); 
const uint64_t pipe = 0x1CFABC163783;       //kod kanału
RF24 radio(9, 10);                          //tworzymy instancje komunikacji


float humidity;
float pressure;
float temperature;
int valueInside;
int valueOutside;
unsigned long aktualnyCzas ;
unsigned long zapamietanyCzas ;
float measurement[3];
 
#define inside 4
#define outside 5

 
 void setup()  
{
  radio.begin();                            //uruchom moduł radiowy
  radio.openReadingPipe(1,pipe);            //zacznij odczyt z kanału o danym kodzie
  radio.startListening();                   //zacznij odczyt danych
  Serial.begin(9600);
  lcd.begin(16, 2); 
  digitalWrite(inside, INPUT_PULLUP);
  digitalWrite(outside, INPUT_PULLUP);
}
 
 
 
 void loop()  { 
  if (radio.available()){                    //jeżeli są jakieś dane do odczytu
      radio.read(&measurement, sizeof(float)); //czytaj dane          
  
      }
 aktualnyCzas = millis();
 temperature=measurement[0];
  pressure=measurement[1];
   humidity=measurement[2];
      Serial.println(measurement[1]);
 }

Nadajnik

#include <SPI.h>                            //dodaj obsługę biblioteki SPI
#include <nRF24L01.h>                       //dodaj bibliotekę obsługującą moduł
#include <RF24.h>                           //dodaj bibliotekę główną modułów RF24
#include "Seeed_BME280.h"                   // BME280
BME280 bme280;
 const uint64_t pipe = 0x1CFABC163783;       //kod kanału
 RF24 radio(9, 10);                          //tworzymy instancje komunikacji
float measurement[3];


void setup()  
{
  radio.begin();                           //uruchamiamy moduł
  radio.openWritingPipe(pipe);             //rozpocznij transmisję 
  bme280.init();
  Serial.begin(9600);
  }

 void loop() 
{
measurement[0]= bme280.getTemperature();
            
 measurement[1]=bme280.getPressure()/100 ;
       
  measurement[2]=bme280.getHumidity();   
       radio.write(&measurement, sizeof(float));
       Serial.println(measurement[1]);
}

 

Link do komentarza
Share on other sites

Wysyłasz tylko 4 bajty, bo tyle ma typ float - sizeof(float). Powinieneś wysłać bajtów sizeof(measurement).

Można też zmienić cały komunikat do wysłania na jeden napis np: "msg:25.6,1013.25,45.4" ( a jeszcze lepiej używaj int czy uint32_t i miej to w pamięci przy obliczeniach: "msg:256,101325,454". Taki komunikat wyślesz raz, odbierzesz raz, podzielisz sobie na poszczególne stringi z powrotem, pozamieniasz na liczby i będzie OK.

Tu wrzuciłem przykład dla serial, jak w odbiorniku masz odebranego stringa to robisz analogicznie:

 Jak sobie szyfrujesz dane lub wyliczasz CRC to pewnie lepiej tablice.

  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.