Rf24 network met stucts

Arduino specifieke Software
Berichten: 68
Geregistreerd: 21 Apr 2013, 22:48
Woonplaats: Hoorn

Rf24 network met stucts

Berichtdoor babbelkwebbel » 12 Aug 2023, 18:07

Beste allemaal,

Ik ben bezig met de RF24 wifi modules en probeer daar mee stucts te verzenden en te ontvangen, het verzenden gaat goed (denk ik), echter het ontvangen niet.
Met de transmitter sketch wordt de struct variable gevuld, en als controle de struct uit geprint naar de serial monitor, en dat gaat goed.
Echter met de reciever sketch komen de gevens niet in de struct, alles wat ik uit print van de struct naar de serial monitor heeft de waarde 0.
Wat echter wel werkt is de functie network.available, de Serial.print geeft keurig de tekst "data available".
Ongetwijfeld zie ik iets over het hoofd maar ik zie het niet, heb diverse voorbeelden op internet gevonden, maar het kwartje valt niet.
Wie ziet wat ik over het hoofd zie???..

RF24 versie 1.4.7
RF24network versie 1.0.17


hier onder beide sketches





Code: Alles selecteren

*******Transmitter*******

#include <stdlib.h>                                                                                     // library for ITOA (converts a INT to Ascii)
#include <SPI.h>                                                                                        // library for SPI bus
#include <Wire.h>                                                                                      // library for I2C bus

#include <RF24.h>                                                                                     // library for RF24 (driver WiFi module)
#include <RF24Network.h>                                                                         // library RF24 network
RF24 radio(9, 10);                                                                                      // make object radio for NRF24L01 Rect_Wifi module
RF24Network network(radio);                                                                      // make object network include radio


const uint16_t server = 00;                                                                         // node address server
const uint16_t fan_server_controller = 01;                                                   // node address fan controller server
// bool update_time_date  = true;
bool update_parameters = false;
uint8_t sensor_tempratures[2] = {23, 28};                                                 // array with data from the temprature sensors
uint8_t alarm_temprature = 18;
uint8_t fan_pwm = 36;

typedef struct
{
  uint8_t from_node;
  uint8_t to_node;
  uint8_t values[15];
  bool values_update;
}
CTS;


void setup()
{
  Serial.begin(115200);                                                                               // start driver serial interface
  Wire.begin();                                                                                            // start driver I2C interface
  radio.begin();                                                                                           // start driver WiFi module
  network.begin(125, fan_server_controller);                                                // start driver network > channel = 125, nodename = fan_server_controller
}


void loop()
{
  network.update();
  process_struct_client_to_server();
  delay(1000);
}


void process_struct_client_to_server()
{
  CTS process = {(0, 0), (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), ("")}; 

  process.from_node = fan_server_controller;
  Serial.print("from node = ");
  Serial.print(process.from_node);
  Serial.print(" ");

  process.to_node = server;
  Serial.print("to node = ");
  Serial.print(process.to_node);
  Serial.println("");
  Serial.println("");

  process.values[0] = sensor_tempratures[0];
  Serial.print("sensor 0 value = ");
  Serial.print(process.values[0]);
  Serial.print("   "); 
 
  process.values[1] = sensor_tempratures[1];
  Serial.print("sensor 1 value = ");
  Serial.print(process.values[1]);
  Serial.print("   ");

  process.values[2] = fan_pwm;
  Serial.print("fan pwm = ");
  Serial.print(process.values[2]);
  Serial.print("   ");

  process.values[3] = alarm_temprature;
  Serial.print("alarm temprature = ");
  Serial.print(process.values[3]);
  Serial.print("   ");
 
  process.values_update = update_parameters;
  Serial.print("values update = ");
  Serial.print(process.values_update);
  Serial.println("");
  Serial.println("");
 

  RF24NetworkHeader header0(server);
  bool ok0 = network.write(header0, &CTS, sizeof(CTS));
}

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------


******Reciever******


#include <SPI.h>                                                                                      // library for SPI bus
#include <Wire.h>                                                                                     // library for I2C bus

#include <RF24.h>                                                                                     // library for RF24 (driver WiFi module)
#include <RF24Network.h>                                                                              // library RF24 network
RF24 radio(9, 10);                                                                                    // make object radio for NRF24L01 Rect_Wifi module
RF24Network network(radio);                                                                           // make object network include radio


uint16_t server = 00;                                                                                 // node address server
uint16_t fan_server_controller = 01;                                                                  // node address fan server controller

bool update_parameters;

uint8_t sensor_tempratures[2] = {};                                                                   // array with data from the temprature sensors
uint8_t alarm_temprature;
uint8_t fan_pwm;


typedef struct
{
  uint8_t from_node;
  uint8_t to_node;
  uint8_t values[15];
  bool values_update;
}
client_to_server;
client_to_server CTS;


void setup()
{
  Serial.begin(115200);                                                                               // start driver serial interface
  Wire.begin();                                                                                       // start driver I2C interface
  radio.begin();                                                                                      // start driver WiFi module
  network.begin(125, server);                                                                         // start driver network > channel = 125, nodename = server
}


void loop()
{
  network.update();
  process_struct_client_to_server();
}


