使用 esp_now 发送数据

问题描述 投票:0回答:2

通常,当我使用

send_now
发送和接收数据时,我使用本教程 code 中的结构。这样,我面临一个问题,即声明一个数组,我需要在结构内部声明大小,以确保发送和接收过程正确完成。虽然有时我需要发送一个数组,但我不知道它的大小是多少,例如这个数组

  double *arry=(double*)malloc(size*sizeof(double));

那么我可以不使用struct来发送吗?或者我可以在结构内部声明 arry[] 而不声明其大小吗?然后指定它的大小?

发送者结构:

typedef struct test_struct {
  int arry[];  I need to send this array but I do not know its size yet
} test_struct;

接收器结构:

typedef struct test_struct {
  int arry[];
} test_struct;

更新: 我试图喜欢这个,但我收到了不正确的值 在发件人

int sizee=100;
double *by=(double*)malloc(sizee*sizeof(double));
  for (int i=0; i < 100; i++) {
       by[i]=i;
       Serial.println(by[i]);
  }
  esp_err_t result = esp_now_send(0, (uint8_t *) &by, sizeof(double));

在接收器中

int sizee=100;
  double *by=(double*)malloc(sizee*sizeof(double));
  Serial.print("rearray=: ");
for(int i=0;i<100;i++){
    Serial.print(by[i]);
}
  Serial.println();
}      
c esp32 arduino-ide arduino-c++
2个回答
2
投票

如果您只是想发送 100 个双精度浮点数,这样就可以了:

int sizee=100;
double *by=(double*)malloc(sizee*sizeof(double));

for (int i=0; i < sizee; i++) {
    by[i]=i;
    Serial.println(by[i]);
}
esp_err_t result = esp_now_send(0, (uint8_t *) by, sizee*sizeof(double));

接收者必须是回调,对吧? 像这样的东西:

void OnDataRecv(const uint8_t * mac_addr, const uint8_t *incomingData, int len) {
  double *by=(double*)incomingData;
  Serial.print("rearray=: ");
  for(int i=0;i<100;i++){
    Serial.print(by[i]);
  }
  Serial.println();
} 

我不知道

Serial.print
是否可以处理双打。 你必须检查一下。


0
投票

ESP-NOW 版本 2 允许 1490 字节。
更改您的库并重新编译。

多一点 - V2 将自动调整功率和发射速率,或者您可以覆盖此设置并在有足够电量时选择慢速、高功率连接,或者如果附近有电池运行则选择快速、低功率连接。 或者任何适合您项目的内容。

再见

© www.soinside.com 2019 - 2024. All rights reserved.