Отправка типа данных с плавающей точкой из Arduino в ESP32 (NodeMCU) - PullRequest
1 голос
/ 12 марта 2020

Я пытаюсь, чтобы NodeMCU (ESP32) получил плавающий тип данных от Arduino Uno, но я понятия не имею, как. Может кто-нибудь, пожалуйста, проведите меня через этот процесс? На данный момент у меня есть базовый c код последовательной связи, отправляющий один ди git 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);
}

1 Ответ

1 голос
/ 12 марта 2020

Запись / чтение в форме, которую вы используете, только для отдельных байтов. Поплавок в 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
}
...