in der Print.cpp gibt es einen overload für write mit genau dieser Signatur die einen Buffer vereinzeilt (bzw. wenn du dir den Code ansiehst Bytes ab einem Pointer an die Schnittstelle sendet).
einfach den nächsten Wert wieder mit write senden.
einfach ein uint32_t (z.B.) senden - also noch mal 4 byte.
class DumpInHex : public Print{
public:
using Print::write;
size_t write(uint8_t c)
{
if (c <10 ) Serial.print('0');
Serial.print(c, HEX);
Serial.print(' ');
}
};
DumpInHex client;
float temp = 12.34;
float humidity = 56.78;
uint32_t counter = 123456;
void setup() {
Serial.begin(115200);
client.write((const uint8_t *) & temp, sizeof(temp));
client.write((const uint8_t *) & humidity, sizeof(humidity));
client.write((const uint8_t *) & counter, sizeof(counter));
}
void loop() {
// put your main code here, to run repeatedly:
}
ja einen eigenen Buffer könnte man machen.
PS)
Ich würde nicht über Systemgrenzen (Arduino != SPS) ein Float in binary senden. Ich würde das in plain ASCII machen und dann vermutlich einen Felddelimiter (, oder ; ) setzen.