从 Arduino 发送浮点数据类型到 ESP32 (NodeMCU)
Sending Float Data Type from Arduino to ESP32 (NodeMCU)
我正在尝试让 NodeMCU(ESP32) 从 Arduino Uno 接收浮动数据类型,但我不知道如何操作。有人可以指导我完成整个过程吗?现在,我有基本的串行通信代码从 Arduino 发送一个数字 Int 到 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);
}
Write/read 在您使用的形式中,仅适用于单个字节。 Arduino 中的浮点数由 4 个字节组成。
您可以使用 write 发送一系列字节,您必须读取这些字节,一个接一个地到达,具体取决于串行速度。 Synchronization/lost 字节可能是个问题,在这个简单的解决方案中,我假设最好。
发件人:
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
}
我正在尝试让 NodeMCU(ESP32) 从 Arduino Uno 接收浮动数据类型,但我不知道如何操作。有人可以指导我完成整个过程吗?现在,我有基本的串行通信代码从 Arduino 发送一个数字 Int 到 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);
}
Write/read 在您使用的形式中,仅适用于单个字节。 Arduino 中的浮点数由 4 个字节组成。 您可以使用 write 发送一系列字节,您必须读取这些字节,一个接一个地到达,具体取决于串行速度。 Synchronization/lost 字节可能是个问题,在这个简单的解决方案中,我假设最好。
发件人:
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
}