将Float数据类型从Arduino发送到ESP32(NodeMCU)

问题描述 投票:1回答:1

我正在尝试让NodeMCU(ESP32)从Arduino Uno接收浮动数据类型,但我不知道如何。有人可以指导我完成此过程吗?现在,我已经有了基本的串行通信代码,可以将一个Int从Arduino发送到NodeMCU。


发送器(Arduino Uno):

int val = 1;

void setup() 
{
  Serial.begin(19200); 
}

void loop() 
{
  Serial.write(val);
  delay(3000);
}

接收器(NodeMCU):

#include <HardwareSerial.h>
HardwareSerial receiver(2);

void setup() 
{
  receiver.begin(19200, SERIAL_8N1, 16, 17); 
  Serial.begin(9600);
}

void loop() 
{
  if(receiver.available() > 0)
  {
    int received = receiver.read();
    Serial.println(received); //tried printing the result to the serial monitor
  }
  delay(3000);
}
arduino nodemcu esp32
1个回答
1
投票

以您使用的形式写/读,仅用于单个字节。 Arduino中的浮点数由4个字节组成。您可以使用write发送一系列字节,而您必须读取这些字节,一个接一个地到达,具体取决于串行速度。同步/丢失字节可能是个问题,在此简单的解决方案中,我假设是最好的。

发件人:

float val = 1.234;

void setup() {
  Serial.begin(19200); 
}

void loop() {
  Serial.write((byte*)&val,4);
  delay(3000);
}

接收者:

#include <HardwareSerial.h>
HardwareSerial receiver(2);

void setup() 
{
  receiver.begin(19200, SERIAL_8N1, 16, 17); 
  Serial.begin(9600);
}
void loop() 
{
  if(receiver.available() > 0)
  {
     delay(5);  // wait for all 4 bytes
     byte buf[4];
     byte* bp = buf;
     while (receiver.available()) {
        *bp = receiver.read();
        if (bp - buf < 3) bp++;
     }  
     float received = * (float*)buf;
     Serial.println(received, 3); // printing the result to the serial monitor
  }
  delay(100); // not really required, should be smaller than sender cycle
}
© www.soinside.com 2019 - 2024. All rights reserved.