void process_struct_client_to_server()
{
  client_to_server process = {(0, 0), (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), ("")};

  if (network.available())
  {
    Serial.println("data is available");

    RF24NetworkHeader header0;                                               
    network.read(header0, &CTS, sizeof(CTS));
 
    fan_server_controller = process.from_node;
    Serial.print("from node = ");
    Serial.print(fan_server_controller);
    Serial.print(" ");

    server = process.to_node;
    Serial.print("to node = ");
    Serial.print(server);
    Serial.println("");
    Serial.println("");

    sensor_tempratures[0] = process.values[0];
    Serial.print("sensor 0 value = ");
    Serial.print(sensor_tempratures[0]);
    Serial.print("   ");

    sensor_tempratures[1] = process.values[1];
    Serial.print("sensor 1 value = ");
    Serial.print(sensor_tempratures[1]);
    Serial.print("   ");

    fan_pwm = process.values[2];
    Serial.print("fan pwm = ");
    Serial.print(fan_pwm);
    Serial.print("   ");

    alarm_temprature = process.values[3];
    Serial.print("alarm temprature = ");
    Serial.print(alarm_temprature);
    Serial.print("   ");

    update_parameters = process.values_update;
    Serial.print("values update = ");
    Serial.print(update_parameters);
    Serial.println("");
    Serial.println("");
  }
}




Advertisement

Berichten: 62
Geregistreerd: 05 Feb 2023, 13:30

Re: Rf24 network met stucts

Berichtdoor sterretjeToo » 13 Aug 2023, 09:43

Werken simpele voorbeelden wel? Bijvoorbeeld iets als "Hallo wereld" sturen naar de andere kant?

Berichten: 68
Geregistreerd: 21 Apr 2013, 22:48
Woonplaats: Hoorn

Re: Rf24 network met stucts

Berichtdoor babbelkwebbel » 13 Aug 2023, 13:54

Ja geen probleem, hardware technische werkt alles, heb het met een enkele array gedaan en werkt ook, alleen met een struct krijg ik het niet aan de gang, denk dat ik software matig het niet goed doe, maar wat?...

Gr
Babbel,

Berichten: 4086
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Rf24 network met stucts

Berichtdoor shooter » 13 Aug 2023, 15:12

denk je aan afsluiting met /r en /n en ik zie dat je definieert met een zootje 0 en worden dat inderdaad allemaal INT of zit er een float tussen etc. en wellicht is het bericht te lang dus teveel bytes
paul deelen
shooter@home.nl

Berichten: 68
Geregistreerd: 21 Apr 2013, 22:48
Woonplaats: Hoorn

Re: Rf24 network met stucts

Berichtdoor babbelkwebbel » 13 Aug 2023, 15:59

Kom nog niet in de buurt van de 32 Byte limit van de Wire beperking, met sizeoff getest, maar nog steeds geen idee waar het mis gaat......

Berichten: 68
Geregistreerd: 21 Apr 2013, 22:48
Woonplaats: Hoorn

Re: Rf24 network met stucts

Berichtdoor babbelkwebbel » 13 Aug 2023, 16:00

shooter schreef:denk je aan afsluiting met /r en /n en ik zie dat je definieert met een zootje 0 en worden dat inderdaad allemaal INT of zit er een float tussen etc. en wellicht is het bericht te lang dus teveel bytes



Oeps vergeten, zie de stuct opbouw.

typedef struct
{
uint8_t from_node;
uint8_t to_node;
uint8_t values[15];
bool values_update;
}
CTS;

Berichten: 62
Geregistreerd: 05 Feb 2023, 13:30

Re: Rf24 network met stucts

Berichtdoor sterretjeToo » 14 Aug 2023, 18:11

Je transmitter programma compileert niet in IDE 2.x (en met 99.99% waarschijnlijkheid ook niet in IDE 1.x). Hieronder de verbeteringen.

cpp code
CTS process = {0, 0, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, false};


cpp code
bool ok0 = network.write(header0, &process, sizeof(CTS));


Ik heb maar niet gekeken naar de receiver.

Berichten: 68
Geregistreerd: 21 Apr 2013, 22:48
Woonplaats: Hoorn

Re: Rf24 network met stucts

Berichtdoor babbelkwebbel » 15 Aug 2023, 20:48

Geprobeerd echter helaas nog steeds niet werken, ga van het weekend er maar weer eens voor zitten.

In ieder geval bedankt voor het meedenken, wordt erg gewaardeerd.

Groet
Babbel.

Berichten: 62
Geregistreerd: 05 Feb 2023, 13:30

Re: Rf24 network met stucts

Berichtdoor sterretjeToo » 16 Aug 2023, 16:07

babbelkwebbel schreef:Geprobeerd echter helaas nog steeds niet werken


Wat houdt "niet werken" in? Compileert het niet? Of doet het niet wat je verwacht?

Berichten: 68
Geregistreerd: 21 Apr 2013, 22:48
Woonplaats: Hoorn

Re: Rf24 network met stucts

Berichtdoor babbelkwebbel » 16 Aug 2023, 20:27

Sorry voor de late reactie maar ben net thuis na 12 uur werken :roll: :roll:

De sketch Compileert wel, maar doet nog steeds niet wat het zou moeten doen.
Van het weekend ga ik er mee verder, ik houd je op de hoogte.

Groet
Babbel

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: awogiduhi en 16 gasten