Как передать структуру между двумя ESP32 по проводам?
Структура:
struct street {
float TEMPERATURE;
float RH;
};
struct room {
float TEMPERATURE;
float RH;
uint32_t CO2;
};
struct DATA {
street STREET;
room ROOM;
uint8_t CRC;
};
Код передатчик:
#include <CRC8.h>
#include <CRC.h>
uint16_t TIME = 0;
DATA DATA;
void setup() {
Serial2.begin(115200, SERIAL_8N1, U2_RX, U2_TX);
DATA.STREET.TEMPERATURE = 27;
DATA.STREET.RH = 67;
DATA.CRC= crc8((byte*)&data, sizeof(data) - 1)
}
void loop() {
if (millis() - TIME < 1000)
return;
TIME = millis();
Serial2.write((byte*)&DATA, sizeof(DATA));
}
Код приёмника:
void setup(void) {
SERIAL_2.begin(115200, SERIAL_8N1, U3_RX, U3_TX);
}
void loop() {
if (SERIAL_2.available())
{
if (SERIAL_2.readBytes((byte*)&DATA, sizeof(DATA)))
{
Serial.println(DATA.STREET.TEMPERATURE);
Serial.println(DATA.STREET.RH);
}
}
if (millis() - TIME < 1000)
return;
TIME = millis();
[ещё код...]
}
Получаю всякую дичь:
0.00
0.00
27.00
67.00
0.00
0.00
0.00
0.00
47465094
0.00
Правильные данные 1 из 100 и то пока для двух параметров.
Продавал и так:
#pragma pack(1)
struct street {
float TEMPERATURE;
float RH;
};
struct room {
float TEMPERATURE;
float RH;
uint32_t CO2;
};
struct DATA {
street STREET;
room ROOM;
uint8_t CRC;
};
#pragma pack()
Эффекта ни какого.
Как я понял структура отправляет, например uint16_t в 2 байта, а ESP32 ожидает 4 байта, из-за этого данные читаются не верно, поэтому я не использовал такой тип данных при написании структуры, но это не помогло, данные всё равно приходят не верные.