首页 > 解决方案 > 在 2 个 arduino 之间使用 NRF24L01 发送多个传感器值

问题描述

我一直在到处寻找这个问题的答案,但我很难过。我有 2 个使用 NRF24L01 收发器进行通信的 arduino。我想发送 2 个传感器值,一个是浮点数,一个是整数。我试过了:

1) 单独发送。打印时这些值似乎会干扰,在每个循环中创建一个额外的 0 和换行符。

2) 将两个值组合在一个字符串中。字符串在另一端不可读。

我正在尝试以以下格式获取数据:

传感器1Val,传感器2Val

这是我的发射器代码的示例:

#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>

RF24 Transmitter(9, 10);

const byte address[6] = {"00001"};

int sensorVal1 = 0;
float sensorVal2 = 2.5;

void setup() {
Serial.begin(9600);

//TRANSMITTER STUFF//
Transmitter.begin(); 
Transmitter.openWritingPipe(address); 
Transmitter.setPALevel(RF24_PA_MIN); 
Transmitter.setChannel(87); 
Transmitter.setDataRate(RF24_250KBPS); 
Transmitter.stopListening(); 
}



void loop() 
{
Serial.print(sensorVal1);
Serial.print(", ");
Serial.println(sensorVal2);

Transmitter.write(&sensorVal1, sizeof(sensorVal1));
Transmitter.write(&sensorVal2, sizeof(sensorVal2));
delay(1000); //Wait 1s between measurements
sensorVal1++;
sensorVal2++;
} 

这是我的接收器代码的示例:

#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>

RF24 Receiver(9, 10); 


const byte address[6] = {"00001"}; 
at a certain address (integer, 6)

int receive1;
float receive2;

void setup() {
Serial.begin(9600); 
Receiver.begin(); 
Receiver.openReadingPipe(0, address); 
Receiver.setPALevel(RF24_PA_MIN); 
Receiver.setChannel(87);
Receiver.setDataRate(RF24_250KBPS); 
Receiver.startListening(); 

}

void loop() {


 if (Receiver.available()) { 

    Receiver.read(&receive1, sizeof(receive1)); 
    Receiver.read(&receive2, sizeof(receive2));

    Serial.print(receive1);
    Serial.print(", ");
    Serial.println(receive2);

    delay(100);

   }
 }

我是arduino的新手,所以任何帮助都将不胜感激!

标签: arduino

解决方案


使用结构发送数据。

struct MyStruct {

  int sensorVal1;
  float sensorVal2;

};

发件人代码

MyStruct myStruct;
// initialise the members of the structure with the values you want
Transmitter.write(&myStruct, sizeof(myStruct));

接收端

MyStruct myStruct;
Receiver.read(&myStruct, sizeof(myStruct));

推荐阅读